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