/* \r
@ITMillApache2LicenseForJavaFiles@\r
*/\r
-\r
+// \r
package com.itmill.toolkit.terminal.gwt.client.ui;\r
\r
import com.google.gwt.user.client.Command;\r
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.ContainerResizedListener;\r
\r
/* Temporary dragging/animation variables */\r
private boolean dragging = false;\r
- private Timer anim;\r
\r
public ISlider() {\r
super();\r
\r
handleSize = uidl.getIntAttribute("hsize");\r
\r
- if (uidl.hasAttribute("size")) {\r
- size = uidl.getIntAttribute("size");\r
- }\r
-\r
buildBase();\r
\r
if (!vertical) {\r
if (value == null) {\r
return;\r
}\r
+\r
if (value.doubleValue() < min) {\r
value = new Double(min);\r
} else if (value.doubleValue() > max) {\r
domProperty));\r
final int range = baseSize - handleSize;\r
double v = value.doubleValue();\r
+ // Round value to resolution\r
+ if (resolution > 0) {\r
+ v = Math.round(v * Math.pow(10, resolution));\r
+ v = v / Math.pow(10, resolution);\r
+ } else {\r
+ v = Math.round(v);\r
+ }\r
final double valueRange = max - min;\r
double p = 0;\r
if (valueRange > 0) {\r
\r
final int current = DOM.getIntStyleAttribute(handle, styleAttribute);\r
\r
- if ((int) (Math.round(pos)) != current && animate) {\r
- if (anim != null) {\r
- anim.cancel();\r
- }\r
- anim = new Timer() {\r
- private int current;\r
- private final int goal = (int) Math.round(pos);\r
- private int dir = 0;\r
-\r
- public void run() {\r
- current = DOM.getIntStyleAttribute(handle, styleAttribute);\r
-\r
- // Determine direction\r
- if (dir == 0) {\r
- dir = (goal - current) / Math.abs(goal - current);\r
- }\r
-\r
- if ((dir > 0 && current >= goal)\r
- || (dir < 0 && current <= goal)) {\r
- cancel();\r
- return;\r
- }\r
- final int increment = (goal - current) / 2;\r
- DOM.setStyleAttribute(handle, styleAttribute,\r
- (current + increment) + "px");\r
- }\r
- };\r
- anim.scheduleRepeating(50);\r
- } else {\r
- DOM.setStyleAttribute(handle, styleAttribute, ((int) pos) + "px");\r
- }\r
-\r
- // Round value to resolution\r
- if (resolution > 0) {\r
- v = (int) (v * Math.pow(10, resolution));\r
- v = v / Math.pow(10, resolution);\r
- } else {\r
- v = Math.round(v);\r
- }\r
+ DOM.setStyleAttribute(handle, styleAttribute, (Math.round(pos)) + "px");\r
\r
// TODO give more detailed info when dragging and do roundup\r
DOM.setElementAttribute(handle, "title", "" + v);\r
} else if (dragging || DOM.compare(targ, handle)) {\r
processHandleEvent(event);\r
} else if (DOM.compare(targ, smaller)) {\r
- decreaseValue(event, true);\r
+ decreaseValue(event);\r
} else if (DOM.compare(targ, bigger)) {\r
- increaseValue(event, true);\r
+ increaseValue(event);\r
} else {\r
processBaseEvent(event);\r
}\r
private void processMouseWheelEvent(Event event) {\r
final int dir = DOM.eventGetMouseWheelVelocityY(event);\r
if (dir < 0) {\r
- increaseValue(event, false);\r
+ increaseValue(event);\r
} else {\r
- decreaseValue(event, false);\r
+ decreaseValue(event);\r
}\r
DOM.eventPreventDefault(event);\r
DOM.eventCancelBubble(event, true);\r
switch (DOM.eventGetType(event)) {\r
case Event.ONMOUSEDOWN:\r
if (!disabled && !readonly) {\r
- if (anim != null) {\r
- anim.cancel();\r
- }\r
dragging = true;\r
DOM.setCapture(getElement());\r
DOM.eventPreventDefault(event); // prevent selecting text\r
}\r
}\r
\r
- private void decreaseValue(Event event, boolean animate) {\r
+ private void decreaseValue(Event event) {\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
- }\r
- anim = new Timer() {\r
- public void run() {\r
- if (value.doubleValue() - Math.pow(10, -resolution) > min) {\r
- setValue(new Double(value.doubleValue()\r
- - Math.pow(10, -resolution)), false, true);\r
- }\r
- }\r
- };\r
- anim.scheduleRepeating(100);\r
- DOM.eventCancelBubble(event, true);\r
- } else if (anim != null) {\r
- anim.cancel();\r
- }\r
}\r
\r
- private void increaseValue(Event event, boolean animate) {\r
+ private void increaseValue(Event event) {\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
- }\r
- anim = new Timer() {\r
- public void run() {\r
- if (value.doubleValue() - Math.pow(10, -resolution) < max) {\r
- setValue(new Double(value.doubleValue()\r
- + Math.pow(10, -resolution)), false, true);\r
- }\r
- }\r
- };\r
- anim.scheduleRepeating(100);\r
- DOM.eventCancelBubble(event, true);\r
- } else if (anim != null) {\r
- anim.cancel();\r
- }\r
}\r
\r
private void setValueByEvent(Event event, boolean animate, boolean roundup) {\r
// Calculate decoration size\r
DOM.setStyleAttribute(base, "height", "0");\r
DOM.setStyleAttribute(base, "overflow", "hidden");\r
- final int decoHeight = DOM.getElementPropertyInt(getElement(),\r
- "offsetHeight");\r
- // Get available space size\r
- final int availableHeight = DOM.getElementPropertyInt(DOM\r
- .getParent(getElement()), "offsetHeight");\r
- int h = availableHeight - decoHeight;\r
+ int h = DOM.getElementPropertyInt(getElement(), "offsetHeight");\r
if (h < MIN_SIZE) {\r
h = MIN_SIZE;\r
}\r