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