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
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
DOM.setStyleAttribute(base, styleAttribute, "");\r
}\r
// Ensure correct position\r
- setValue(value, false, false);\r
+ setValue(value, false);\r
}\r
}\r
});\r
\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
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
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
\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
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
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
v = max;\r
}\r
\r
- setValue(new Double(v), animate, roundup);\r
+ setValue(new Double(v), updateToServer);\r
}\r
\r
public void iLayout() {\r
setHeight();\r
}\r
// Update handle position\r
- setValue(value, false, false);\r
+ setValue(value, false);\r
}\r
\r
private void setHeight() {\r
DOM.setStyleAttribute(base, "overflow", "");\r
}\r
\r
+ private void updateValueToServer() {\r
+ client.updateVariable(id, "value", value.doubleValue(), immediate);\r
+ }\r
+\r
}\r