package com.smartgwt.sample.showcase.client.combobox; import java.util.HashMap; import java.util.Map; import com.smartgwt.client.types.MultiComboBoxLayoutStyle; import com.smartgwt.client.types.TitleOrientation; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.CheckboxItem; import com.smartgwt.client.widgets.form.fields.MultiComboBoxItem; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import com.smartgwt.client.widgets.layout.VStack; import com.smartgwt.sample.showcase.client.PanelFactory; import com.smartgwt.sample.showcase.client.ShowcasePanel; import com.smartgwt.sample.showcase.client.data.ItemSupplyXmlDS; public class MultiComboBoxSample extends ShowcasePanel { private static final String DESCRIPTION = "A <code>MultiComboBoxItem</code> displays a selection of multiple values as " + "buttons along with a combo box that is used to select additional values. " + "Clicking on a button removes the value from the selection." + "<p>" + "Pressing the Enter/Return key within the combo box selects the first matching value " + "without leaving the field, allowing several values to be selected using only the " + "keyboard. Pressing the Tab key within the combo box selects the first matching value " + "and then leaves the field normally, taking focus to the next focusable item."; public static class Factory implements PanelFactory { private String id; public ShowcasePanel create() { MultiComboBoxSample panel = new MultiComboBoxSample(); id = panel.getID(); return panel; } public String getID() { return id; } public String getDescription() { return DESCRIPTION; } } private static final Map<String, MultiComboBoxLayoutStyle> LAYOUT_STYLES; static { final MultiComboBoxLayoutStyle[] values = MultiComboBoxLayoutStyle.values(); LAYOUT_STYLES = new HashMap<String, MultiComboBoxLayoutStyle>(values.length); for (MultiComboBoxLayoutStyle value : values) { LAYOUT_STYLES.put(value.getValue(), value); } } @Override public Canvas getViewPanel() { final MultiComboBoxLayoutStyle initialLayoutStyle = MultiComboBoxLayoutStyle.FLOW; final boolean initialAddUnknownValues = false; final MultiComboBoxItem suppliesItem = new MultiComboBoxItem("supplies", "Items"); suppliesItem.setOptionDataSource(ItemSupplyXmlDS.getInstance()); suppliesItem.setDisplayField("itemName"); suppliesItem.setValueField("SKU"); suppliesItem.setValue(new String[] { "58074604", "90600", "1089400", "6024900" }); suppliesItem.setAutoFetchData(true); suppliesItem.setLayoutStyle(initialLayoutStyle); final SelectItem layoutStyleSelector = new SelectItem(); layoutStyleSelector.setTitle("Change layout style"); layoutStyleSelector.setColSpan(2); layoutStyleSelector.setDefaultValue(initialLayoutStyle.getValue()); layoutStyleSelector.setValueMap(LAYOUT_STYLES.keySet().toArray(new String[LAYOUT_STYLES.size()])); layoutStyleSelector.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { final String value = (String)event.getValue(); suppliesItem.setLayoutStyle(LAYOUT_STYLES.get(value)); } }); final CheckboxItem auvCheckbox = new CheckboxItem(); auvCheckbox.setTitle("Allow New Values"); auvCheckbox.setValue(initialAddUnknownValues); auvCheckbox.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { suppliesItem.setAddUnknownValues((Boolean)event.getValue()); } }); final DynamicForm configureForm = new DynamicForm(); configureForm.setIsGroup(true); configureForm.setGroupTitle("Configure Multi ComboBox"); configureForm.setWidth100(); configureForm.setPadding(3); configureForm.setTitleOrientation(TitleOrientation.TOP); configureForm.setItems(layoutStyleSelector, auvCheckbox); final DynamicForm suppliesForm = new DynamicForm(); suppliesForm.setWidth100(); suppliesForm.setNumCols(1); suppliesForm.setTitleOrientation(TitleOrientation.TOP); suppliesForm.setItems(suppliesItem); final VStack layout = new VStack(10); layout.setWidth(500); layout.setMembers(configureForm, suppliesForm); return layout; } public String getIntro() { return DESCRIPTION; } }