From 5e4034b5cba89460a62fa958fc78c2b85acb3d5f Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 7 Oct 2014 09:18:33 +0200 Subject: Repackage to org.cristalise --- src/main/java/org/cristalise/gui/TreeBrowser.java | 231 ++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 src/main/java/org/cristalise/gui/TreeBrowser.java (limited to 'src/main/java/org/cristalise/gui/TreeBrowser.java') diff --git a/src/main/java/org/cristalise/gui/TreeBrowser.java b/src/main/java/org/cristalise/gui/TreeBrowser.java new file mode 100644 index 0000000..0d40b43 --- /dev/null +++ b/src/main/java/org/cristalise/gui/TreeBrowser.java @@ -0,0 +1,231 @@ +package org.cristalise.gui; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Point; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +import javax.swing.DropMode; +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 org.cristalise.gui.tree.Node; +import org.cristalise.gui.tree.NodeItem; +import org.cristalise.gui.tree.NodeTransferHandler; +import org.cristalise.kernel.lookup.DomainPath; +import org.cristalise.kernel.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 ItemTabManager desktop; + protected JTree tree; + private Node userRoot; + + public TreeBrowser(ItemTabManager 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()); + tree.setDragEnabled(true); + tree.setDropMode(DropMode.ON); + tree.setTransferHandler(new NodeTransferHandler(this)); + 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) { + String[] components = target.getPath(); + Node currentNode = userRoot; + Object[] treePath = new Object[components.length+1]; + treePath[0] = currentNode.getTreeNode(); + for (int i=0; i