/**
* 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.binding;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.SimpleBeanEditorDriver;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
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.examples.resources.client.TestData;
import com.sencha.gxt.examples.resources.client.model.Stock;
import com.sencha.gxt.examples.resources.client.model.StockProperties;
import com.sencha.gxt.explorer.client.model.Example.Detail;
import com.sencha.gxt.widget.core.client.box.MessageBox;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.form.ComboBox;
import com.sencha.gxt.widget.core.client.form.DateField;
import com.sencha.gxt.widget.core.client.form.NumberField;
import com.sencha.gxt.widget.core.client.form.NumberPropertyEditor;
import com.sencha.gxt.widget.core.client.form.NumberPropertyEditor.DoublePropertyEditor;
import com.sencha.gxt.widget.core.client.form.TextField;
import com.sencha.gxt.widget.core.client.form.validator.MinNumberValidator;
import com.sencha.gxt.widget.core.client.form.validator.RegExValidator;
@Detail(name = "Basic Binding (UiBinder)", icon = "basicbinding", category = "Binding", files = {
"BasicBindingExample.html", "BasicBindingUiBinderExample.ui.xml"}, classes = {Stock.class, StockProperties.class})
public class BasicBindingUiBinderExample implements IsWidget, EntryPoint, Editor<Stock> {
interface MyUiBinder extends UiBinder<HorizontalPanel, BasicBindingUiBinderExample> {
}
interface StockDriver extends SimpleBeanEditorDriver<Stock, BasicBindingUiBinderExample> {
}
interface StockTemplate extends XTemplates {
@XTemplate(source = "BasicBindingExample.html")
SafeHtml drawStock(Stock stock);
}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private Stock stock = TestData.getStocks().get(0);
@UiField
@Ignore
ComboBox<Stock> scb;
// editor fields
@UiField
TextField name;
@UiField
TextField symbol;
@UiField
NumberField<Double> last;
@UiField
NumberField<Double> change;
@UiField
DateField lastTrans;
@UiField
@Ignore
HTML display;
@UiField(provided = true)
NumberPropertyEditor<Double> doublePropertyEditor = new DoublePropertyEditor();
@UiField(provided = true)
NumberFormat numberFormat = NumberFormat.getFormat("0.00");
@UiField(provided = true)
ListStore<Stock> stockStore;
@UiField(provided = true)
LabelProvider<Stock> stockLabelProvider = GWT.<StockProperties> create(StockProperties.class).nameLabel();
private StockDriver driver = GWT.create(StockDriver.class);
private HorizontalPanel hp;
public Widget asWidget() {
if (hp == null) {
StockProperties props = GWT.create(StockProperties.class);
stockStore = new ListStore<Stock>(props.key());
hp = uiBinder.createAndBindUi(this);
hp.setCellWidth(display, "200");
scb.addSelectionHandler(new SelectionHandler<Stock>() {
@Override
public void onSelection(SelectionEvent<Stock> event) {
symbol.clearInvalid();
change.clearInvalid();
last.clearInvalid();
lastTrans.clearInvalid();
stock = event.getSelectedItem();
driver.edit(stock);
getUpdatedPanel();
}
});
last.addValidator(new MinNumberValidator<Double>(0D));
symbol.addValidator(new RegExValidator("[^a-z]+"));
symbol.setAutoValidate(true);
stockStore.addAll(TestData.getStocks());
display.setHTML(getUpdatedPanel());
driver.initialize(this);
scb.setValue(stock);
driver.edit(stock);
}
return hp;
}
public void onModuleLoad() {
RootPanel.get().add(asWidget());
}
@UiHandler("reset")
public void resetClicked(SelectEvent event) {
driver.edit(stock);
}
@UiHandler("save")
public void saveClicked(SelectEvent event) {
stock = driver.flush();
if (driver.hasErrors()) {
new MessageBox("Please correct the errors before saving.").show();
return;
}
display.setHTML(getUpdatedPanel());
stockStore.update(stock);
}
private SafeHtml getUpdatedPanel() {
StockTemplate template = GWT.create(StockTemplate.class);
return template.drawStock(stock);
}
}