/** * 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.app.ui; import java.util.Comparator; import java.util.List; import com.google.gwt.core.client.GWT; import com.google.gwt.place.shared.Place; import com.google.gwt.place.shared.PlaceChangeEvent; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.sencha.gxt.core.client.Style.SelectionMode; import com.sencha.gxt.data.shared.ListStore; import com.sencha.gxt.data.shared.SortDir; import com.sencha.gxt.data.shared.Store; import com.sencha.gxt.data.shared.Store.StoreSortInfo; import com.sencha.gxt.data.shared.TreeStore; import com.sencha.gxt.examples.resources.client.images.ExampleImages; import com.sencha.gxt.explorer.client.ExplorerApp; import com.sencha.gxt.explorer.client.app.place.ExamplePlace; import com.sencha.gxt.explorer.client.model.Category; import com.sencha.gxt.explorer.client.model.Example; import com.sencha.gxt.explorer.client.model.ExampleModel; import com.sencha.gxt.explorer.client.model.NamedModel; import com.sencha.gxt.explorer.client.model.NamedModel.NamedModelProperties; import com.sencha.gxt.theme.blue.client.tabs.BlueTabPanelBottomAppearance; import com.sencha.gxt.widget.core.client.ListView; import com.sencha.gxt.widget.core.client.TabPanel; import com.sencha.gxt.widget.core.client.TabPanel.TabPanelAppearance; 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.form.StoreFilterField; import com.sencha.gxt.widget.core.client.selection.SelectionChangedEvent; import com.sencha.gxt.widget.core.client.selection.SelectionChangedEvent.SelectionChangedHandler; import com.sencha.gxt.widget.core.client.toolbar.ToolBar; import com.sencha.gxt.widget.core.client.tree.Tree; public class ExampleListViewImpl implements ExampleListView { @Inject private ExampleModel model; private Presenter presenter; private TreeStore<NamedModel> treeStore; private ListStore<NamedModel> listStore; private VerticalLayoutContainer con; private TabPanel tabPanel; private Tree<NamedModel, String> tree; private ListView<NamedModel, String> list; @Inject public ExampleListViewImpl(ExampleModel model) { tabPanel = new TabPanel(GWT.<TabPanelAppearance> create(BlueTabPanelBottomAppearance.class)); tabPanel.setBodyBorder(false); NamedModelProperties props = GWT.create(NamedModelProperties.class); treeStore = new TreeStore<NamedModel>(props.kp()); listStore = new ListStore<NamedModel>(props.kp()); listStore.addSortInfo(new StoreSortInfo<NamedModel>(new Comparator<NamedModel>() { @Override public int compare(NamedModel o1, NamedModel o2) { return o1.getName().compareTo(o2.getName()); } }, SortDir.ASC)); List<Category> cats = model.getCategories(); for (int i = 0; i < cats.size(); i++) { Category c = cats.get(i); if (!ExplorerApp.OVERVIEW.equalsIgnoreCase(c.getName())) { treeStore.add(c); } List<Example> examples = c.getExamples(); for (int j = 0; j < examples.size(); j++) { if (!ExplorerApp.OVERVIEW.equalsIgnoreCase(examples.get(j).getName())) { treeStore.add(c, examples.get(j)); listStore.add(examples.get(j)); } } } tree = new Tree<NamedModel, String>(treeStore, props.name()); tree.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); tree.getStyle().setLeafIcon(ExampleImages.INSTANCE.list()); tabPanel.add(tree, "Tree"); list = new ListView<NamedModel, String>(listStore, props.name()); list.setBorders(false); tabPanel.add(list, "List"); SelectionChangedHandler<NamedModel> selectHandler = new SelectionChangedHandler<NamedModel>() { @Override public void onSelectionChanged(SelectionChangedEvent<NamedModel> event) { List<NamedModel> sels = event.getSelection(); if (sels.size() > 0) { NamedModel m = sels.get(0); if (m instanceof Example) { Example ex = (Example) m; presenter.selectExample(ex); } } } }; tree.getSelectionModel().addSelectionChangedHandler(selectHandler); list.getSelectionModel().addSelectionChangedHandler(selectHandler); ToolBar bar = new ToolBar(); StoreFilterField<NamedModel> filter = new StoreFilterField<NamedModel>() { @Override protected boolean doSelect(Store<NamedModel> store, NamedModel parent, NamedModel item, String filter) { if (item instanceof Category) { return false; } String name = item.getName(); name = name.toLowerCase(); if (name.indexOf(filter.toLowerCase()) != -1) { return true; } return false; } }; bar.add(filter); filter.bind(listStore); filter.bind(treeStore); filter.setEmptyText("Filter..."); con = new VerticalLayoutContainer(); con.add(bar, new VerticalLayoutData(1, -1)); con.add(tabPanel, new VerticalLayoutData(1, 1)); } @Override public Widget asWidget() { return con; } @Override public void onPlaceChange(PlaceChangeEvent event) { Place place = event.getNewPlace(); if (place instanceof ExamplePlace) { ExamplePlace ep = (ExamplePlace) place; showExample(model.findExample(ep.getExampleId())); } } @Override public void setPresenter(Presenter presenter) { this.presenter = presenter; } public void showExample(Example e) { if (e != null && !ExplorerApp.OVERVIEW.equals(e.getName())) { NamedModel example = treeStore.findModelWithKey(e.getName()); tree.setExpanded(example, true, false); tree.scrollIntoView(e); tree.getSelectionModel().select(e, false); list.getSelectionModel().select(e, false); } else { tree.getSelectionModel().deselectAll(); list.getSelectionModel().deselectAll(); } } }