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

Reply via email to