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");