package de.swm.mobile.kitchensink.client.showcase.panels;
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import de.swm.commons.mobile.client.widgets.HeaderPanel;
import de.swm.commons.mobile.client.widgets.VerticalPanel;
import de.swm.commons.mobile.client.widgets.tree.*;
import de.swm.commons.mobile.client.widgets.tree.ITreeNode.ITreeNodeDisplay;
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 java.util.ArrayList;
import java.util.List;
import static de.swm.mobile.kitchensink.client.ShowcaseAnnotations.ShowcaseSource;
import static de.swm.mobile.kitchensink.client.ShowcaseAnnotations.ShowcaseUiXML;
@ShowcaseSource
@ShowcaseUiXML({"TreePanelPage.ui.xml"})
public class TreePanelPage extends ShowcaseDetailPage {
private static TreePanelPageUiBinder uiBinder = GWT.create(TreePanelPageUiBinder.class);
interface TreePanelPageUiBinder extends UiBinder<Widget, TreePanelPage> {
}
@UiField
HTMLPanel content;
@UiField
HeaderPanel header;
@UiField
TreePanel treePanel;
private IconResources res;
public TreePanelPage() {
super(TreePanelPage.class);
res = GWT.create(IconResources.class);
initWidget(uiBinder.createAndBindUi(this));
Application.addDefaultBackButtonHanlder(header);
treePanel.setTree(createTree());
}
@Override
public HeaderPanel getHeaderPanel() {
return header;
}
@Override
public String getName() {
return "Tree panel";
}
private class CustomNodeDisplay extends VerticalPanel implements ITreeNodeDisplay {
Label header = new Label("-");
public CustomNodeDisplay() {
add(new HTML("<i>Custom Display</i>"));
add(header);
}
@Override
public void setNode(ITreeNode node) {
header.setText(node.getHeader());
}
}
private ITree createTree() {
ITreeNode root = new DefaultTreeNodeImpl("Root", null);
ITree result = new DefaultTreeImpl(root, null);
ITreeNodeDisplay nodeDisplay = new CustomNodeDisplay();
List<ITree> childTrees = new ArrayList<ITree>();
for (int i = 0; i < 20; i++) {
DefaultTreeImpl childTree = new DefaultTreeImpl(new DefaultTreeNodeImpl("Subtree_" + i, null, res.folder()), 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()), childTree);
childChildTrees.add(childChildTree);
List<ITree> leaves = new ArrayList<ITree>();
for (int k = 0; k < 20; k++) {
DefaultTreeNodeImpl node = new DefaultTreeNodeImpl("Child_" + i + "_" + j + "_" + k, null, res.leaf());
node.setDisplay(nodeDisplay);
DefaultTreeImpl leafTree = new DefaultTreeImpl(node, childChildTree);
leaves.add(leafTree);
}
childChildTree.appendChildren(leaves);
}
childTree.appendChildren(childChildTrees);
}
result.appendChildren(childTrees);
return result;
}
}