Преглед на файлове

Some parts of slider component API hidden for now, theme doesn't support them yet. ISlider implementation now more clean and supports the use of scroll wheel.

svn changeset:2618/svn branch:trunk
tags/6.7.0.beta1
Jouni Koivuviita преди 16 години
родител
ревизия
b93275e522
променени са 2 файла, в които са добавени 50 реда и са изтрити 35 реда
  1. 44
    26
      src/com/itmill/toolkit/terminal/gwt/client/ui/ISlider.java
  2. 6
    9
      src/com/itmill/toolkit/ui/Slider.java

+ 44
- 26
src/com/itmill/toolkit/terminal/gwt/client/ui/ISlider.java Целия файл

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

+ 6
- 9
src/com/itmill/toolkit/ui/Slider.java Целия файл

@@ -347,24 +347,24 @@ public class Slider extends AbstractField {
requestRepaint();
}
/**
/*
* Show or hide slider arrows.
*
* @param visible
*/
*//*
public void setArrows(boolean visible) {
arrows = visible;
requestRepaint();
}
}*/
/**
/*
* Does the slider have arrows?
*
* @return arrows visible
*/
*//*
public boolean isArrowsVisible() {
return arrows;
}
}*/
public String getTag() {
return "slider";
@@ -399,9 +399,6 @@ public class Slider extends AbstractField {
target.addAttribute("hsize", handleSize);
else
target.addAttribute("hsize", 100);
if(!getStyleName().equals(""))
target.addAttribute("style", getStyleName());
}

Loading…
Отказ
Запис