package fr.lteconsulting.hexa.client.form.fieldtypes; import java.util.ArrayList; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.json.client.JSONValue; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.Widget; import fr.lteconsulting.hexa.client.common.Pair; import fr.lteconsulting.hexa.client.form.marshalls.Marshalls; public class ListStringFieldType extends FieldTypeBase { ArrayList<Pair<String, String>> items = new ArrayList<Pair<String, String>>(); public void addItem( String id, String text ) { items.add( new Pair<String, String>( id, text ) ); } public Widget getWidget() { ListBox lb = new ListBox(); for( Pair<String, String> e : items ) lb.addItem( e.last, e.first ); return lb; } public void setValue( Widget w, JSONValue value ) { String valueReal = Marshalls.string.get( value ); for( int i = 0; i < items.size(); i++ ) { if( items.get( i ).first.equals( valueReal ) ) { ((ListBox) w).setSelectedIndex( i ); return; } } ((ListBox) w).setSelectedIndex( 0 ); } public JSONValue getValue( Widget widget ) { String value = items.get( ((ListBox) widget).getSelectedIndex() ).first; return Marshalls.string.get( value ); } @Override protected void installRealHandler( Widget widget ) { ((ListBox) widget).addChangeHandler( new com.google.gwt.event.dom.client.ChangeHandler() { public void onChange( ChangeEvent event ) { signalChange( (ListBox) event.getSource() ); } } ); } }