/**
* Sencha GXT 3.0.0b - Sencha for GWT
* Copyright(c) 2007-2012, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.sencha.gxt.explorer.client.forms;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeUri;
import com.google.gwt.safehtml.shared.UriUtils;
import com.google.gwt.text.shared.AbstractSafeHtmlRenderer;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction;
import com.sencha.gxt.core.client.XTemplates;
import com.sencha.gxt.data.shared.LabelProvider;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.data.shared.ModelKeyProvider;
import com.sencha.gxt.data.shared.PropertyAccess;
import com.sencha.gxt.examples.resources.client.TestData;
import com.sencha.gxt.examples.resources.client.model.Country;
import com.sencha.gxt.examples.resources.client.model.State;
import com.sencha.gxt.explorer.client.model.Example.Detail;
import com.sencha.gxt.widget.core.client.form.ComboBox;
import com.sencha.gxt.widget.core.client.info.Info;
@Detail(name = "ComboBox", icon = "combobox", category = "Combos")
public class ComboBoxExample implements IsWidget, EntryPoint {
interface ComboBoxTemplates extends XTemplates {
@XTemplate("<img width=\"16\" height=\"11\" src=\"{imageUri}\"> {name}")
SafeHtml country(SafeUri imageUri, String name);
@XTemplate("<div qtip=\"{slogan}\" qtitle=\"State Slogan\">{name}</div>")
SafeHtml state(String slogan, String name);
}
interface CountryProperties extends PropertyAccess<Country> {
ModelKeyProvider<Country> abbr();
LabelProvider<Country> name();
}
interface StateProperties extends PropertyAccess<State> {
ModelKeyProvider<State> abbr();
LabelProvider<State> name();
}
private VerticalPanel vp;
public Widget asWidget() {
if (vp == null) {
vp = new VerticalPanel();
vp.setSpacing(10);
StateProperties props = GWT.create(StateProperties.class);
ListStore<State> states = new ListStore<State>(props.abbr());
states.addAll(TestData.getStates());
ComboBox<State> combo = new ComboBox<State>(states, props.name());
addHandlersForEventObservation(combo, props.name());
combo.setEmptyText("Select a state...");
combo.setWidth(150);
combo.setTypeAhead(true);
combo.setTriggerAction(TriggerAction.ALL);
vp.add(combo);
states = new ListStore<State>(props.abbr());
states.addAll(TestData.getStates());
combo = new ComboBox<State>(states, props.name(), new AbstractSafeHtmlRenderer<State>() {
public SafeHtml render(State item) {
final ComboBoxTemplates comboBoxTemplates = GWT.create(ComboBoxTemplates.class);
return comboBoxTemplates.state(item.getSlogan(), item.getName());
}
});
addHandlersForEventObservation(combo, props.name());
combo.setEmptyText("Select a state...");
combo.setWidth(150);
combo.setTypeAhead(true);
combo.setTriggerAction(TriggerAction.ALL);
vp.add(combo);
final CountryProperties countryProps = GWT.create(CountryProperties.class);
ListStore<Country> countries = new ListStore<Country>(countryProps.abbr());
countries.addAll(TestData.getCountries());
final String moduleBaseUrl = GWT.getHostPageBaseURL();
ComboBox<Country> combo2 = new ComboBox<Country>(countries, countryProps.name(),
new AbstractSafeHtmlRenderer<Country>() {
final ComboBoxTemplates comboBoxTemplates = GWT.create(ComboBoxTemplates.class);
public SafeHtml render(Country item) {
SafeUri imageUri = UriUtils.fromString(moduleBaseUrl + "examples/images/flags/" + item.getAbbr() + ".png");
return comboBoxTemplates.country(imageUri, item.getName());
}
});
addHandlersForEventObservation(combo2, countryProps.name());
combo2.setWidth(150);
combo2.setTypeAhead(true);
combo2.setTriggerAction(TriggerAction.ALL);
vp.add(combo2);
}
return vp;
}
/**
* Helper to add handlers to observe events that occur on each combobox
*/
private <T> void addHandlersForEventObservation(ComboBox<T> combo, final LabelProvider<T> labelProvider) {
combo.addValueChangeHandler(new ValueChangeHandler<T>() {
@Override
public void onValueChange(ValueChangeEvent<T> event) {
Info.display("Value Changed", "New value: "
+ (event.getValue() == null ? "nothing" : labelProvider.getLabel(event.getValue()) + "!"));
}
});
combo.addSelectionHandler(new SelectionHandler<T>() {
@Override
public void onSelection(SelectionEvent<T> event) {
Info.display("State Selected", "You selected "
+ (event.getSelectedItem() == null ? "nothing" : labelProvider.getLabel(event.getSelectedItem()) + "!"));
}
});
}
public void onModuleLoad() {
RootPanel.get().add(asWidget());
}
}