1
14 package gate.swing;
15
16 import javax.swing.event.*;
17 import javax.swing.tree.TreePath;
18
19
23 public abstract class AbstractTreeTableModel implements TreeTableModel {
24
27 protected Object root;
28
29
32 protected EventListenerList listenerList = new EventListenerList();
33
34
37 public AbstractTreeTableModel(Object root) {
38 this.root = root;
39 }
40
41
45
48 public Object getRoot() {
49 return root;
50 }
51
52
55 public boolean isLeaf(Object node) {
56 return getChildCount(node) == 0;
57 }
58
59 public void valueForPathChanged(TreePath path, Object newValue) {}
60
61
65 public int getIndexOfChild(Object parent, Object child) {
66 for (int i = 0; i < getChildCount(parent); i++){
67 if (getChild(parent, i).equals(child)){
68 return i;
69 }
70 }
71 return -1;
72 }
73
74
78 public void addTreeModelListener(TreeModelListener l) {
79 listenerList.add(TreeModelListener.class, l);
80 }
81
82
86 public void removeTreeModelListener(TreeModelListener l) {
87 listenerList.remove(TreeModelListener.class, l);
88 }
89
90
97 protected void fireTreeNodesChanged(Object source, Object[] path,
98 int[] childIndices,
99 Object[] children) {
100 Object[] listeners = listenerList.getListenerList();
102 TreeModelEvent e = null;
103 for (int i = listeners.length-2; i>=0; i-=2) {
106 if (listeners[i]==TreeModelListener.class) {
107 if (e == null) e = new TreeModelEvent(source, path,
109 childIndices, children);
110 ((TreeModelListener)listeners[i+1]).treeNodesChanged(e);
111 }
112 }
113 }
114
115
122 protected void fireTreeNodesInserted(Object source, Object[] path,
123 int[] childIndices,
124 Object[] children) {
125 Object[] listeners = listenerList.getListenerList();
127 TreeModelEvent e = null;
128 for (int i = listeners.length-2; i>=0; i-=2) {
131 if (listeners[i]==TreeModelListener.class) {
132 if (e == null) e = new TreeModelEvent(source, path,
134 childIndices, children);
135 ((TreeModelListener)listeners[i+1]).treeNodesInserted(e);
136 }
137 }
138 }
139
140
147 protected void fireTreeNodesRemoved(Object source, Object[] path,
148 int[] childIndices,
149 Object[] children) {
150 Object[] listeners = listenerList.getListenerList();
152 TreeModelEvent e = null;
153 for (int i = listeners.length-2; i>=0; i-=2) {
156 if (listeners[i]==TreeModelListener.class) {
157 if (e == null) e = new TreeModelEvent(source, path,
159 childIndices, children);
160 ((TreeModelListener)listeners[i+1]).treeNodesRemoved(e);
161 }
162 }
163 }
164
165
172 protected void fireTreeStructureChanged(Object source, Object[] path,
173 int[] childIndices,
174 Object[] children) {
175 Object[] listeners = listenerList.getListenerList();
177 TreeModelEvent e = null;
178 for (int i = listeners.length-2; i>=0; i-=2) {
181 if (listeners[i]==TreeModelListener.class) {
182 if (e == null) e = new TreeModelEvent(source, path,
184 childIndices, children);
185 ((TreeModelListener)listeners[i+1]).treeStructureChanged(e);
186 }
187 }
188 }
189
190
193 public void setValueAt(Object aValue, Object node, int column){}
194
195 abstract public Class getColumnClass(int column);
196 abstract public boolean isCellEditable(Object node, int column);
197 abstract public Object getChild(Object parent, int index);
198 abstract public int getChildCount(Object parent);
199 abstract public int getColumnCount();
200 abstract public String getColumnName(int column);
201 abstract public Object getValueAt(Object node, int column);
202
203 }
204