/** * 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.tree; import com.google.gwt.cell.client.ValueUpdater; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.text.shared.SimpleSafeHtmlRenderer; 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.cell.core.client.SimpleSafeHtmlCell; import com.sencha.gxt.core.client.ValueProvider; import com.sencha.gxt.data.shared.ModelKeyProvider; import com.sencha.gxt.data.shared.TreeStore; import com.sencha.gxt.examples.resources.client.TestData; import com.sencha.gxt.examples.resources.client.images.ExampleImages; import com.sencha.gxt.examples.resources.client.model.BaseDto; import com.sencha.gxt.examples.resources.client.model.FolderDto; import com.sencha.gxt.explorer.client.model.Example.Detail; import com.sencha.gxt.widget.core.client.ContentPanel; import com.sencha.gxt.widget.core.client.button.TextButton; 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.info.Info; import com.sencha.gxt.widget.core.client.toolbar.ToolBar; import com.sencha.gxt.widget.core.client.tree.Tree; @Detail(name = "Cell Action Tree", category = "Tree", icon = "cellactiontree") public class ActionTreeExample implements IsWidget, EntryPoint { class KeyProvider implements ModelKeyProvider<BaseDto> { @Override public String getKey(BaseDto item) { return (item instanceof FolderDto ? "f-" : "m-") + item.getId().toString(); } } @Override public Widget asWidget() { ContentPanel panel = new ContentPanel(); panel.setHeadingText("Cell Action Tree"); panel.setPixelSize(315, 400); panel.addStyleName("margin-10"); VerticalLayoutContainer con = new VerticalLayoutContainer(); panel.add(con); TreeStore<BaseDto> store = new TreeStore<BaseDto>(new KeyProvider()); FolderDto root = TestData.getMusicRootFolder(); for (BaseDto base : root.getChildren()) { store.add(base); if (base instanceof FolderDto) { processFolder(store, (FolderDto) base); } } SimpleSafeHtmlCell<String> cell = new SimpleSafeHtmlCell<String>(SimpleSafeHtmlRenderer.getInstance(), "click") { @Override public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { super.onBrowserEvent(context, parent, value, event, valueUpdater); if ("click".equals(event.getType())) { Info.display("Click", "You clicked \"" + value + "\"!"); } } }; final Tree<BaseDto, String> tree = new Tree<BaseDto, String>(store, new ValueProvider<BaseDto, String>() { @Override public String getValue(BaseDto object) { return object.getName(); } @Override public void setValue(BaseDto object, String value) { } @Override public String getPath() { return "name"; } }); tree.setCell(cell); tree.setWidth(300); tree.getStyle().setLeafIcon(ExampleImages.INSTANCE.music()); ToolBar buttonBar = new ToolBar(); buttonBar.add(new TextButton("Expand All", new SelectHandler() { @Override public void onSelect(SelectEvent event) { tree.expandAll(); } })); buttonBar.add(new TextButton("Collapse All", new SelectHandler() { @Override public void onSelect(SelectEvent event) { tree.collapseAll(); } })); con.add(buttonBar, new VerticalLayoutData(1, -1)); con.add(tree, new VerticalLayoutData(1, 1)); return panel; } public void onModuleLoad() { RootPanel.get().add(asWidget()); } private void processFolder(TreeStore<BaseDto> store, FolderDto folder) { for (BaseDto child : folder.getChildren()) { store.add(folder, child); if (child instanceof FolderDto) { processFolder(store, (FolderDto) child); } } } }