package fr.lteconsulting.hexa.client.ui.widget; import java.util.ArrayList; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.TextBox; import fr.lteconsulting.hexa.client.common.HexaTime; import fr.lteconsulting.hexa.client.interfaces.IValueChangeHandler; import fr.lteconsulting.hexa.client.tools.HTMLStream; public class TimeSelector extends Composite implements ChangeHandler { TextBox hour = new TextBox(); TextBox minute = new TextBox(); boolean fCallbackSet = false; ArrayList<IValueChangeHandler<HexaTime>> handlers = new ArrayList<IValueChangeHandler<HexaTime>>(); public TimeSelector() { hour.setVisibleLength( 2 ); minute.setVisibleLength( 2 ); // for text init clear(); HTMLStream stream = new HTMLStream(); stream.addInline( hour ).text( " : " ).addInline( minute ); initWidget( stream ); } public void clear() { hour.setText( "00" ); minute.setText( "00" ); } public HexaTime getTime() { try { return new HexaTime( Integer.parseInt( hour.getText() ), Integer.parseInt( minute.getText() ), 0 ); } catch( Exception e ) { return new HexaTime(); } } public void setTime( HexaTime hexaTime ) { if( hexaTime == null ) { clear(); return; } hour.setText( String.valueOf( hexaTime.getHours() ) ); minute.setText( String.valueOf( hexaTime.getMinutes() ) ); } public void setTime( HexaTime time, boolean fFireEvent ) { setTime( time ); if( fFireEvent ) fire( time ); } public void addValueChangeHandler( IValueChangeHandler<HexaTime> handler ) { if( !fCallbackSet ) { hour.addChangeHandler( this ); minute.addChangeHandler( this ); fCallbackSet = true; } handlers.add( handler ); } private void fire( HexaTime time ) { for( IValueChangeHandler<HexaTime> handler : handlers ) handler.onValueChange( time ); } @Override public void onChange( ChangeEvent event ) { HexaTime time = getTime(); fire( time ); } public void setEnabled( boolean enabled ) { hour.setEnabled( enabled ); minute.setEnabled( enabled ); } }