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