Sfoglia il codice sorgente

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 anni fa
parent
commit
b93275e522

+ 44
- 26
src/com/itmill/toolkit/terminal/gwt/client/ui/ISlider.java Vedi File

@@ -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 Vedi File

@@ -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…
Annulla
Salva