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
{
37 private static final long serialVersionUID
= 1L;
38 protected DefaultMutableTreeNode rootNode
;
39 protected DefaultTreeModel treeModel
;
41 private Toolkit toolkit
= Toolkit
.getDefaultToolkit();
43 public DynamicTree() {
44 super(new GridLayout(1,0));
46 rootNode
= new DefaultMutableTreeNode("Sections");
47 treeModel
= new DefaultTreeModel(rootNode
);
48 treeModel
.addTreeModelListener(new MyTreeModelListener());
50 tree
= new JTree(treeModel
);
51 DefaultTreeCellRenderer renderer
= (DefaultTreeCellRenderer
) tree
.getCellRenderer();
52 renderer
.setOpenIcon(new ImageIcon("junk.gif"));
53 renderer
.setClosedIcon(new ImageIcon("junk.gif"));
54 renderer
.setLeafIcon(new ImageIcon("junk.gif"));
55 tree
.setEditable(true);
56 tree
.getSelectionModel().setSelectionMode
57 (TreeSelectionModel
.SINGLE_TREE_SELECTION
);
58 tree
.setShowsRootHandles(true);
60 JScrollPane scrollPane
= new JScrollPane(tree
);
64 /** Remove all nodes except the root node. */
66 rootNode
.removeAllChildren();
70 public String
getCurrentNodeText() {
71 DefaultMutableTreeNode currentNode
= (DefaultMutableTreeNode
)tree
.getLastSelectedPathComponent();
72 if (currentNode
!= null){
73 return (String
)currentNode
.getUserObject();
77 /** Remove the currently selected node. */
78 public void removeCurrentNode() {
79 TreePath currentSelection
= tree
.getSelectionPath();
80 if (currentSelection
!= null) {
81 DefaultMutableTreeNode currentNode
= (DefaultMutableTreeNode
)
82 (currentSelection
.getLastPathComponent());
83 MutableTreeNode parent
= (MutableTreeNode
)(currentNode
.getParent());
85 treeModel
.removeNodeFromParent(currentNode
);
90 // Either there was no selection, or the root was selected.
94 /** Add child to the currently selected node. */
95 public DefaultMutableTreeNode
addObject(Object child
) {
96 DefaultMutableTreeNode parentNode
= null;
97 TreePath parentPath
= tree
.getSelectionPath();
99 if (parentPath
== null) {
100 parentNode
= rootNode
;
102 parentNode
= (DefaultMutableTreeNode
)
103 (parentPath
.getLastPathComponent());
106 return addObject(parentNode
, child
, true);
109 public DefaultMutableTreeNode
addObject(DefaultMutableTreeNode parent
,
111 return addObject(parent
, child
, false);
114 public DefaultMutableTreeNode
addObject(DefaultMutableTreeNode parent
,
116 boolean shouldBeVisible
) {
117 DefaultMutableTreeNode childNode
=
118 new DefaultMutableTreeNode(child
);
120 if (parent
== null) {
124 treeModel
.insertNodeInto(childNode
, parent
,
125 parent
.getChildCount());
127 //Make sure the user can see the lovely new node.
128 if (shouldBeVisible
) {
129 tree
.scrollPathToVisible(new TreePath(childNode
.getPath()));
134 class MyTreeModelListener
implements TreeModelListener
{
135 public void treeNodesChanged(TreeModelEvent e
) {
136 DefaultMutableTreeNode node
;
137 node
= (DefaultMutableTreeNode
)
138 (e
.getTreePath().getLastPathComponent());
141 * If the event lists children, then the changed
142 * node is the child of the node we've already
143 * gotten. Otherwise, the changed node and the
144 * specified node are the same.
147 int index
= e
.getChildIndices()[0];
148 node
= (DefaultMutableTreeNode
)
149 (node
.getChildAt(index
));
150 } catch (NullPointerException exc
) {}
152 System
.out
.println("The user has finished editing the node.");
153 System
.out
.println("New value: " + node
.getUserObject());
155 public void treeNodesInserted(TreeModelEvent e
) {
157 public void treeNodesRemoved(TreeModelEvent e
) {
159 public void treeStructureChanged(TreeModelEvent e
) {