]> source.dussan.org Git - vaadin-framework.git/commitdiff
Implemented a shadow for ToolkitOverlay and applied it to most overlay elements.
authorJouni Koivuviita <jouni.koivuviita@itmill.com>
Thu, 3 Jul 2008 09:04:13 +0000 (09:04 +0000)
committerJouni Koivuviita <jouni.koivuviita@itmill.com>
Thu, 3 Jul 2008 09:04:13 +0000 (09:04 +0000)
svn changeset:5016/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/ContextMenu.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IFilterSelect.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IPopupCalendar.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ToolkitOverlay.java

index b3c14ba321e21e5281d7b82102e9f1d56dc89062..b97dafee5bff0a56f1ecf93e9487a89887235351 100644 (file)
@@ -27,7 +27,7 @@ public class ContextMenu extends ToolkitOverlay {
      *                to be set as an owner of menu
      */
     public ContextMenu() {
-        super(true);
+        super(true, false, true);
         setWidget(menu);
         setStyleName("i-contextmenu");
     }
@@ -99,5 +99,19 @@ public class ContextMenu extends ToolkitOverlay {
             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);
+        }*/
     }
 }
index 05c05b7f351163074f7effda1398dd7deff90d94..eb16055fd662d8c11d03d33abf83fdc558b57ede 100644 (file)
@@ -105,7 +105,7 @@ public class IFilterSelect extends Composite implements Paintable, Field,
         private long lastAutoClosed;
 
         SuggestionPopup() {
-            super(true);
+            super(true, false, true);
             menu = new SuggestionMenu();
             setWidget(menu);
             setStyleName(CLASSNAME + "-suggestpopup");
index 307519c7139ec6216a22907437db97ec95452078..63af2f75d6bc75a9a0ad81cd1dbd37e80335a017 100644 (file)
@@ -37,7 +37,7 @@ public class IPopupCalendar extends ITextualDate implements Paintable, Field,
         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
@@ -79,12 +79,14 @@ public class IPopupCalendar extends ITextualDate implements Paintable, Field,
                                 - 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
index a56cd245b08abdd40d2a0cd4bc1ebebbec27a830..8c756cb7447d99af8eddf7686c22a9471cfc3e84 100644 (file)
@@ -5,7 +5,11 @@
 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
@@ -16,6 +20,8 @@ public class ToolkitOverlay extends PopupPanel {
 
     public static final int Z_INDEX = 20000;
 
+    private Shadow shadow;
+
     public ToolkitOverlay() {
         super();
         adjustZIndex();
@@ -31,8 +37,104 @@ public class ToolkitOverlay extends PopupPanel {
         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();
+            }
+        }
+
     }
 
 }