From b086f57f56bf0eb9dab9cf321a0f69aaaae84347 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Wed, 30 May 2012 08:37:45 +0200 Subject: Initial Maven Conversion --- src/main/java/com/c2kernel/gui/TreeBrowser.java | 213 ++++++++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 src/main/java/com/c2kernel/gui/TreeBrowser.java (limited to 'src/main/java/com/c2kernel/gui/TreeBrowser.java') diff --git a/src/main/java/com/c2kernel/gui/TreeBrowser.java b/src/main/java/com/c2kernel/gui/TreeBrowser.java new file mode 100644 index 0000000..72cf738 --- /dev/null +++ b/src/main/java/com/c2kernel/gui/TreeBrowser.java @@ -0,0 +1,213 @@ +package com.c2kernel.gui; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +import javax.swing.ImageIcon; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTree; +import javax.swing.ToolTipManager; +import javax.swing.event.TreeExpansionEvent; +import javax.swing.event.TreeExpansionListener; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeSelectionModel; + +import com.c2kernel.gui.data.Node; +import com.c2kernel.gui.data.NodeEntity; +import com.c2kernel.lookup.DomainPath; +import com.c2kernel.utils.Logger; + +/** + * Container for the tree browser + * @version $Revision: 1.31 $ $Date: 2006/01/17 07:49:44 $ + * @author $Author: abranson $ + */ + + // must put in top level list of loaded items, so we don't have duplicates +public class TreeBrowser extends JPanel implements DomainKeyConsumer +{ + private EntityTabManager desktop; + protected JTree tree; + private Node userRoot; + + public TreeBrowser(EntityTabManager target, Node userRoot) { + setLayout(new java.awt.BorderLayout()); + //record the desktop and node factory for our item frames + this.desktop = target; + this.userRoot = userRoot; + this.setPreferredSize(new Dimension(300, 500)); + tree = new JTree(new DefaultTreeModel(userRoot.getTreeNode())); + tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); + tree.setToggleClickCount(3); // need three clicks to expand a branch + tree.addTreeExpansionListener( + new TreeExpansionListener() { + @Override + public void treeCollapsed(TreeExpansionEvent e) { + //REVISIT: possible reaping here if things are getting heavy + } + @Override + public void treeExpanded(TreeExpansionEvent e) { + TreePath p = e.getPath(); + // find the clicked tree node + DefaultMutableTreeNode nodeClicked = (DefaultMutableTreeNode)p.getLastPathComponent(); + // run the tree builder if it is there. + DefaultMutableTreeNode loadNode = (DefaultMutableTreeNode)nodeClicked.getFirstChild(); + if (loadNode.getUserObject() instanceof DynamicTreeBuilder) { + DynamicTreeBuilder loading = (DynamicTreeBuilder)loadNode.getUserObject(); + if (loading.state == DynamicTreeBuilder.IDLE) { + loading.buildInfo(tree); + loading.start(); + } + } + } + } + ); + + //Enable tool tips. + ToolTipManager.sharedInstance().registerComponent(tree); + tree.setCellRenderer(new ItemRenderer()); + tree.addMouseListener(new TreeMouseListener()); + JScrollPane myScrollPane = new JScrollPane(tree); + this.add(myScrollPane); + DefaultMutableTreeNode loadNode = (DefaultMutableTreeNode)userRoot.getTreeNode().getFirstChild(); + DynamicTreeBuilder loading = (DynamicTreeBuilder)loadNode.getUserObject(); + loading.buildInfo(tree); + loading.start(); + } + + @Override + public void push(DomainPath target) { + Logger.debug("Opening tree node "+target); + String[] components = target.getPath(); + Node currentNode = userRoot; + Object[] treePath = new Object[components.length+1]; + treePath[0] = currentNode.getTreeNode(); + for (int i=0; i