/*
* Copyright (c) 2010, grossmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the jo-widgets.org nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL jo-widgets.org BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
package org.jowidgets.examples.common.demo;
import org.jowidgets.api.controller.ITreePopupDetectionListener;
import org.jowidgets.api.controller.ITreePopupEvent;
import org.jowidgets.api.controller.ITreeSelectionEvent;
import org.jowidgets.api.controller.ITreeSelectionListener;
import org.jowidgets.api.toolkit.Toolkit;
import org.jowidgets.api.widgets.IContainer;
import org.jowidgets.api.widgets.IMenu;
import org.jowidgets.api.widgets.IPopupMenu;
import org.jowidgets.api.widgets.ITree;
import org.jowidgets.api.widgets.ITreeNode;
import org.jowidgets.api.widgets.blueprint.ITreeNodeBluePrint;
import org.jowidgets.api.widgets.blueprint.factory.IBluePrintFactory;
import org.jowidgets.common.types.Position;
import org.jowidgets.common.widgets.controller.IPopupDetectionListener;
import org.jowidgets.common.widgets.layout.ILayoutDescriptor;
import org.jowidgets.common.widgets.layout.MigLayoutDescriptor;
import org.jowidgets.tools.controller.TreeAdapter;
import org.jowidgets.tools.controller.TreeNodeAdapter;
public final class DemoTreeComposite {
public DemoTreeComposite(final IContainer parentContainer) {
final IBluePrintFactory bpF = Toolkit.getBluePrintFactory();
final ILayoutDescriptor fillLayoutDescriptor = new MigLayoutDescriptor("0[grow, 0::]0", "0[grow, 0::]0");
parentContainer.setLayout(fillLayoutDescriptor);
final ITree tree = parentContainer.add(bpF.tree().multiSelection().setChecked(true), "growx, growy, w 0::, h 0::");
final IPopupMenu popupMenu = tree.createPopupMenu();
fillMenu("", popupMenu);
tree.addTreeSelectionListener(new ITreeSelectionListener() {
@Override
public void selectionChanged(final ITreeSelectionEvent event) {
// CHECKSTYLE:OFF
System.out.println(event);
// CHECKSTYLE:ON
}
});
tree.addTreeListener(new TreeAdapter() {
@Override
public void nodeExpanded(final ITreeNode node) {
// CHECKSTYLE:OFF
System.out.println("Tree node expanded: " + node);
// CHECKSTYLE:ON
}
@Override
public void nodeCollapsed(final ITreeNode node) {
// CHECKSTYLE:OFF
System.out.println("Tree node collpased: " + node);
// CHECKSTYLE:ON
}
});
tree.addPopupDetectionListener(new IPopupDetectionListener() {
@Override
public void popupDetected(final Position position) {
popupMenu.show(position);
}
});
tree.addTreePopupDetectionListener(new ITreePopupDetectionListener() {
@Override
public void popupDetected(final ITreePopupEvent event) {
// CHECKSTYLE:OFF
System.out.println(event);
// CHECKSTYLE:ON
}
});
for (int i = 0; i < 5; i++) {
ITreeNodeBluePrint treeNodeBp = bpF.treeNode();
treeNodeBp.setText("Node " + i).setToolTipText("tooltip of node " + i);
final ITreeNode node = tree.addNode(treeNodeBp);
registerListners(node);
for (int j = 0; j < 10; j++) {
treeNodeBp = bpF.treeNode();
treeNodeBp.setText("SubNode " + j).setToolTipText("tooltip of subNode " + j);
final ITreeNode subNode = node.addNode(treeNodeBp);
registerListners(subNode);
for (int k = 0; k < 10; k++) {
treeNodeBp = bpF.treeNode();
treeNodeBp.setText("SubSubNode " + k).setToolTipText("tooltip of subSubNode " + k);
final ITreeNode subSubNode = subNode.addNode(treeNodeBp);
registerListners(subSubNode);
}
}
}
}
private void registerListners(final ITreeNode node) {
node.addTreeNodeListener(new TreeNodeAdapter() {
@Override
public void selectionChanged(final boolean selected) {
// CHECKSTYLE:OFF
System.out.println(node.getText() + " selected = " + selected);
// CHECKSTYLE:ON
}
@Override
public void expandedChanged(final boolean expanded) {
// CHECKSTYLE:OFF
System.out.println(node.getText() + " expanded = " + expanded);
// CHECKSTYLE:ON
}
@Override
public void checkedChanged(final boolean checked) {
// CHECKSTYLE:OFF
System.out.println(node.getText() + " checked = " + checked);
// CHECKSTYLE:ON
}
});
final IPopupMenu popupMenu = node.createPopupMenu();
fillMenu(node.getText() + " -> ", popupMenu);
node.addPopupDetectionListener(new IPopupDetectionListener() {
@Override
public void popupDetected(final Position position) {
popupMenu.show(position);
}
});
}
private void fillMenu(final String prefix, final IMenu menu) {
final IBluePrintFactory bpF = Toolkit.getBluePrintFactory();
menu.addItem(bpF.menuItem(prefix + "menu item 1"));
menu.addItem(bpF.menuItem(prefix + "menu item 2"));
menu.addItem(bpF.menuItem(prefix + "menu item 3"));
menu.addItem(bpF.menuItem(prefix + "menu item 4"));
}
public void foo() {
}
}