Hi,
I added methods to use the new event handling to the Slider Bar.
Also I changed to order of the two public interfaces to make CheckStyle happy.
Thanks,
Uwe
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---
Index: src/com/google/gwt/widgetideas/client/SliderBar.java
===================================================================
--- src/com/google/gwt/widgetideas/client/SliderBar.java (revision 1538)
+++ src/com/google/gwt/widgetideas/client/SliderBar.java (working copy)
@@ -16,6 +16,11 @@
package com.google.gwt.widgetideas.client;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
@@ -24,9 +29,9 @@
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.ChangeListenerCollection;
import com.google.gwt.user.client.ui.FocusPanel;
+import com.google.gwt.user.client.ui.HasValue;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.ImageBundle;
-import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.SourcesChangeEvents;
import java.util.ArrayList;
@@ -62,8 +67,50 @@
* line }</li> </ul>
*/
public class SliderBar extends FocusPanel implements ResizableWidget,
- SourcesChangeEvents {
+ SourcesChangeEvents, HasValue<Double>, HasValueChangeHandlers<Double> {
/**
+ * A formatter used to format the labels displayed in the widget.
+ */
+ public static interface LabelFormatter {
+ /**
+ * Generate the text to display in each label based on the label's value.
+ *
+ * Override this method to change the text displayed within the SliderBar.
+ *
+ * @param slider the Slider bar
+ * @param value the value the label displays
+ * @return the text to display for the label
+ */
+ String formatLabel(SliderBar slider, double value);
+ }
+
+ /**
+ * An {...@link ImageBundle} that provides images for {...@link SliderBar}.
+ */
+ public static interface SliderBarImages extends ImageBundle {
+ /**
+ * An image used for the sliding knob.
+ *
+ * @return a prototype of this image
+ */
+ AbstractImagePrototype slider();
+
+ /**
+ * An image used for the sliding knob.
+ *
+ * @return a prototype of this image
+ */
+ AbstractImagePrototype sliderDisabled();
+
+ /**
+ * An image used for the sliding knob while sliding.
+ *
+ * @return a prototype of this image
+ */
+ AbstractImagePrototype sliderSliding();
+ }
+
+ /**
* The timer used to continue to shift the knob as the user holds down one of
* the left/right arrow keys. Only IE auto-repeats, so we just keep catching
* the events.
@@ -130,48 +177,6 @@
}
/**
- * A formatter used to format the labels displayed in the widget.
- */
- public static interface LabelFormatter {
- /**
- * Generate the text to display in each label based on the label's value.
- *
- * Override this method to change the text displayed within the SliderBar.
- *
- * @param slider the Slider bar
- * @param value the value the label displays
- * @return the text to display for the label
- */
- String formatLabel(SliderBar slider, double value);
- }
-
- /**
- * An {...@link ImageBundle} that provides images for {...@link SliderBar}.
- */
- public static interface SliderBarImages extends ImageBundle {
- /**
- * An image used for the sliding knob.
- *
- * @return a prototype of this image
- */
- AbstractImagePrototype slider();
-
- /**
- * An image used for the sliding knob.
- *
- * @return a prototype of this image
- */
- AbstractImagePrototype sliderDisabled();
-
- /**
- * An image used for the sliding knob while sliding.
- *
- * @return a prototype of this image
- */
- AbstractImagePrototype sliderSliding();
- }
-
- /**
* The change listeners.
*/
private ChangeListenerCollection changeListeners;
@@ -329,7 +334,10 @@
* Add a change listener to this SliderBar.
*
* @param listener the listener to add
+ *
+ * @deprecated Please use addValueChangeHandler
*/
+ @Deprecated
public void addChangeListener(ChangeListener listener) {
if (changeListeners == null) {
changeListeners = new ChangeListenerCollection();
@@ -337,6 +345,11 @@
changeListeners.add(listener);
}
+ @Override
+ public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Double>
handler) {
+ return addHandler(handler, ValueChangeEvent.getType());
+ }
+
/**
* Return the current value.
*
@@ -413,6 +426,11 @@
}
}
+ @Override
+ public Double getValue() {
+ return curValue;
+ }
+
/**
* @return Gets whether this widget is enabled
*/
@@ -470,22 +488,22 @@
}
switch (DOM.eventGetKeyCode(event)) {
- case KeyboardListener.KEY_HOME:
+ case KeyCodes.KEY_HOME:
DOM.eventPreventDefault(event);
setCurrentValue(minValue);
break;
- case KeyboardListener.KEY_END:
+ case KeyCodes.KEY_END:
DOM.eventPreventDefault(event);
setCurrentValue(maxValue);
break;
- case KeyboardListener.KEY_LEFT:
+ case KeyCodes.KEY_LEFT:
DOM.eventPreventDefault(event);
slidingKeyboard = true;
startSliding(false, true);
shiftLeft(multiplier);
keyTimer.schedule(400, false, multiplier);
break;
- case KeyboardListener.KEY_RIGHT:
+ case KeyCodes.KEY_RIGHT:
DOM.eventPreventDefault(event);
slidingKeyboard = true;
startSliding(false, true);
@@ -568,7 +586,10 @@
* Remove a change listener from this SliderBar.
*
* @param listener the listener to remove
+ * @deprecated Please use the HandlerRegistration from
+ * addValueChangeHandler() to remove handler
*/
+ @Deprecated
public void removeChangeListener(ChangeListener listener) {
if (changeListeners != null) {
changeListeners.remove(listener);
@@ -609,6 +630,11 @@
if (fireEvent && (changeListeners != null)) {
changeListeners.fireChange(this);
}
+
+ // Fire the ValueChangeEvent
+ if (fireEvent) {
+ ValueChangeEvent.fire(this, this.curValue);
+ }
}
/**
@@ -712,6 +738,16 @@
resetCurrentValue();
}
+ @Override
+ public void setValue(Double value) {
+ setCurrentValue(value, false);
+ }
+
+ @Override
+ public void setValue(Double value, boolean fireEvent) {
+ setCurrentValue(value, fireEvent);
+ }
+
/**
* Shift to the left (smaller value).
*
Index: src/com/google/gwt/demos/sliderbar/client/SliderBarDemo.java
===================================================================
--- src/com/google/gwt/demos/sliderbar/client/SliderBarDemo.java
(revision 1538)
+++ src/com/google/gwt/demos/sliderbar/client/SliderBarDemo.java
(working copy)
@@ -16,14 +16,15 @@
package com.google.gwt.demos.sliderbar.client;
import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ChangeListener;
-import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.widgetideas.client.ResizableWidgetCollection;
import com.google.gwt.widgetideas.client.SliderBar;
import com.google.gwt.widgetideas.client.SliderBar.LabelFormatter;
@@ -78,9 +79,11 @@
mainSliderBar.setCurrentValue(50.0);
mainSliderBar.setNumTicks(10);
mainSliderBar.setNumLabels(5);
- mainSliderBar.addChangeListener(new ChangeListener() {
- public void onChange(Widget sender) {
- curBox.setText(mainSliderBar.getCurrentValue() + "");
+ mainSliderBar.addValueChangeHandler(new ValueChangeHandler<Double>() {
+
+ @Override
+ public void onValueChange(ValueChangeEvent<Double> event) {
+ curBox.setText(event.getValue().toString());
}
});
exampleBar1.setStepSize(0.1);
@@ -104,8 +107,9 @@
curBox.setText("50.0");
grid.setWidget(0, 1, curBox);
grid.setHTML(0, 2, "The current value of the knob.");
- grid.setWidget(0, 0, new Button("Set Current Value", new ClickListener() {
- public void onClick(Widget sender) {
+ grid.setWidget(0, 0, new Button("Set Current Value", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
mainSliderBar.setCurrentValue(new
Float(curBox.getText()).floatValue());
}
}));
@@ -115,8 +119,9 @@
minBox.setText("0.0");
grid.setWidget(1, 1, minBox);
grid.setHTML(1, 2, "The lower bounds (minimum) of the range.");
- grid.setWidget(1, 0, new Button("Set Min Value", new ClickListener() {
- public void onClick(Widget sender) {
+ grid.setWidget(1, 0, new Button("Set Min Value", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
mainSliderBar.setMinValue(new Float(minBox.getText()).floatValue());
}
}));
@@ -126,8 +131,9 @@
maxBox.setText("100.0");
grid.setWidget(2, 1, maxBox);
grid.setHTML(2, 2, "The upper bounds (maximum) of the range.");
- grid.setWidget(2, 0, new Button("Set Max Value", new ClickListener() {
- public void onClick(Widget sender) {
+ grid.setWidget(2, 0, new Button("Set Max Value", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
mainSliderBar.setMaxValue(new Float(maxBox.getText()).floatValue());
}
}));
@@ -137,8 +143,9 @@
stepSizeBox.setText("1.0");
grid.setWidget(3, 1, stepSizeBox);
grid.setHTML(3, 2, "The increments between each knob position.");
- grid.setWidget(3, 0, new Button("Set Step Size", new ClickListener() {
- public void onClick(Widget sender) {
+ grid.setWidget(3, 0, new Button("Set Step Size", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
mainSliderBar.setStepSize(new
Float(stepSizeBox.getText()).floatValue());
}
}));
@@ -152,8 +159,9 @@
+ "number of ticks is actually one more than the number you "
+ "specify, so setting the number of ticks to one will display a "
+ "tick at each end of the slider.");
- grid.setWidget(4, 0, new Button("Set Num Ticks", new ClickListener() {
- public void onClick(Widget sender) {
+ grid.setWidget(4, 0, new Button("Set Num Ticks", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
mainSliderBar.setNumTicks(new
Integer(numTicksBox.getText()).intValue());
}
}));
@@ -163,8 +171,9 @@
numLabelsBox.setText("5");
grid.setWidget(5, 1, numLabelsBox);
grid.setHTML(5, 2, "The labels above the ticks.");
- grid.setWidget(5, 0, new Button("Set Num Labels", new ClickListener() {
- public void onClick(Widget sender) {
+ grid.setWidget(5, 0, new Button("Set Num Labels", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
mainSliderBar.setNumLabels(new
Integer(numLabelsBox.getText()).intValue());
}
}));
@@ -175,8 +184,9 @@
grid.setWidget(6, 1, widthBox);
grid.setHTML(6, 2, "Set the width of the slider. Use this to see how "
+ "resize checking detects the new dimensions and redraws the
widget.");
- grid.setWidget(6, 0, new Button("Set Width", new ClickListener() {
- public void onClick(Widget sender) {
+ grid.setWidget(6, 0, new Button("Set Width", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
mainSliderBar.setWidth(widthBox.getText());
}
}));
@@ -185,8 +195,10 @@
grid.setWidget(7, 1, defaultTextLabel);
grid.setHTML(7, 2, "Override the format of the labels with a custom"
+ "format.");
- grid.setWidget(7, 0, new Button("Toggle Custom Text", new ClickListener() {
- public void onClick(Widget sender) {
+ grid.setWidget(7, 0, new Button("Toggle Custom Text", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+
if (useCustomText) {
defaultTextLabel.setHTML("default");
useCustomText = false;
@@ -206,8 +218,9 @@
+ "periodically check if the Widget's dimensions have changed. If "
+ "they change, the widget will be redrawn.");
grid.setWidget(8, 0, new Button("Toggle Resize Checking",
- new ClickListener() {
- public void onClick(Widget sender) {
+ new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
if (ResizableWidgetCollection.get().isResizeCheckingEnabled()) {
ResizableWidgetCollection.get().setResizeCheckingEnabled(false);
resizeCheckLabel.setHTML("disabled");