1 /*
2 * TreeView
3 *
4 * $RCSfile: TreeView.java,v $
5 * $Revision: 1.4 $
6 * $Date: 2004/01/10 20:10:46 $
7 * $Source: /cvsroot/jpui/jpui/src/TreeView.java,v $
8 *
9 * JPUI - Java Preferences User Interface
10 * Copyright (C) 2003
11 *
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the Free
14 * Software Foundation; either version 2 of the License, or (at your option)
15 * any later version.
16 *
17 * This program is distributed in the hope that it will be useful, but WITHOUT
18 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
20 * more details.
21 *
22 * You should have received a copy of the GNU General Public License along with
23 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
24 * Place, Suite 330, Boston, MA 02111-1307 USA
25 *
26 * Author: macksold@users.sourceforge.net
27 */
28
29 import java.awt.BorderLayout;
30
31 import java.util.Observable;
32 import java.util.Observer;
33
34 import javax.swing.JOptionPane;
35 import javax.swing.JPanel;
36 import javax.swing.JTree;
37 import javax.swing.event.TreeModelEvent;
38 import javax.swing.event.TreeSelectionEvent;
39 import javax.swing.event.TreeSelectionListener;
40 import javax.swing.tree.TreeSelectionModel;
41 import java.util.prefs.Preferences;
42 import javax.swing.event.TreeModelListener;
43
44 /***
45 * Left side tree view of user and system
46 * preference trees
47 */
48 public class TreeView implements Observer, TreeModelListener {
49 // panel
50 private JPanel moPanel;
51 // tree control
52 private JTree moTree;
53 // tree model
54 private PreferencesTreeModel moPreferencesTreeModel;
55
56 /***
57 * @param oModel
58 */
59 public TreeView() {
60 moPanel = new JPanel();
61 moPanel.setLayout(new BorderLayout());
62 moPreferencesTreeModel = new PreferencesTreeModel();
63 moTree = new JTree(moPreferencesTreeModel);
64 moPreferencesTreeModel.addTreeModelListener(this);
65
66 moTree.setRootVisible(false);
67 moTree.getSelectionModel().setSelectionMode(
68 TreeSelectionModel.SINGLE_TREE_SELECTION);
69 moTree.setEditable(true);
70 moTree.setShowsRootHandles(true);
71
72 // Listen for when the selection changes.
73 moTree.addTreeSelectionListener(new TreeSelectionListener() {
74 public void valueChanged(TreeSelectionEvent e) {
75 Preferences oNode =
76 (Preferences) moTree
77 .getLastSelectedPathComponent();
78
79 if (oNode == null)
80 return;
81
82 // update the current node
83 if (oNode instanceof Preferences) {
84 PreferencesModel.Instance().setCurrentNode(
85 ((Preferences) oNode));
86 }
87 }
88 });
89
90 moPanel.add(moTree, BorderLayout.CENTER);
91 PreferencesModel.Instance().addObserver(this);
92 }
93
94 /***
95 * @return
96 */
97 public JPanel getPanel() {
98 return moPanel;
99 }
100
101 /***
102 * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
103 */
104 public void update(Observable oObject, Object oArg) {
105 syncTree();
106 }
107
108 /***
109 * Create a node as a child of the current node
110 */
111 public void newNode() {
112 String sNewNode =
113 JOptionPane.showInputDialog(
114 moPanel.getParent(),
115 Resources.getString("new_node_message"),
116 Resources.getString("new_node_title"),
117 JOptionPane.QUESTION_MESSAGE);
118 if (sNewNode != null) {
119 PreferencesTreeModel oPrefTreeModel =
120 (PreferencesTreeModel)moTree.getModel();
121 oPrefTreeModel.newNode(sNewNode);
122 }
123 }
124
125 /***
126 * Delete the current node
127 */
128 public void deleteNode() {
129 PreferencesTreeModel oPrefTreeModel =
130 (PreferencesTreeModel)moTree.getModel();
131 oPrefTreeModel.deleteNode();
132 }
133
134 /***
135 * @see javax.swing.event.TreeModelListener#treeNodesChanged(javax.swing.event.TreeModelEvent)
136 */
137 public void treeNodesChanged(TreeModelEvent e) {
138 syncTree();
139 }
140
141 /***
142 * @see javax.swing.event.TreeModelListener#treeNodesInserted(javax.swing.event.TreeModelEvent)
143 */
144 public void treeNodesInserted(TreeModelEvent e) {
145 syncTree();
146 }
147
148 /***
149 * @see javax.swing.event.TreeModelListener#treeNodesRemoved(javax.swing.event.TreeModelEvent)
150 */
151 public void treeNodesRemoved(TreeModelEvent e) {
152 syncTree();
153 }
154
155 /***
156 * @see javax.swing.event.TreeModelListener#treeStructureChanged(javax.swing.event.TreeModelEvent)
157 */
158 public void treeStructureChanged(TreeModelEvent e) {
159 syncTree();
160 }
161
162 /***
163 * Ensure that the JTree reflects the current node after the tree
164 * changes by having a node added or removed.
165 */
166 private void syncTree() {
167 PreferencesModel oModel = PreferencesModel.Instance();
168 Preferences oCurrentPref = oModel.getCurrentNode();
169 // Preferences oCurrentTreeSelection =
170 // (Preferences)moTree.getSelectionPath().getLastPathComponent();
171
172 // update the tree selection
173 // if(!oCurrentPref.equals(oCurrentTreeSelection)) {
174 PreferencesTreeModel oPrefTreeModel =
175 (PreferencesTreeModel)moTree.getModel();
176
177 moTree.setSelectionPath(oPrefTreeModel.toTreePath(oCurrentPref));
178 // }
179 }
180 }
This page was automatically generated by Maven