]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixes #2096: ISlider now pushes the value change event from scroll wheel to server...
authorJouni Koivuviita <jouni.koivuviita@itmill.com>
Mon, 6 Oct 2008 08:16:54 +0000 (08:16 +0000)
committerJouni Koivuviita <jouni.koivuviita@itmill.com>
Mon, 6 Oct 2008 08:16:54 +0000 (08:16 +0000)
svn changeset:5595/svn branch:trunk

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

index a6d5b6e2a210cc80f553df1a0fda757a8181a865..5076dfbc75f886ca4e8cad6b805471884ba122f8 100644 (file)
@@ -9,12 +9,13 @@ import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.DeferredCommand;\r
 import com.google.gwt.user.client.Element;\r
 import com.google.gwt.user.client.Event;\r
+import com.google.gwt.user.client.Timer;\r
 import com.google.gwt.user.client.ui.Widget;\r
 import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;\r
+import com.itmill.toolkit.terminal.gwt.client.BrowserInfo;\r
 import com.itmill.toolkit.terminal.gwt.client.ContainerResizedListener;\r
 import com.itmill.toolkit.terminal.gwt.client.Paintable;\r
 import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
-import com.itmill.toolkit.terminal.gwt.client.Util;\r
 \r
 public class ISlider extends Widget implements Paintable, Field,\r
         ContainerResizedListener {\r
@@ -144,12 +145,12 @@ public class ISlider extends Widget implements Paintable, Field,
             DeferredCommand.addCommand(new Command() {\r
                 public void execute() {\r
                     buildHandle();\r
-                    setValue(value, false, false);\r
+                    setValue(value, false);\r
                 }\r
             });\r
         } else {\r
             buildHandle();\r
-            setValue(value, false, false);\r
+            setValue(value, false);\r
         }\r
     }\r
 \r
@@ -179,7 +180,7 @@ public class ISlider extends Widget implements Paintable, Field,
                                 DOM.setStyleAttribute(base, styleAttribute, "");\r
                             }\r
                             // Ensure correct position\r
-                            setValue(value, false, false);\r
+                            setValue(value, false);\r
                         }\r
                     }\r
                 });\r
@@ -221,7 +222,7 @@ public class ISlider extends Widget implements Paintable, Field,
 \r
     }\r
 \r
-    private void setValue(Double value, boolean animate, boolean updateToServer) {\r
+    private void setValue(Double value, boolean updateToServer) {\r
         if (value == null) {\r
             return;\r
         }\r
@@ -261,12 +262,10 @@ public class ISlider extends Widget implements Paintable, Field,
         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
+            p = range - p - (BrowserInfo.get().isIE6() ? 1 : 0);\r
         }\r
         final double pos = p;\r
 \r
-        final int current = DOM.getIntStyleAttribute(handle, styleAttribute);\r
-\r
         DOM.setStyleAttribute(handle, styleAttribute, (Math.round(pos)) + "px");\r
 \r
         // TODO give more detailed info when dragging and do roundup\r
@@ -276,11 +275,11 @@ public class ISlider extends Widget implements Paintable, Field,
         this.value = new Double(v);\r
 \r
         if (updateToServer) {\r
-            client.updateVariable(id, "value", this.value.doubleValue(),\r
-                    immediate);\r
+            updateValueToServer();\r
         }\r
     }\r
 \r
+    @Override\r
     public void onBrowserEvent(Event event) {\r
         if (disabled || readonly) {\r
             return;\r
@@ -289,24 +288,39 @@ public class ISlider extends Widget implements Paintable, Field,
 \r
         if (DOM.eventGetType(event) == Event.ONMOUSEWHEEL) {\r
             processMouseWheelEvent(event);\r
-        } else if (dragging || DOM.compare(targ, handle)) {\r
+        } else if (dragging || 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 if (targ == smaller) {\r
+            decreaseValue(true);\r
+        } else if (targ == bigger) {\r
+            increaseValue(true);\r
         } else {\r
             processBaseEvent(event);\r
         }\r
     }\r
 \r
-    private void processMouseWheelEvent(Event event) {\r
+    private Timer scrollTimer;\r
+\r
+    private void processMouseWheelEvent(final Event event) {\r
         final int dir = DOM.eventGetMouseWheelVelocityY(event);\r
+\r
         if (dir < 0) {\r
-            increaseValue(event);\r
+            increaseValue(false);\r
         } else {\r
-            decreaseValue(event);\r
+            decreaseValue(false);\r
+        }\r
+\r
+        if (scrollTimer != null) {\r
+            scrollTimer.cancel();\r
         }\r
+        scrollTimer = new Timer() {\r
+            @Override\r
+            public void run() {\r
+                updateValueToServer();\r
+            }\r
+        };\r
+        scrollTimer.schedule(100);\r
+\r
         DOM.eventPreventDefault(event);\r
         DOM.eventCancelBubble(event, true);\r
     }\r
@@ -324,13 +338,13 @@ public class ISlider extends Widget implements Paintable, Field,
         case Event.ONMOUSEMOVE:\r
             if (dragging) {\r
                 // DOM.setCapture(getElement());\r
-                setValueByEvent(event, false, false);\r
+                setValueByEvent(event, false);\r
             }\r
             break;\r
         case Event.ONMOUSEUP:\r
             dragging = false;\r
             DOM.releaseCapture(getElement());\r
-            setValueByEvent(event, true, true);\r
+            setValueByEvent(event, true);\r
             break;\r
         default:\r
             break;\r
@@ -340,27 +354,27 @@ public class ISlider extends Widget implements Paintable, Field,
     private void processBaseEvent(Event event) {\r
         if (DOM.eventGetType(event) == Event.ONMOUSEDOWN) {\r
             if (!disabled && !readonly && !dragging) {\r
-                setValueByEvent(event, true, true);\r
+                setValueByEvent(event, true);\r
                 DOM.eventCancelBubble(event, true);\r
             }\r
         } else if (DOM.eventGetType(event) == Event.ONMOUSEDOWN && dragging) {\r
             dragging = false;\r
             DOM.releaseCapture(getElement());\r
-            setValueByEvent(event, true, true);\r
+            setValueByEvent(event, true);\r
         }\r
     }\r
 \r
-    private void decreaseValue(Event event) {\r
+    private void decreaseValue(boolean updateToServer) {\r
         setValue(new Double(value.doubleValue() - Math.pow(10, -resolution)),\r
-                false, true);\r
+                updateToServer);\r
     }\r
 \r
-    private void increaseValue(Event event) {\r
+    private void increaseValue(boolean updateToServer) {\r
         setValue(new Double(value.doubleValue() + Math.pow(10, -resolution)),\r
-                false, true);\r
+                updateToServer);\r
     }\r
 \r
-    private void setValueByEvent(Event event, boolean animate, boolean roundup) {\r
+    private void setValueByEvent(Event event, boolean updateToServer) {\r
         double v = min; // Fallback to min\r
 \r
         final int coord = vertical ? DOM.eventGetClientY(event) : DOM\r
@@ -388,7 +402,7 @@ public class ISlider extends Widget implements Paintable, Field,
             v = max;\r
         }\r
 \r
-        setValue(new Double(v), animate, roundup);\r
+        setValue(new Double(v), updateToServer);\r
     }\r
 \r
     public void iLayout() {\r
@@ -396,7 +410,7 @@ public class ISlider extends Widget implements Paintable, Field,
             setHeight();\r
         }\r
         // Update handle position\r
-        setValue(value, false, false);\r
+        setValue(value, false);\r
     }\r
 \r
     private void setHeight() {\r
@@ -415,4 +429,8 @@ public class ISlider extends Widget implements Paintable, Field,
         DOM.setStyleAttribute(base, "overflow", "");\r
     }\r
 \r
+    private void updateValueToServer() {\r
+        client.updateVariable(id, "value", value.doubleValue(), immediate);\r
+    }\r
+\r
 }\r