]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/DynamicTree.java
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@709 6f19259b...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / DynamicTree.java
CommitLineData
a13899c5 1/** @file\r
2 \r
3 The file is used to create tree view sections\r
4 \r
5 Copyright (c) 2006, Intel Corporation\r
6 All rights reserved. This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10 \r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13 \r
14 **/\r
15package org.tianocore.frameworkwizard.platform.ui;\r
16import java.awt.GridLayout;\r
17import java.awt.Toolkit;\r
18\r
19import javax.swing.ImageIcon;\r
20import javax.swing.JPanel;\r
21import javax.swing.JScrollPane;\r
22import javax.swing.JTree;\r
23import javax.swing.tree.DefaultMutableTreeNode;\r
24import javax.swing.tree.DefaultTreeCellRenderer;\r
25import javax.swing.tree.DefaultTreeModel;\r
26import javax.swing.tree.MutableTreeNode;\r
27import javax.swing.tree.TreePath;\r
28import javax.swing.tree.TreeSelectionModel;\r
29import javax.swing.event.TreeModelEvent;\r
30import javax.swing.event.TreeModelListener;\r
31\r
32\r
33public class DynamicTree extends JPanel {\r
34 protected DefaultMutableTreeNode rootNode;\r
35 protected DefaultTreeModel treeModel;\r
36 protected JTree tree;\r
37 private Toolkit toolkit = Toolkit.getDefaultToolkit();\r
38\r
39 public DynamicTree() {\r
40 super(new GridLayout(1,0));\r
41 \r
42 rootNode = new DefaultMutableTreeNode("Sections");\r
43 treeModel = new DefaultTreeModel(rootNode);\r
44 treeModel.addTreeModelListener(new MyTreeModelListener());\r
45\r
46 tree = new JTree(treeModel);\r
47 DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree.getCellRenderer();\r
48 renderer.setOpenIcon(new ImageIcon("junk.gif"));\r
49 renderer.setClosedIcon(new ImageIcon("junk.gif"));\r
50 renderer.setLeafIcon(new ImageIcon("junk.gif"));\r
51 tree.setEditable(true);\r
52 tree.getSelectionModel().setSelectionMode\r
53 (TreeSelectionModel.SINGLE_TREE_SELECTION);\r
54 tree.setShowsRootHandles(true);\r
55\r
56 JScrollPane scrollPane = new JScrollPane(tree);\r
57 add(scrollPane);\r
58 }\r
59\r
60 /** Remove all nodes except the root node. */\r
61 public void clear() {\r
62 rootNode.removeAllChildren();\r
63 treeModel.reload();\r
64 }\r
65\r
66 public String getCurrentNodeText() {\r
67 DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();\r
68 if (currentNode != null){\r
69 return (String)currentNode.getUserObject();\r
70 }\r
71 return null;\r
72 }\r
73 /** Remove the currently selected node. */\r
74 public void removeCurrentNode() {\r
75 TreePath currentSelection = tree.getSelectionPath();\r
76 if (currentSelection != null) {\r
77 DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode)\r
78 (currentSelection.getLastPathComponent());\r
79 MutableTreeNode parent = (MutableTreeNode)(currentNode.getParent());\r
80 if (parent != null) {\r
81 treeModel.removeNodeFromParent(currentNode);\r
82 return;\r
83 }\r
84 } \r
85\r
86 // Either there was no selection, or the root was selected.\r
87 toolkit.beep();\r
88 }\r
89\r
90 /** Add child to the currently selected node. */\r
91 public DefaultMutableTreeNode addObject(Object child) {\r
92 DefaultMutableTreeNode parentNode = null;\r
93 TreePath parentPath = tree.getSelectionPath();\r
94\r
95 if (parentPath == null) {\r
96 parentNode = rootNode;\r
97 } else {\r
98 parentNode = (DefaultMutableTreeNode)\r
99 (parentPath.getLastPathComponent());\r
100 }\r
101\r
102 return addObject(parentNode, child, true);\r
103 }\r
104\r
105 public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,\r
106 Object child) {\r
107 return addObject(parent, child, false);\r
108 }\r
109\r
110 public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,\r
111 Object child, \r
112 boolean shouldBeVisible) {\r
113 DefaultMutableTreeNode childNode = \r
114 new DefaultMutableTreeNode(child);\r
115\r
116 if (parent == null) {\r
117 parent = rootNode;\r
118 }\r
119\r
120 treeModel.insertNodeInto(childNode, parent, \r
121 parent.getChildCount());\r
122\r
123 //Make sure the user can see the lovely new node.\r
124 if (shouldBeVisible) {\r
125 tree.scrollPathToVisible(new TreePath(childNode.getPath()));\r
126 }\r
127 return childNode;\r
128 }\r
129\r
130 class MyTreeModelListener implements TreeModelListener {\r
131 public void treeNodesChanged(TreeModelEvent e) {\r
132 DefaultMutableTreeNode node;\r
133 node = (DefaultMutableTreeNode)\r
134 (e.getTreePath().getLastPathComponent());\r
135\r
136 /*\r
137 * If the event lists children, then the changed\r
138 * node is the child of the node we've already\r
139 * gotten. Otherwise, the changed node and the\r
140 * specified node are the same.\r
141 */\r
142 try {\r
143 int index = e.getChildIndices()[0];\r
144 node = (DefaultMutableTreeNode)\r
145 (node.getChildAt(index));\r
146 } catch (NullPointerException exc) {}\r
147\r
148 System.out.println("The user has finished editing the node.");\r
149 System.out.println("New value: " + node.getUserObject());\r
150 }\r
151 public void treeNodesInserted(TreeModelEvent e) {\r
152 }\r
153 public void treeNodesRemoved(TreeModelEvent e) {\r
154 }\r
155 public void treeStructureChanged(TreeModelEvent e) {\r
156 }\r
157 }\r
158}\r
159\r
160\r