blob: e32fe78daa5d0cc3f706d45559f4020d8317f272 [file] [log] [blame]
// Copyright (C) 2009 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gwtexpui.user.client;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.user.client.ui.UIObject;
import java.util.ArrayList;
class PluginSafeDialogBoxImplAutoHide extends PluginSafeDialogBoxImpl {
private boolean hidden;
private ArrayList<HiddenElement> hiddenElements =
new ArrayList<HiddenElement>();
@Override
void visible(final boolean dialogVisible) {
if (dialogVisible) {
hideAll();
} else {
showAll();
}
}
private void hideAll() {
if (!hidden) {
hideSet(Document.get().getElementsByTagName("object"));
hideSet(Document.get().getElementsByTagName("embed"));
hideSet(Document.get().getElementsByTagName("applet"));
hidden = true;
}
}
private void hideSet(final NodeList<Element> all) {
for (int i = 0; i < all.getLength(); i++) {
final Element e = all.getItem(i);
if (UIObject.isVisible(e)) {
hiddenElements.add(new HiddenElement(e));
}
}
}
private void showAll() {
if (hidden) {
for (final HiddenElement e : hiddenElements) {
e.restore();
}
hiddenElements.clear();
hidden = false;
}
}
private static class HiddenElement {
private final Element element;
private final String visibility;
HiddenElement(final Element element) {
this.element = element;
this.visibility = getVisibility(element);
setVisibility(element, "hidden");
}
void restore() {
setVisibility(element, visibility);
}
private static native String getVisibility(Element elem)
/*-{ return elem.style.visibility; }-*/;
private static native void setVisibility(Element elem, String disp)
/*-{ elem.style.visibility = disp; }-*/;
}
}