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