/*
* MyGWT Widget Library
* Copyright(c) 2007, MyGWT.
* licensing@mygwt.net
*
* http://mygwt.net/license
*/
package net.mygwt.ui.client.widget;
import net.mygwt.ui.client.MyDOM;
import net.mygwt.ui.client.fx.FXStyle;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventPreview;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
/**
* A panel that grays out the view port and displays a widget above it.
*/
public class ModalPanel extends Composite implements EventPreview {
private SimplePanel panel;
private Widget widget;
/**
* Creates a new model panel.
*/
public ModalPanel() {
panel = new SimplePanel();
initWidget(panel);
panel.setStyleName("my-modal");
panel.setWidth("100%");
panel.setHeight("100%");
}
/**
* Displays the panel.
*/
public void show(Widget widget) {
this.widget = widget;
RootPanel.get().add(this);
RootPanel.get().add(widget);
DOM.setIntStyleAttribute(panel.getElement(), "zIndex", MyDOM.getZIndex());
DOM.setIntStyleAttribute(widget.getElement(), "zIndex", MyDOM.getZIndex());
DOM.addEventPreview(this);
}
/**
* Hides the panel.
*/
public void hide() {
DOM.setIntStyleAttribute(getElement(), "zIndex", -1);
DOM.removeEventPreview(this);
RootPanel.get().remove(this);
RootPanel.get().remove(getWidget());
}
public boolean onEventPreview(Event event) {
Element target = DOM.eventGetTarget(event);
if (DOM.isOrHasChild(widget.getElement(), target)) {
return true;
}
switch (DOM.eventGetType(event)) {
case Event.ONCLICK: {
String tagName = DOM.getElementProperty(target, "tagName");
// IE hack to stop flashing on a resize
if (tagName.equals("BODY")) return false;
FXStyle fx = new FXStyle(getElement());
fx.blink();
break;
}
}
return false;
}
}