package fr.lteconsulting.hexa.client.ui.widget;
import java.util.ArrayList;
import com.google.gwt.user.client.ui.Composite;
import fr.lteconsulting.hexa.client.common.HexaDate;
import fr.lteconsulting.hexa.client.common.HexaDateTime;
import fr.lteconsulting.hexa.client.common.HexaTime;
import fr.lteconsulting.hexa.client.interfaces.IValueChangeHandler;
import fr.lteconsulting.hexa.client.tools.HTMLStream;
public class DateTimeSelector extends Composite
{
DateSelector date = new DateSelector();
TimeSelector time = new TimeSelector();
boolean fCallbackSet = false;
ArrayList<IValueChangeHandler<HexaDateTime>> handlers = new ArrayList<IValueChangeHandler<HexaDateTime>>();
public DateTimeSelector()
{
HTMLStream stream = new HTMLStream();
stream.addInline( date ).text( " at " ).addInline( time );
initWidget( stream );
}
public void clear()
{
date.clear();
time.clear();
}
public HexaDateTime getDateTime()
{
return new HexaDateTime( date.getDate(), time.getTime() );
}
public void setDateTime( HexaDateTime hexaDateTime )
{
if( hexaDateTime == null )
{
clear();
return;
}
date.setDate( hexaDateTime.getHexaDate() );
time.setTime( hexaDateTime.getHexaTime() );
}
public void setDateTime( HexaDateTime dateTime, boolean fFireEvent )
{
setDateTime( dateTime );
if( fFireEvent )
fire( dateTime );
}
public void addValueChangeHandler( IValueChangeHandler<HexaDateTime> handler )
{
if( !fCallbackSet )
{
date.addValueChangeHandler( new IValueChangeHandler<HexaDate>()
{
@Override
public void onValueChange( HexaDate value )
{
changed();
}
} );
time.addValueChangeHandler( new IValueChangeHandler<HexaTime>()
{
@Override
public void onValueChange( HexaTime value )
{
changed();
}
} );
fCallbackSet = true;
}
handlers.add( handler );
}
private void fire( HexaDateTime dateTime )
{
for( IValueChangeHandler<HexaDateTime> handler : handlers )
handler.onValueChange( dateTime );
}
void changed()
{
HexaDateTime time = getDateTime();
fire( time );
}
public void setEnabled( boolean enabled )
{
date.setEnabled( enabled );
time.setEnabled( enabled );
}
}