Hi,

I noticed that the ValueSpinner has code in the constructor which
injects the style (default or user provided).
This means it gets injected everytime a ValueSpinner is created.

This patch changes this so that the default style only gets injected once.

Also it changes from KeyboardListener to KeyPressHandler, and the new
mouse handlers.

Thanks,
Uwe

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Index: src/com/google/gwt/widgetideas/client/Spinner.java
===================================================================
--- src/com/google/gwt/widgetideas/client/Spinner.java  (revision 1538)
+++ src/com/google/gwt/widgetideas/client/Spinner.java  (working copy)
@@ -16,11 +16,18 @@
 package com.google.gwt.widgetideas.client;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.MouseDownEvent;
+import com.google.gwt.event.dom.client.MouseDownHandler;
+import com.google.gwt.event.dom.client.MouseOutEvent;
+import com.google.gwt.event.dom.client.MouseOutHandler;
+import com.google.gwt.event.dom.client.MouseOverEvent;
+import com.google.gwt.event.dom.client.MouseOverHandler;
+import com.google.gwt.event.dom.client.MouseUpEvent;
+import com.google.gwt.event.dom.client.MouseUpHandler;
 import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.ui.AbstractImagePrototype;
 import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.ImageBundle;
-import com.google.gwt.user.client.ui.MouseListener;
 import com.google.gwt.user.client.ui.Widget;
 
 import java.util.ArrayList;
@@ -77,12 +84,14 @@
     private int counter = 0;
     private int speed = 7;
 
+    @Override
     public void cancel() {
       super.cancel();
       speed = initialSpeed;
       counter = 0;
     }
 
+    @Override
     public void run() {
       counter++;
       if (speed <= 0 || counter % speed == 0) {
@@ -100,48 +109,58 @@
     }
   };
 
-  private MouseListener mouseListener = new MouseListener() {
-    public void onMouseDown(Widget sender, int x, int y) {
+  private MouseDownHandler mouseDownHandler = new MouseDownHandler() {
+
+    @Override
+    public void onMouseDown(MouseDownEvent event) {
       if (enabled) {
+        Image sender = (Image) event.getSource();
         if (sender == incrementArrow) {
-          images.arrowUpPressed().applyTo((Image) sender);
+          images.arrowUpPressed().applyTo(sender);
           increment = true;
           increase();
         } else {
-          images.arrowDownPressed().applyTo((Image) sender);
+          images.arrowDownPressed().applyTo(sender);
           increment = false;
           decrease();
         }
         timer.scheduleRepeating(30);
-      }
+      }  
     }
-
-    public void onMouseEnter(Widget sender) {
+  };
+  
+  private MouseOverHandler mouseOverHandler = new MouseOverHandler() {
+    @Override
+    public void onMouseOver(MouseOverEvent event) {
       if (enabled) {
+        Image sender = (Image) event.getSource();
         if (sender == incrementArrow) {
-          images.arrowUpHover().applyTo((Image) sender);
+          images.arrowUpHover().applyTo(sender);
         } else {
-          images.arrowDownHover().applyTo((Image) sender);
+          images.arrowDownHover().applyTo(sender);
         }
       }
     }
-
-    public void onMouseLeave(Widget sender) {
+  };
+  
+  private MouseOutHandler mouseOutHandler = new MouseOutHandler() {
+    @Override
+    public void onMouseOut(MouseOutEvent event) {
       if (enabled) {
-        cancelTimer(sender);
+        cancelTimer((Widget) event.getSource());
       }
     }
-
-    public void onMouseMove(Widget sender, int x, int y) {
-    }
-
-    public void onMouseUp(Widget sender, int x, int y) {
+  };
+  
+  private MouseUpHandler mouseUpHandler = new MouseUpHandler() {
+    @Override
+    public void onMouseUp(MouseUpEvent event) {
       if (enabled) {
-        cancelTimer(sender);
+        cancelTimer((Widget) event.getSource());
       }
     }
   };
-
+  
   /**
    * @param spinner the widget listening to the arrows
    * @param value initial value
@@ -211,9 +230,15 @@
     this.min = min;
     this.max = max;
     this.initialSpeed = INITIAL_SPEED;
-    incrementArrow.addMouseListener(mouseListener);
+    incrementArrow.addMouseUpHandler(mouseUpHandler);
+    incrementArrow.addMouseDownHandler(mouseDownHandler);
+    incrementArrow.addMouseOverHandler(mouseOverHandler);
+    incrementArrow.addMouseOutHandler(mouseOutHandler);
     images.arrowUp().applyTo(incrementArrow);
-    decrementArrow.addMouseListener(mouseListener);
+    decrementArrow.addMouseUpHandler(mouseUpHandler);
+    decrementArrow.addMouseDownHandler(mouseDownHandler);
+    decrementArrow.addMouseOverHandler(mouseOverHandler);
+    decrementArrow.addMouseOutHandler(mouseOutHandler);
     images.arrowDown().applyTo(decrementArrow);
     fireOnValueChanged();
   }
@@ -302,7 +327,7 @@
    */
   public void setEnabled(boolean enabled) {
     this.enabled = enabled;
-    if  ( enabled ) {
+    if (enabled) {
       images.arrowUp().applyTo(incrementArrow);
       images.arrowDown().applyTo(decrementArrow);
     } else {
Index: src/com/google/gwt/widgetideas/client/ValueSpinner.java
===================================================================
--- src/com/google/gwt/widgetideas/client/ValueSpinner.java     (revision 1538)
+++ src/com/google/gwt/widgetideas/client/ValueSpinner.java     (working copy)
@@ -16,15 +16,15 @@
 package com.google.gwt.widgetideas.client;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
 import com.google.gwt.libideas.client.StyleInjector;
+import com.google.gwt.libideas.resources.client.CssResource;
 import com.google.gwt.libideas.resources.client.DataResource;
 import com.google.gwt.libideas.resources.client.ImmutableResourceBundle;
-import com.google.gwt.libideas.resources.client.TextResource;
 import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.KeyboardListener;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.widgetideas.client.Spinner.SpinnerResources;
 
 /**
@@ -43,9 +43,10 @@
     DataResource background();
 
     @Resource("ValueSpinner.css")
-    TextResource css();
+    CssResource css();
   }
-
+  private static ValueSpinnerResources defaultResources;
+  
   private static final String STYLENAME_DEFAULT = "gwt-ValueSpinner";
 
   private Spinner spinner;
@@ -60,21 +61,20 @@
     }
   };
 
-  private KeyboardListener keyboardListener = new KeyboardListener() {
-    public void onKeyDown(Widget sender, char keyCode, int modifiers) {
-    }
-
-    public void onKeyPress(Widget sender, char keyCode, int modifiers) {
+  private KeyPressHandler keyPressHandler = new KeyPressHandler() {
+   
+    @Override
+    public void onKeyPress(KeyPressEvent event) {
       int index = valueBox.getCursorPos();
       String previousText = valueBox.getText();
       String newText;
       if (valueBox.getSelectionLength() > 0) {
         newText = previousText.substring(0, valueBox.getCursorPos())
-            + keyCode
+            + event.getCharCode()
             + previousText.substring(valueBox.getCursorPos()
                 + valueBox.getSelectionLength(), previousText.length());
       } else {
-        newText = previousText.substring(0, index) + keyCode
+        newText = previousText.substring(0, index) + event.getCharCode()
             + previousText.substring(index, previousText.length());
       }
       valueBox.cancelKey();
@@ -89,9 +89,6 @@
         // valueBox.cancelKey();
       }
     }
-
-    public void onKeyUp(Widget sender, char keyCode, int modifiers) {
-    }
   };
 
   /**
@@ -103,7 +100,7 @@
 
   /**
    * @param value initial value
-   * @param resources the styles and images used by this widget
+   * @param styles the styles and images used by this widget
    * @param images the images used by the spinner
    */
   public ValueSpinner(long value, ValueSpinnerResources styles,
@@ -175,10 +172,12 @@
       boolean constrained, ValueSpinnerResources resources,
       SpinnerResources images) {
     super();
-    if (resources == null) {
-      resources = (ValueSpinnerResources) 
GWT.create(ValueSpinnerResources.class);
-    }
-    StyleInjector.injectStylesheet(resources.css().getText(), resources);
+    if (resources != null) {
+      StyleInjector.injectStylesheet(resources.css().getText(), resources);
+    } else if (defaultResources == null) {
+      defaultResources = GWT.create(ValueSpinnerResources.class);
+      StyleInjector.injectStylesheet(defaultResources.css().getText());
+    }  
     setStylePrimaryName(STYLENAME_DEFAULT);
     if (images == null) {
       spinner = new Spinner(spinnerListener, value, min, max, minStep, maxStep,
@@ -188,7 +187,7 @@
           constrained, images);
     }
     valueBox.setStyleName("textBox");
-    valueBox.addKeyboardListener(keyboardListener);
+    valueBox.addKeyPressHandler(keyPressHandler);
     setVerticalAlignment(ALIGN_MIDDLE);
     add(valueBox);
     VerticalPanel arrowsPanel = new VerticalPanel();
@@ -221,8 +220,7 @@
   }
   
   /**
-   * Gets whether this widget is enabled.
-   * 
+   * @return whether this widget is enabled.
    */
   public boolean isEnabled() {
     return spinner.isEnabled();

Reply via email to