package fr.lteconsulting.hexa.client.ui.widget;
import java.util.HashMap;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.resources.client.ImageResource;
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.PopupPanel;
import com.google.gwt.user.client.ui.UIObject;
import fr.lteconsulting.hexa.client.ui.ListTable;
import fr.lteconsulting.hexa.client.ui.dialog.MyPopupPanel;
public class ListBoxDiscrete<T> extends Composite implements ClickHandler
{
ImageResource up;
ImageResource down;
Label label = new Label();
ImageButton img;
HashMap<T, String> texts = new HashMap<T, String>();
ListTable<T> listTable = new ListTable<T>();
MyPopupPanel popup = null;
boolean fEnabled = true;
public ListBoxDiscrete( ImageResource up, ImageResource down )
{
this.up = up;
this.down = down;
img = new ImageButton( down, "Select..." );
HorizontalPanel panel = new HorizontalPanel();
panel.add( label );
panel.add( img );
initWidget( panel );
setStylePrimaryName( "SelectButton" );
img.addClickHandler( this );
label.addClickHandler( this );
listTable.addChangeHandler( new ChangeHandler()
{
@Override
public void onChange( ChangeEvent event )
{
if( popup != null )
popup.hide();
label.setText( texts.get( listTable.getSelected() ) );
}
} );
}
public void setEnabled( boolean fEnabled )
{
this.fEnabled = fEnabled;
}
public void addItem( String text, T object )
{
texts.put( object, text );
listTable.addItem( text, object );
}
public void addChangeHandler( ChangeHandler handler )
{
listTable.addChangeHandler( handler );
}
public T getSelected()
{
return listTable.getSelected();
}
public void setSelected( T selected )
{
label.setText( texts.get( selected ) );
listTable.setSelected( selected );
}
@Override
public void onClick( ClickEvent event )
{
if( !fEnabled )
return;
if( popup == null )
{
popup = new MyPopupPanel( true );
popup.setWidget( listTable );
popup.addCloseHandler( new CloseHandler<PopupPanel>()
{
@Override
public void onClose( CloseEvent<PopupPanel> event )
{
img.setResource( down );
}
} );
}
img.setResource( up );
popup.showRelativeTo( (UIObject) event.getSource() );
}
}