* to be set as an owner of menu
*/
public ContextMenu() {
- super(true);
+ super(true, false, true);
setWidget(menu);
setStyleName("i-contextmenu");
}
super.onPopupClosed(sender, autoClosed);
ContextMenu.this.hide();
}
+
+ /*public void onBrowserEvent(Event event) {
+ // Remove current selection when mouse leaves
+ if (DOM.eventGetType(event) == Event.ONMOUSEOUT) {
+ Element to = DOM.eventGetToElement(event);
+ if (!DOM.isOrHasChild(getElement(), to)) {
+ DOM.setElementProperty(
+ super.getSelectedItem().getElement(), "className",
+ super.getSelectedItem().getStylePrimaryName());
+ }
+ }
+
+ super.onBrowserEvent(event);
+ }*/
}
}
add(calendarToggle);\r
\r
calendar = new CalendarPanel(this);\r
- popup = new ToolkitOverlay(true, true);\r
+ popup = new ToolkitOverlay(true, true, true);\r
popup.setStyleName(IDateField.CLASSNAME + "-popup");\r
popup.setWidget(calendar);\r
popup.addPopupListener(this);\r
- h - calendarToggle.getOffsetHeight() - 30;\r
l += calendarToggle.getOffsetWidth();\r
}\r
- popup.setPopupPosition(l, t\r
- + calendarToggle.getOffsetHeight() + 2);\r
-\r
+ \r
// fix size\r
popup.setWidth(w + "px");\r
popup.setHeight(h + "px");\r
+ \r
+ popup.setPopupPosition(l, t\r
+ + calendarToggle.getOffsetHeight() + 2);\r
+\r
setFocus(true);\r
}\r
});\r
package com.itmill.toolkit.terminal.gwt.client.ui;
import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.PopupListener;
import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.Widget;
/**
* In Toolkit UI this Overlay should always be used for all elements that
public static final int Z_INDEX = 20000;
+ private Shadow shadow;
+
public ToolkitOverlay() {
super();
adjustZIndex();
adjustZIndex();
}
+ public ToolkitOverlay(boolean autoHide, boolean modal, boolean showShadow) {
+ super(autoHide, modal);
+ if (showShadow) {
+ shadow = new Shadow(this);
+ }
+ adjustZIndex();
+ }
+
private void adjustZIndex() {
- DOM.setStyleAttribute(getElement(), "zIndex", "" + (Z_INDEX));
+ DOM.setStyleAttribute(getElement(), "zIndex", "" + Z_INDEX);
+ }
+
+ public void setPopupPosition(int left, int top) {
+ super.setPopupPosition(left, top);
+ if (shadow != null) {
+ shadow.updateSizeAndPosition();
+ }
+ }
+
+ public void show() {
+ super.show();
+ if (shadow != null) {
+ DOM.appendChild(RootPanel.get().getElement(), shadow.getElement());
+ }
+ }
+
+ public void setShadowOffset(int top, int right, int bottom, int left) {
+ if(shadow != null) {
+ shadow.setOffset(top, right, bottom, left);
+ }
+ }
+
+ private class Shadow extends HTML {
+
+ private static final String CLASSNAME = "i-shadow";
+
+ private static final String HTML = "<div class=\"top-left\"></div><div class=\"top\"></div><div class=\"top-right\"></div><div class=\"left\"></div><div class=\"center\"></div><div class=\"right\"></div><div class=\"bottom-left\"></div><div class=\"bottom\"></div><div class=\"bottom-right\"></div>";
+
+ private Widget overlay;
+
+ // Amount of shadow on each side.
+ private int top = 2;
+ private int right = 5;
+ private int bottom = 6;
+ private int left = 5;
+
+ public Shadow(ToolkitOverlay overlay) {
+ super(HTML);
+ setStyleName(CLASSNAME);
+ DOM.setStyleAttribute(getElement(), "position", "absolute");
+
+ this.overlay = overlay;
+ overlay.addPopupListener(new PopupListener() {
+ public void onPopupClosed(PopupPanel sender, boolean autoClosed) {
+ DOM.removeChild(RootPanel.get().getElement(), shadow.getElement());
+ }
+ });
+ }
+
+ public void updateSizeAndPosition() {
+ // Calculate proper z-index
+ String zIndex = DOM.getStyleAttribute(overlay.getElement(),
+ "zIndex");
+ if (zIndex == null) {
+ zIndex = "" + Z_INDEX;
+ }
+
+ // Calculate position and size
+ int x = overlay.getAbsoluteLeft() - left;
+ int y = overlay.getAbsoluteTop() - top;
+ int width = overlay.getOffsetWidth() + left + right;
+ int height = overlay.getOffsetHeight() + top + bottom;
+ if (width < 0) {
+ width = 0;
+ }
+ if (height < 0) {
+ height = 0;
+ }
+
+ // Update correct values
+ DOM.setStyleAttribute(shadow.getElement(), "zIndex", ""
+ + (Integer.parseInt(zIndex) - 1));
+ DOM.setStyleAttribute(getElement(), "width", width + "px");
+ DOM.setStyleAttribute(getElement(), "height", height + "px");
+ DOM.setStyleAttribute(getElement(), "top", y + "px");
+ DOM.setStyleAttribute(getElement(), "left", x + "px");
+ }
+
+ public void setOffset(int top, int right, int bottom, int left) {
+ this.top = top;
+ this.right = right;
+ this.bottom = bottom;
+ this.left = left;
+ if(overlay.isAttached()) {
+ updateSizeAndPosition();
+ }
+ }
+
}
}