--- /dev/null
+/** @file\r
+ \r
+ The file is used to create tree view sections\r
+ \r
+ Copyright (c) 2006, Intel Corporation\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+ \r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ \r
+ **/\r
+package org.tianocore.frameworkwizard.platform.ui;\r
+import java.awt.GridLayout;\r
+import java.awt.Toolkit;\r
+\r
+import javax.swing.ImageIcon;\r
+import javax.swing.JPanel;\r
+import javax.swing.JScrollPane;\r
+import javax.swing.JTree;\r
+import javax.swing.tree.DefaultMutableTreeNode;\r
+import javax.swing.tree.DefaultTreeCellRenderer;\r
+import javax.swing.tree.DefaultTreeModel;\r
+import javax.swing.tree.MutableTreeNode;\r
+import javax.swing.tree.TreePath;\r
+import javax.swing.tree.TreeSelectionModel;\r
+import javax.swing.event.TreeModelEvent;\r
+import javax.swing.event.TreeModelListener;\r
+\r
+\r
+public class DynamicTree extends JPanel {\r
+ protected DefaultMutableTreeNode rootNode;\r
+ protected DefaultTreeModel treeModel;\r
+ protected JTree tree;\r
+ private Toolkit toolkit = Toolkit.getDefaultToolkit();\r
+\r
+ public DynamicTree() {\r
+ super(new GridLayout(1,0));\r
+ \r
+ rootNode = new DefaultMutableTreeNode("Sections");\r
+ treeModel = new DefaultTreeModel(rootNode);\r
+ treeModel.addTreeModelListener(new MyTreeModelListener());\r
+\r
+ tree = new JTree(treeModel);\r
+ DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree.getCellRenderer();\r
+ renderer.setOpenIcon(new ImageIcon("junk.gif"));\r
+ renderer.setClosedIcon(new ImageIcon("junk.gif"));\r
+ renderer.setLeafIcon(new ImageIcon("junk.gif"));\r
+ tree.setEditable(true);\r
+ tree.getSelectionModel().setSelectionMode\r
+ (TreeSelectionModel.SINGLE_TREE_SELECTION);\r
+ tree.setShowsRootHandles(true);\r
+\r
+ JScrollPane scrollPane = new JScrollPane(tree);\r
+ add(scrollPane);\r
+ }\r
+\r
+ /** Remove all nodes except the root node. */\r
+ public void clear() {\r
+ rootNode.removeAllChildren();\r
+ treeModel.reload();\r
+ }\r
+\r
+ public String getCurrentNodeText() {\r
+ DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();\r
+ if (currentNode != null){\r
+ return (String)currentNode.getUserObject();\r
+ }\r
+ return null;\r
+ }\r
+ /** Remove the currently selected node. */\r
+ public void removeCurrentNode() {\r
+ TreePath currentSelection = tree.getSelectionPath();\r
+ if (currentSelection != null) {\r
+ DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode)\r
+ (currentSelection.getLastPathComponent());\r
+ MutableTreeNode parent = (MutableTreeNode)(currentNode.getParent());\r
+ if (parent != null) {\r
+ treeModel.removeNodeFromParent(currentNode);\r
+ return;\r
+ }\r
+ } \r
+\r
+ // Either there was no selection, or the root was selected.\r
+ toolkit.beep();\r
+ }\r
+\r
+ /** Add child to the currently selected node. */\r
+ public DefaultMutableTreeNode addObject(Object child) {\r
+ DefaultMutableTreeNode parentNode = null;\r
+ TreePath parentPath = tree.getSelectionPath();\r
+\r
+ if (parentPath == null) {\r
+ parentNode = rootNode;\r
+ } else {\r
+ parentNode = (DefaultMutableTreeNode)\r
+ (parentPath.getLastPathComponent());\r
+ }\r
+\r
+ return addObject(parentNode, child, true);\r
+ }\r
+\r
+ public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,\r
+ Object child) {\r
+ return addObject(parent, child, false);\r
+ }\r
+\r
+ public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,\r
+ Object child, \r
+ boolean shouldBeVisible) {\r
+ DefaultMutableTreeNode childNode = \r
+ new DefaultMutableTreeNode(child);\r
+\r
+ if (parent == null) {\r
+ parent = rootNode;\r
+ }\r
+\r
+ treeModel.insertNodeInto(childNode, parent, \r
+ parent.getChildCount());\r
+\r
+ //Make sure the user can see the lovely new node.\r
+ if (shouldBeVisible) {\r
+ tree.scrollPathToVisible(new TreePath(childNode.getPath()));\r
+ }\r
+ return childNode;\r
+ }\r
+\r
+ class MyTreeModelListener implements TreeModelListener {\r
+ public void treeNodesChanged(TreeModelEvent e) {\r
+ DefaultMutableTreeNode node;\r
+ node = (DefaultMutableTreeNode)\r
+ (e.getTreePath().getLastPathComponent());\r
+\r
+ /*\r
+ * If the event lists children, then the changed\r
+ * node is the child of the node we've already\r
+ * gotten. Otherwise, the changed node and the\r
+ * specified node are the same.\r
+ */\r
+ try {\r
+ int index = e.getChildIndices()[0];\r
+ node = (DefaultMutableTreeNode)\r
+ (node.getChildAt(index));\r
+ } catch (NullPointerException exc) {}\r
+\r
+ System.out.println("The user has finished editing the node.");\r
+ System.out.println("New value: " + node.getUserObject());\r
+ }\r
+ public void treeNodesInserted(TreeModelEvent e) {\r
+ }\r
+ public void treeNodesRemoved(TreeModelEvent e) {\r
+ }\r
+ public void treeStructureChanged(TreeModelEvent e) {\r
+ }\r
+ }\r
+}\r
+\r
+\r