/**
* 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 java.util.ArrayList;
import java.util.List;
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.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.Style.SelectionMode;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.data.client.editor.ListStoreEditor;
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.binding.GridBindingExample.StockExchange;
import com.sencha.gxt.explorer.client.model.Example.Detail;
import com.sencha.gxt.widget.core.client.FramedPanel;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
import com.sencha.gxt.widget.core.client.grid.ColumnModel;
import com.sencha.gxt.widget.core.client.grid.Grid;
import com.sencha.gxt.widget.core.client.selection.SelectionChangedEvent;
import com.sencha.gxt.widget.core.client.selection.SelectionChangedEvent.SelectionChangedHandler;
/**
* Demonstrates using the ListStoreEditor, and some concept of building multiple
* editors. Note that as currently written, when a Stock object is saved, it
* will modify the StockExchange's instances, instead of cloning models before
* editing them.
*/
@Detail(name = "Grid Binding", icon = "listviewbinding", category = "Binding", classes = {
Stock.class, StockProperties.class, StockEditor.class})
public class GridBindingExample implements EntryPoint, IsWidget, Editor<StockExchange> {
public static class StockExchange {
private List<Stock> stocks = TestData.getStocks();
public List<Stock> getStocks() {
return stocks;
}
public void setStocks(List<Stock> stocks) {
this.stocks = stocks;
}
}
interface ListDriver extends SimpleBeanEditorDriver<StockExchange, GridBindingExample> {
}
interface StockDriver extends SimpleBeanEditorDriver<Stock, StockEditor> {
}
private ListDriver driver = GWT.create(ListDriver.class);
private StockDriver itemDriver = GWT.create(StockDriver.class);
private FramedPanel panel;
Grid<Stock> stockList;
ListStoreEditor<Stock> stocks;
@Ignore
StockEditor stockEditor;
@Override
public Widget asWidget() {
if (panel == null) {
panel = new FramedPanel();
panel.setHeadingText("Grid Binding");
panel.setPixelSize(300, 300);
panel.setBodyBorder(false);
panel.addStyleName("margin-10");
VerticalLayoutContainer c = new VerticalLayoutContainer();
final StockProperties props = GWT.create(StockProperties.class);
List<ColumnConfig<Stock, ?>> columns = new ArrayList<ColumnConfig<Stock, ?>>();
columns.add(new ColumnConfig<Stock, String>(props.name(), 200, "Name"));
columns.add(new ColumnConfig<Stock, String>(props.symbol(), 70, "Symbol"));
stockList = new Grid<Stock>(new ListStore<Stock>(props.key()), new ColumnModel<Stock>(columns));
stockList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
stockList.setBorders(true);
stocks = new ListStoreEditor<Stock>(stockList.getStore());
c.add(stockList, new VerticalLayoutData(1, 1));
stockList.getSelectionModel().addSelectionChangedHandler(new SelectionChangedHandler<Stock>() {
@Override
public void onSelectionChanged(SelectionChangedEvent<Stock> event) {
if (event.getSelection().size() > 0) {
edit(event.getSelection().get(0));
} else {
stockEditor.setSaveEnabled(false);
}
}
});
stockEditor = new StockEditor();
stockEditor.getSaveButton().addSelectHandler(new SelectHandler() {
@Override
public void onSelect(SelectEvent event) {
saveCurrentStock();
}
});
c.add(stockEditor, new VerticalLayoutData(1, -1, new Margins(5)));
panel.add(c);
itemDriver.initialize(stockEditor);
driver.initialize(this);
}
driver.edit(new StockExchange());
return panel;
}
@Override
public void onModuleLoad() {
RootPanel.get().add(this);
}
protected void edit(Stock stock) {
itemDriver.edit(stock);
stockEditor.setSaveEnabled(true);
}
protected void saveCurrentStock() {
Stock edited = itemDriver.flush();
if (!itemDriver.hasErrors()) {
stockEditor.setSaveEnabled(false);
stockList.getStore().update(edited);
}
}
}