]> source.dussan.org Git - vaadin-framework.git/commitdiff
Some parts of slider component API hidden for now, theme doesn't support them yet...
authorJouni Koivuviita <jouni.koivuviita@itmill.com>
Mon, 29 Oct 2007 13:44:33 +0000 (13:44 +0000)
committerJouni Koivuviita <jouni.koivuviita@itmill.com>
Mon, 29 Oct 2007 13:44:33 +0000 (13:44 +0000)
svn changeset:2618/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/ISlider.java
src/com/itmill/toolkit/ui/Slider.java

index 04ef0ecf0321c3b4e09391a2e6dcabedf80b55dc..e5532d5de906eb5f4394390ffc13cba72d77baca 100644 (file)
@@ -83,7 +83,7 @@ public class ISlider extends Widget implements Paintable,
                DOM.setStyleAttribute(bigger, "display", "none");\r
                DOM.setStyleAttribute(handle, "visibility", "hidden");\r
 \r
-               DOM.sinkEvents(getElement(), Event.MOUSEEVENTS);\r
+               DOM.sinkEvents(getElement(), Event.MOUSEEVENTS | Event.ONMOUSEWHEEL);\r
                DOM.sinkEvents(base, Event.ONCLICK);\r
                DOM.sinkEvents(handle, Event.MOUSEEVENTS);\r
                DOM.sinkEvents(smaller, Event.ONMOUSEDOWN | Event.ONMOUSEUP\r
@@ -168,18 +168,21 @@ public class ISlider extends Widget implements Paintable,
                                DeferredCommand.addCommand(new Command() {\r
                                        public void execute() {\r
                                                Element p = DOM.getParent(getElement());\r
-                                               if (DOM.getElementPropertyInt(p, domProperty) > 50)\r
+                                               if (DOM.getElementPropertyInt(p, domProperty) > (MIN_SIZE + 5)) {\r
                                                        if (vertical) {\r
                                                                setHeight();\r
                                                        } else\r
                                                                DOM.setStyleAttribute(base, styleAttribute, "");\r
+                                                       // Ensure correct position\r
+                                                       setValue(value, false, false);\r
+                                               }\r
                                        }\r
                                });\r
                        }\r
                } else\r
                        DOM.setStyleAttribute(base, styleAttribute, size + "px");\r
 \r
-               // TODO attach listeners for focusing and arrow keys + scroll wheel\r
+               // TODO attach listeners for focusing and arrow keys\r
        }\r
 \r
        private void buildHandle() {\r
@@ -211,6 +214,12 @@ public class ISlider extends Widget implements Paintable,
        }\r
 \r
        private void setValue(Double value, boolean animate, boolean updateToServer) {\r
+               if (value.doubleValue() < min)\r
+                       value = new Double(min);\r
+               else if (value.doubleValue() > max)\r
+                       value = new Double(max);\r
+\r
+               // Update handle position\r
                final String styleAttribute = vertical ? "marginTop" : "marginLeft";\r
                String domProperty = vertical ? "offsetHeight" : "offsetWidth";\r
                int handleSize = Integer.parseInt(DOM.getElementProperty(handle,\r
@@ -226,6 +235,8 @@ public class ISlider extends Widget implements Paintable,
                if (p < 0)\r
                        p = 0;\r
                if (vertical)\r
+                       // IE6 rounding behaves a little unstable, reduce one pixel so the\r
+                       // containing element (base) won't expand without limits\r
                        p = range - p - (Util.isIE6() ? 1 : 0);\r
                final double pos = p;\r
 \r
@@ -260,13 +271,9 @@ public class ISlider extends Widget implements Paintable,
                } else\r
                        DOM.setStyleAttribute(handle, styleAttribute, ((int) pos) + "px");\r
 \r
+               // TODO give more detailed info when dragging and do roundup\r
                DOM.setElementAttribute(handle, "title", "" + v);\r
 \r
-               if (value.doubleValue() < min)\r
-                       value = new Double(min);\r
-               else if (value.doubleValue() > max)\r
-                       value = new Double(max);\r
-\r
                this.value = value;\r
 \r
                if (updateToServer)\r
@@ -277,16 +284,29 @@ public class ISlider extends Widget implements Paintable,
                if (disabled || readonly)\r
                        return;\r
                Element targ = DOM.eventGetTarget(event);\r
-               if (dragging || DOM.compare(targ, handle)) {\r
+\r
+               if (DOM.eventGetType(event) == Event.ONMOUSEWHEEL) {\r
+                       processMouseWheelEvent(event);\r
+               } else if (dragging || DOM.compare(targ, handle))\r
                        processHandleEvent(event);\r
-               } else if (DOM.compare(targ, smaller)) {\r
-                       decreaseValue(event);\r
-               } else if (DOM.compare(targ, bigger)) {\r
-                       increaseValue(event);\r
-               else\r
+               else if (DOM.compare(targ, smaller))\r
+                       decreaseValue(event, true);\r
+               else if (DOM.compare(targ, bigger))\r
+                       increaseValue(event, true);\r
+               else\r
                        processBaseEvent(event);\r
        }\r
 \r
+       private void processMouseWheelEvent(Event event) {\r
+               int dir = DOM.eventGetMouseWheelVelocityY(event);\r
+               if (dir < 0)\r
+                       increaseValue(event, false);\r
+               else\r
+                       decreaseValue(event, false);\r
+               DOM.eventPreventDefault(event);\r
+               DOM.eventCancelBubble(event, true);\r
+       }\r
+\r
        private void processHandleEvent(Event event) {\r
                switch (DOM.eventGetType(event)) {\r
                case Event.ONMOUSEDOWN:\r
@@ -328,11 +348,10 @@ public class ISlider extends Widget implements Paintable,
                }\r
        }\r
 \r
-       private void decreaseValue(Event event) {\r
-               if (DOM.eventGetType(event) == Event.ONMOUSEDOWN) {\r
-                       setValue(\r
-                                       new Double(value.doubleValue() - Math.pow(10, -resolution)),\r
-                                       false, true);\r
+       private void decreaseValue(Event event, boolean animate) {\r
+               setValue(new Double(value.doubleValue() - Math.pow(10, -resolution)),\r
+                               false, true);\r
+               if (DOM.eventGetType(event) == Event.ONMOUSEDOWN && animate) {\r
                        if (anim != null)\r
                                anim.cancel();\r
                        anim = new Timer() {\r
@@ -344,15 +363,14 @@ public class ISlider extends Widget implements Paintable,
                        };\r
                        anim.scheduleRepeating(100);\r
                        DOM.eventCancelBubble(event, true);\r
-               } else\r
+               } else if (anim != null)\r
                        anim.cancel();\r
        }\r
 \r
-       private void increaseValue(Event event) {\r
-               if (DOM.eventGetType(event) == Event.ONMOUSEDOWN) {\r
-                       setValue(\r
-                                       new Double(value.doubleValue() + Math.pow(10, -resolution)),\r
-                                       false, true);\r
+       private void increaseValue(Event event, boolean animate) {\r
+               setValue(new Double(value.doubleValue() + Math.pow(10, -resolution)),\r
+                               false, true);\r
+               if (DOM.eventGetType(event) == Event.ONMOUSEDOWN && animate) {\r
                        if (anim != null)\r
                                anim.cancel();\r
                        anim = new Timer() {\r
@@ -364,7 +382,7 @@ public class ISlider extends Widget implements Paintable,
                        };\r
                        anim.scheduleRepeating(100);\r
                        DOM.eventCancelBubble(event, true);\r
-               } else\r
+               } else if (anim != null)\r
                        anim.cancel();\r
        }\r
 \r
index 213e9aaf608bb09d5dfe0d17870693853f5d0bff..76047097ad6d918bf7df31b97627384088c04f47 100644 (file)
@@ -347,24 +347,24 @@ public class Slider extends AbstractField {
                requestRepaint();\r
        }\r
 \r
-       /**\r
+       /*\r
         * Show or hide slider arrows.\r
         * \r
         * @param visible\r
-        */\r
+        *//*\r
        public void setArrows(boolean visible) {\r
                arrows = visible;\r
                requestRepaint();\r
-       }\r
+       }*/\r
 \r
-       /**\r
+       /*\r
         * Does the slider have arrows?\r
         * \r
         * @return arrows visible\r
-        */\r
+        *//*\r
        public boolean isArrowsVisible() {\r
                return arrows;\r
-       }\r
+       }*/\r
 \r
        public String getTag() {\r
                return "slider";\r
@@ -399,9 +399,6 @@ public class Slider extends AbstractField {
                        target.addAttribute("hsize", handleSize);\r
                else\r
                        target.addAttribute("hsize", 100);\r
-               \r
-               if(!getStyleName().equals(""))\r
-                       target.addAttribute("style", getStyleName());\r
 \r
        }\r
 \r