package de.swm.mobile.kitchensink.client.showcase.panels; import java.util.ArrayList; import java.util.List; import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Widget; import de.swm.commons.mobile.client.utils.Utils; import de.swm.commons.mobile.client.widgets.HeaderPanel; import de.swm.commons.mobile.client.widgets.tree.DefaultTreeImpl; import de.swm.commons.mobile.client.widgets.tree.DefaultTreeNodeImpl; import de.swm.commons.mobile.client.widgets.tree.ITree; import de.swm.commons.mobile.client.widgets.tree.ITreeNode; import de.swm.commons.mobile.client.widgets.tree.TreeChangedEvent; import de.swm.commons.mobile.client.widgets.tree.TreeChangedHandler; import de.swm.commons.mobile.client.widgets.tree.WideTreePanel; import de.swm.mobile.kitchensink.client.Application; import de.swm.mobile.kitchensink.client.base.ShowcaseDetailPage; import de.swm.mobile.kitchensink.client.theme.icon.IconResources; import static de.swm.mobile.kitchensink.client.ShowcaseAnnotations.ShowcaseSource; import static de.swm.mobile.kitchensink.client.ShowcaseAnnotations.ShowcaseUiXML; @ShowcaseSource @ShowcaseUiXML({"WideTreePanelPage.ui.xml"}) public class WideTreePanelPage extends ShowcaseDetailPage { private static WideTreePanelPageUiBinder uiBinder = GWT.create(WideTreePanelPageUiBinder.class); interface WideTreePanelPageUiBinder extends UiBinder<Widget, WideTreePanelPage> { } @UiField HTMLPanel content; @UiField HeaderPanel header; @UiField WideTreePanel treePanel; interface ItemStyle extends CssResource { String specialItem(); } @UiField ItemStyle style; private IconResources res; public WideTreePanelPage() { super(WideTreePanelPage.class); initWidget(uiBinder.createAndBindUi(this)); Application.addDefaultBackButtonHanlder(header); res = GWT.create(IconResources.class); treePanel.addTreeChangedHandler(new TreeChangedHandler() { @Override public void onTreeChanged(TreeChangedEvent e) { String selectedTree = "Unknown"; ITree tree = e.getNewRoot(); if (tree != null) { ITreeNode node = tree.getNode(); selectedTree = node.getHeader(); } switch (e.getType()) { case BACK_EVENT: Utils.console("back event received, selected tree is: " + selectedTree); break; case INIT_COMPLETE: Utils.console("tree initialized"); break; case CHILD_SELECTED: Utils.console("tree selected: " + selectedTree); break; default: break; } } }); treePanel.setTree(createTree()); } @Override public HeaderPanel getHeaderPanel() { return header; } @Override public String getName() { return "Wide tree panel"; } private ITree createTree() { ITreeNode root = new DefaultTreeNodeImpl("Root", null); ITree result = new DefaultTreeImpl(root, null); List<ITree> childTrees = new ArrayList<ITree>(); for (int i = 0; i < 20; i++) { DefaultTreeImpl childTree = new DefaultTreeImpl( new DefaultTreeNodeImpl("Subtree_" + i, null, res.folder(), res.folder_bookmark()), result); childTrees.add(childTree); List<ITree> childChildTrees = new ArrayList<ITree>(); for (int j = 0; j < 20; j++) { DefaultTreeImpl childChildTree = new DefaultTreeImpl(new DefaultTreeNodeImpl("Subsubtree_" + i + "_" + j, null, res.folder(), res.folder_bookmark()), childTree); childChildTrees.add(childChildTree); List<ITree> leaves = new ArrayList<ITree>(); for (int k = 0; k < 20; k++) { String styleName = null; if (k % 3 == 0) { styleName = style.specialItem(); } DefaultTreeImpl leafTree = new DefaultTreeImpl(new DefaultTreeNodeImpl("Child_" + i + "_" + j + "_" + k, styleName, res.leaf()), childChildTree); leaves.add(leafTree); } childChildTree.appendChildren(leaves); } childTree.appendChildren(childChildTrees); } result.appendChildren(childTrees); return result; } }