package fr.lteconsulting.hexa.client.ui.widget; import com.google.gwt.dom.client.Style.Display; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.uibinder.client.UiConstructor; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import fr.lteconsulting.hexa.client.interfaces.AValueControl; import fr.lteconsulting.hexa.client.ui.editable.EditableLabel; import fr.lteconsulting.hexa.client.ui.editable.EditableWidget; import fr.lteconsulting.hexa.client.ui.resources.image.ImageResources; public class SpinControl extends AValueControl<Integer> implements ClickHandler { int value = 0; HTMLPanel w; Image up; Image down; //Label valueLabel; EditableLabel<Void> valueLabel; @UiConstructor public SpinControl( ImageResource upRsrc, ImageResource downRsrc ) { String imgsPlace = DOM.createUniqueId(); String labelPlace = DOM.createUniqueId(); up = new Image( upRsrc ); down = new Image( downRsrc ); valueLabel = new EditableLabel<Void>( ImageResources.INSTANCE.loading16x16(), new EditableLabel.Callback<Void>() { @Override public void onWantChange( String text, EditableWidget<Label, Void> widget, Void cookie ) { try { value = Integer.parseInt( text ); valueLabel.setText( String.valueOf( value ) ); signalCallbacks(); } catch( Exception e ) { } } }, null ); valueLabel.setText( String.valueOf( value ) ); up.getElement().getStyle().setDisplay( Display.BLOCK ); w = new HTMLPanel( "<table><tr>" + "<td id='" + imgsPlace + "'></td>" + "<td id='" + labelPlace + "'></td>" + "</tr></table>" ); w.add( up, imgsPlace ); w.add( down, imgsPlace ); w.add( valueLabel, labelPlace ); initWidget( w ); up.addClickHandler( this ); down.addClickHandler( this ); } @Override public void onClick( ClickEvent event ) { int inc = 0; if( event.getSource() == up ) inc = 1; else if( event.getSource() == down ) inc = -1; value += inc; valueLabel.setText( String.valueOf( value ) ); signalCallbacks(); } @Override public Integer getValue() { return value; } @Override public void setValue( Integer value ) { this.value = value; valueLabel.setText( String.valueOf( value ) ); } }