3 The file is used to create tree view sections
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
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.
15 package org
.tianocore
.frameworkwizard
.platform
.ui
;
16 import java
.awt
.GridLayout
;
17 import java
.awt
.Toolkit
;
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
;
33 public class DynamicTree
extends JPanel
{
34 protected DefaultMutableTreeNode rootNode
;
35 protected DefaultTreeModel treeModel
;
37 private Toolkit toolkit
= Toolkit
.getDefaultToolkit();
39 public DynamicTree() {
40 super(new GridLayout(1,0));
42 rootNode
= new DefaultMutableTreeNode("Sections");
43 treeModel
= new DefaultTreeModel(rootNode
);
44 treeModel
.addTreeModelListener(new MyTreeModelListener());
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);
56 JScrollPane scrollPane
= new JScrollPane(tree
);
60 /** Remove all nodes except the root node. */
62 rootNode
.removeAllChildren();
66 public String
getCurrentNodeText() {
67 DefaultMutableTreeNode currentNode
= (DefaultMutableTreeNode
)tree
.getLastSelectedPathComponent();
68 if (currentNode
!= null){
69 return (String
)currentNode
.getUserObject();
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());
81 treeModel
.removeNodeFromParent(currentNode
);
86 // Either there was no selection, or the root was selected.
90 /** Add child to the currently selected node. */
91 public DefaultMutableTreeNode
addObject(Object child
) {
92 DefaultMutableTreeNode parentNode
= null;
93 TreePath parentPath
= tree
.getSelectionPath();
95 if (parentPath
== null) {
96 parentNode
= rootNode
;
98 parentNode
= (DefaultMutableTreeNode
)
99 (parentPath
.getLastPathComponent());
102 return addObject(parentNode
, child
, true);
105 public DefaultMutableTreeNode
addObject(DefaultMutableTreeNode parent
,
107 return addObject(parent
, child
, false);
110 public DefaultMutableTreeNode
addObject(DefaultMutableTreeNode parent
,
112 boolean shouldBeVisible
) {
113 DefaultMutableTreeNode childNode
=
114 new DefaultMutableTreeNode(child
);
116 if (parent
== null) {
120 treeModel
.insertNodeInto(childNode
, parent
,
121 parent
.getChildCount());
123 //Make sure the user can see the lovely new node.
124 if (shouldBeVisible
) {
125 tree
.scrollPathToVisible(new TreePath(childNode
.getPath()));
130 class MyTreeModelListener
implements TreeModelListener
{
131 public void treeNodesChanged(TreeModelEvent e
) {
132 DefaultMutableTreeNode node
;
133 node
= (DefaultMutableTreeNode
)
134 (e
.getTreePath().getLastPathComponent());
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.
143 int index
= e
.getChildIndices()[0];
144 node
= (DefaultMutableTreeNode
)
145 (node
.getChildAt(index
));
146 } catch (NullPointerException exc
) {}
148 System
.out
.println("The user has finished editing the node.");
149 System
.out
.println("New value: " + node
.getUserObject());
151 public void treeNodesInserted(TreeModelEvent e
) {
153 public void treeNodesRemoved(TreeModelEvent e
) {
155 public void treeStructureChanged(TreeModelEvent e
) {