import java.util.Iterator;
import java.util.Vector;
+import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Frame;
import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollListener;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget;
private boolean modal = false;
+ private Element modalityCurtain;
+
private Element headerText;
public IWindow() {
final int order = windowOrder.size();
setWindowOrder(order);
windowOrder.add(this);
- setStyleName(CLASSNAME);
constructDOM();
setPopupPosition(order * STACKING_OFFSET_PIXELS, order
* STACKING_OFFSET_PIXELS);
}
public void setWindowOrder(int order) {
- DOM.setStyleAttribute(getElement(), "zIndex", ""
- + (order + Z_INDEX_BASE));
+ int zIndex = (order + Z_INDEX_BASE);
+ if (modal) {
+ zIndex += 1000;
+ DOM.setStyleAttribute(modalityCurtain, "zIndex", "" + zIndex);
+ }
+ DOM.setStyleAttribute(getElement(), "zIndex", "" + zIndex);
}
protected void constructDOM() {
final Element wrapper = DOM.createDiv();
DOM.setElementProperty(wrapper, "className", CLASSNAME + "-wrap");
+
final Element wrapper2 = DOM.createDiv();
DOM.setElementProperty(wrapper2, "className", CLASSNAME + "-wrap2");
DOM.appendChild(wrapper2, contents);
DOM.appendChild(wrapper2, footer);
DOM.appendChild(wrapper, wrapper2);
- DOM.appendChild(getElement(), wrapper);
+ DOM.appendChild(super.getContainerElement(), wrapper);
+ DOM.setElementProperty(getElement(), "className", CLASSNAME);
+
setWidget(contentPanel);
// set default size
}
+ public void show() {
+ if (modal) {
+ showModalityCurtain();
+ }
+ super.show();
+ }
+
+ public void hide() {
+ if (modal) {
+ hideModalityCurtain();
+ }
+ super.hide();
+ }
+
private void setModal(boolean modality) {
- // TODO create transparent curtain to create visual clue that window is
- // modal
modal = modality;
+ if (modal) {
+ modalityCurtain = DOM.createDiv();
+ DOM.setElementProperty(modalityCurtain, "className", CLASSNAME
+ + "-modalitycurtain");
+ if (isAttached()) {
+ showModalityCurtain();
+ bringToFront();
+ } else {
+ DeferredCommand.addCommand(new Command() {
+ public void execute() {
+ // modal window must on top of others
+ bringToFront();
+ }
+ });
+ }
+ } else {
+ if (modalityCurtain != null) {
+ if (isAttached()) {
+ hideModalityCurtain();
+ }
+ modalityCurtain = null;
+ }
+ }
+ }
+
+ private void showModalityCurtain() {
+ DOM.appendChild(RootPanel.getBodyElement(), modalityCurtain);
+ }
+
+ private void hideModalityCurtain() {
+ DOM.removeChild(RootPanel.getBodyElement(), modalityCurtain);
}
public void setPopupPosition(int left, int top) {
private EventPreview eventPreview;\r
\r
private String temporaryStyle;\r
+ private int x = -1;\r
+ private int y = -1;\r
\r
public Notification() {\r
setStylePrimaryName(STYLENAME);\r
}\r
\r
public void startDelay() {\r
- DOM.removeEventPreview(eventPreview);\r
+ DOM.releaseCapture(getElement());\r
if (delayMsec > 0) {\r
delay = new Timer() {\r
public void run() {\r
super.show();\r
setPosition(position);\r
\r
- if (eventPreview == null) {\r
- eventPreview = new EventPreview() {\r
- int x = -1;\r
- int y = -1;\r
-\r
- public boolean onEventPreview(Event event) {\r
- switch (DOM.eventGetType(event)) {\r
- case Event.ONMOUSEMOVE:\r
- if (x < 0) {\r
- x = DOM.eventGetClientX(event);\r
- y = DOM.eventGetClientY(event);\r
- } else if (Math.abs(DOM.eventGetClientX(event) - x) > mouseMoveThreshold\r
- || Math.abs(DOM.eventGetClientY(event) - y) > mouseMoveThreshold) {\r
+ DOM.setCapture(getElement());\r
+\r
+ if (style.equals("error")) {\r
+ if (eventPreview == null) {\r
+ eventPreview = new EventPreview() {\r
+ public boolean onEventPreview(Event event) {\r
+ Element target = DOM.eventGetTarget(event);\r
+ if (DOM.isOrHasChild(getElement(), target)\r
+ && DOM.eventGetType(event) == Event.ONCLICK) {\r
startDelay();\r
+ DOM.removeEventPreview(this);\r
+ return true;\r
+ } else {\r
+ DOM.eventCancelBubble(event, true);\r
+ return false;\r
}\r
- break;\r
- case Event.KEYEVENTS:\r
- case Event.ONCLICK:\r
- case Event.ONDBLCLICK:\r
- case Event.ONSCROLL:\r
- default:\r
- startDelay();\r
}\r
- return true;\r
- }\r
- };\r
+ };\r
+ }\r
+\r
+ DOM.addEventPreview(eventPreview);\r
}\r
\r
- DOM.addEventPreview(eventPreview);\r
}\r
\r
public void hide() {\r
- DOM.removeEventPreview(eventPreview);\r
+ DOM.releaseCapture(getElement());\r
cancelDelay();\r
cancelFade();\r
if (temporaryStyle != null) {\r
}\r
\r
public void fade() {\r
+ DOM.releaseCapture(getElement());\r
cancelDelay();\r
fader = new Timer() {\r
int opacity = startOpacity;\r
}\r
\r
public void onBrowserEvent(Event event) {\r
- DOM.removeEventPreview(eventPreview);\r
- if (fader == null) {\r
- fade();\r
+ switch (DOM.eventGetType(event)) {\r
+ case Event.ONMOUSEMOVE:\r
+ if (x < 0) {\r
+ x = DOM.eventGetClientX(event);\r
+ y = DOM.eventGetClientY(event);\r
+ } else if (Math.abs(DOM.eventGetClientX(event) - x) > mouseMoveThreshold\r
+ || Math.abs(DOM.eventGetClientY(event) - y) > mouseMoveThreshold) {\r
+ startDelay();\r
+ }\r
+ break;\r
+ default:\r
+ if (fader == null) {\r
+ fade();\r
+ }\r
+ break;\r
}\r
}\r
\r
});
modal.addComponent(b);
+ b = new Button("click to warning notification",
+ new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ modal.showNotification(
+ "Try clicking the button in main window!",
+ Window.Notification.TYPE_WARNING_MESSAGE);
+ }
+ });
+ modal.addComponent(b);
+
+ b = new Button("click to Humanized notification",
+ new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ modal.showNotification(
+ "Try clicking the button in main window!",
+ Window.Notification.TYPE_HUMANIZED_MESSAGE);
+ }
+ });
+ modal.addComponent(b);
+
+ b = new Button("click to test modality!", new Button.ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ mainWin.addComponent(new Label("clicked"));
+
+ }
+ });
+
+ modal.addComponent(b);
+
mainWin.addWindow(modal);
b = new Button("click to test modality!", new Button.ClickListener() {