1 package net.logAnalyzer.utils.gui.treetable;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 import javax.swing.tree.*;
43 import javax.swing.event.*;
44
45 /***
46 * An abstract implementation of the TreeTableModel interface, handling
47 * the list of listeners.
48 *
49 * @version %I% %G%
50 *
51 * @author Philip Milne
52 */
53
54 public abstract class AbstractTreeTableModel implements TreeTableModel {
55 protected Object root;
56 protected EventListenerList listenerList = new EventListenerList();
57
58 public AbstractTreeTableModel(Object root) {
59 this.root = root;
60 }
61
62
63
64
65
66 public Object getRoot() {
67 return root;
68 }
69
70 public boolean isLeaf(Object node) {
71 return getChildCount(node) == 0;
72 }
73
74 public void valueForPathChanged(TreePath path, Object newValue) {}
75
76
77 public int getIndexOfChild(Object parent, Object child) {
78 for (int i = 0; i < getChildCount(parent); i++) {
79 if (getChild(parent, i).equals(child)) {
80 return i;
81 }
82 }
83 return -1;
84 }
85
86 public void addTreeModelListener(TreeModelListener l) {
87 listenerList.add(TreeModelListener.class, l);
88 }
89
90 public void removeTreeModelListener(TreeModelListener l) {
91 listenerList.remove(TreeModelListener.class, l);
92 }
93
94
95
96
97
98
99
100
101 protected void fireTreeNodesChanged(Object source, Object[] path,
102 int[] childIndices,
103 Object[] children) {
104
105 Object[] listeners = listenerList.getListenerList();
106 TreeModelEvent e = null;
107
108
109 for (int i = listeners.length-2; i>=0; i-=2) {
110 if (listeners[i]==TreeModelListener.class) {
111
112 if (e == null)
113 e = new TreeModelEvent(source, path,
114 childIndices, children);
115 ((TreeModelListener)listeners[i+1]).treeNodesChanged(e);
116 }
117 }
118 }
119
120
121
122
123
124
125
126
127 protected void fireTreeNodesInserted(Object source, Object[] path,
128 int[] childIndices,
129 Object[] children) {
130
131 Object[] listeners = listenerList.getListenerList();
132 TreeModelEvent e = null;
133
134
135 for (int i = listeners.length-2; i>=0; i-=2) {
136 if (listeners[i]==TreeModelListener.class) {
137
138 if (e == null)
139 e = new TreeModelEvent(source, path,
140 childIndices, children);
141 ((TreeModelListener)listeners[i+1]).treeNodesInserted(e);
142 }
143 }
144 }
145
146
147
148
149
150
151
152
153 protected void fireTreeNodesRemoved(Object source, Object[] path,
154 int[] childIndices,
155 Object[] children) {
156
157 Object[] listeners = listenerList.getListenerList();
158 TreeModelEvent e = null;
159
160
161 for (int i = listeners.length-2; i>=0; i-=2) {
162 if (listeners[i]==TreeModelListener.class) {
163
164 if (e == null)
165 e = new TreeModelEvent(source, path,
166 childIndices, children);
167 ((TreeModelListener)listeners[i+1]).treeNodesRemoved(e);
168 }
169 }
170 }
171
172
173
174
175
176
177
178
179 protected void fireTreeStructureChanged(Object source, Object[] path,
180 int[] childIndices,
181 Object[] children) {
182
183 Object[] listeners = listenerList.getListenerList();
184 TreeModelEvent e = null;
185
186
187 for (int i = listeners.length-2; i>=0; i-=2) {
188 if (listeners[i]==TreeModelListener.class) {
189
190 if (e == null)
191 e = new TreeModelEvent(source, path,
192 childIndices, children);
193 ((TreeModelListener)listeners[i+1]).treeStructureChanged(e);
194 }
195 }
196 }
197
198
199
200
201
202 public Class getColumnClass(int column) { return Object.class; }
203
204 /*** By default, make the column with the Tree in it the only editable one.
205 * Making this column editable causes the JTable to forward mouse
206 * and keyboard events in the Tree column to the underlying JTree.
207 */
208 public boolean isCellEditable(Object node, int column) {
209 return getColumnClass(column) == TreeTableModel.class;
210 }
211
212 public void setValueAt(Object aValue, Object node, int column) {}
213
214
215
216
217
218
219
220
221
222
223
224
225 }
226