package fr.lteconsulting.hexa.client.form.fieldtypes;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import fr.lteconsulting.hexa.client.common.HexaTime;
import fr.lteconsulting.hexa.client.form.marshalls.Marshalls;
import fr.lteconsulting.hexa.client.ui.widget.ListBoxEx;
public class TimeFieldType extends FieldTypeBase
{
private static NumberFormat format = NumberFormat.getFormat( "00" );
private static TimeFieldType INST = null;
public static TimeFieldType get()
{
if( INST == null )
INST = new TimeFieldType();
return INST;
}
@Override
public Widget getWidget()
{
return new NestedWidget();
}
@Override
protected void installRealHandler( Widget widget )
{
((NestedWidget) widget).installRealHandler();
}
@Override
public void setValue( Widget widget, JSONValue value )
{
((NestedWidget) widget).setTime( Marshalls.time.get( value ) );
}
@Override
public JSONValue getValue( Widget widget )
{
return Marshalls.time.get( ((NestedWidget) widget).getTime() );
}
class NestedWidget extends Composite
{
ListBoxEx hours = new ListBoxEx();
ListBoxEx minutes = new ListBoxEx();
public NestedWidget()
{
HorizontalPanel panel = new HorizontalPanel();
for( int i = 9; i <= 20; i++ )
hours.addItem( format.format( i ), i );
for( int i = 0; i < 60; i += 15 )
minutes.addItem( format.format( i ), i );
panel.add( hours );
panel.add( new Label( ":" ) );
panel.add( minutes );
initWidget( panel );
}
public void setTime( HexaTime time )
{
hours.setSelected( time.getHours() );
minutes.setSelected( time.getMinutes() - time.getMinutes() % 15 );
}
public HexaTime getTime()
{
return new HexaTime( hours.getSelected(), minutes.getSelected(), 0 );
}
void installRealHandler()
{
hours.setCallback( onChangeCb, null );
minutes.setCallback( onChangeCb, null );
}
ListBoxEx.Callback onChangeCb = new ListBoxEx.Callback()
{
public void onListBoxExChange( ListBoxEx listBoxEx, Object cookie )
{
signalChange( NestedWidget.this );
}
};
}
}