Source code: com/memoire/dja/DjaTree.java
1 /**
2 * @modification $Date: 2001/12/03 16:28:08 $
3 * @statut unstable
4 * @file DjaTree.java
5 * @version 0.36
6 * @author Guillaume Desnoix
7 * @email guillaume@desnoix.com
8 * @license GNU General Public License 2 (GPL2)
9 * @copyright 1998-2001 Guillaume Desnoix
10 */
11
12 package com.memoire.dja;
13
14 import com.memoire.fu.*;
15 import com.memoire.dnd.*;
16 import com.memoire.bu.*;
17 import com.memoire.dja.*;
18 import com.memoire.mst.*;
19
20
21 import javax.swing.*;
22 import javax.swing.border.*;
23 import javax.swing.event.*;
24 import javax.swing.tree.*;
25
26 import java.awt.*;
27 import java.awt.event.*;
28 import java.beans.*;
29 import java.util.*;
30
31 public class DjaTree
32 extends JTree
33 // implements MouseListener // , PropertyChangeListener
34 {
35 public DjaTree()
36 {
37 setShowsRootHandles(true);
38 setBorder(null); // new EmptyBorder(5,5,5,5));
39 setCellRenderer(new DjaTreeCellRenderer());
40 setRootVisible(false);
41 setGrid(null);
42 }
43
44 public void setGrid(DjaGrid _grid)
45 {
46 setModel(new DjaTreeModel(_grid));
47 }
48
49 // Mouse
50
51 /*
52 public void mouseDown(MouseEvent _evt)
53 { }
54
55 public void mouseEntered(MouseEvent _evt)
56 { }
57
58 public void mouseExited(MouseEvent _evt)
59 { }
60
61 public void mousePressed(MouseEvent _evt)
62 {
63 if( _evt.isPopupTrigger()
64 ||((_evt.getModifiers()&MouseEvent.BUTTON3_MASK)!=0))
65 setModel(new DjaTreeModel());
66 }
67
68 public void mouseReleased(MouseEvent _evt)
69 { }
70
71 public void mouseUp(MouseEvent _evt)
72 { }
73
74 public void mouseClicked(MouseEvent _evt)
75 { }
76 */
77 }
78
79 class DjaNodeGrid extends DjaNode
80 {
81 DjaGrid value_;
82
83 DjaNodeGrid(DjaGrid _value)
84 {
85 value_=_value;
86 }
87
88 int getChildCount()
89 {
90 return (value_==null ? 0 : value_.getObjects().size());
91 }
92
93 boolean isLeaf()
94 { return (getChildCount()==0); }
95
96 Object getChild(int _index)
97 {
98 Object r=null;
99
100 if(value_!=null)
101 {
102 DjaObject o=(DjaObject)value_.getObjects().elementAt(_index);
103 if(o instanceof DjaGroup) r=new DjaNodeGroup((DjaGroup)o);
104 else r=new DjaNodeObject(o);
105 }
106
107 return r;
108 }
109
110 int getIndexOfChild(Object _child)
111 { return (value_==null ? -1 : value_.getObjects().indexOf(_child)); }
112
113 public String toString()
114 { return "Grid"; }
115
116 public Object getValue()
117 { return value_; }
118
119 public Icon getIcon()
120 { return null; }
121 }
122
123 class DjaNodeObject extends DjaNode
124 {
125 DjaObject value_;
126
127 DjaNodeObject(DjaObject _value)
128 {
129 value_=_value;
130 }
131
132 int getChildCount()
133 { return 0; }
134
135 boolean isLeaf()
136 { return true; }
137
138 Object getChild(int _index)
139 { return null; }
140
141 int getIndexOfChild(Object _child)
142 { return -1; }
143
144 public String toString()
145 {
146 String r=value_.getClass().getName();
147 int i=r.indexOf("Dja");
148 if(i>=0) r=r.substring(i+3);
149
150 String t=value_.getText(0);
151 if(t!=null)
152 {
153 i=t.indexOf('\n');
154 if(i>=0) t=t.substring(0,i);
155 if(t.length()>13) t=t.substring(0,10)+"...";
156 if(!t.equals("")) r=r+" ("+t+")";
157 }
158
159 return r;
160 }
161
162 public Object getValue()
163 { return value_; }
164
165 public Icon getIcon()
166 { return value_.getIcon(); }
167 }
168
169 class DjaNodeGroup extends DjaNode
170 {
171 DjaGroup value_;
172
173 DjaNodeGroup(DjaGroup _value)
174 {
175 value_=_value;
176 }
177
178 int getChildCount()
179 { return value_.getObjects().size(); }
180
181 boolean isLeaf()
182 { return (getChildCount()==0); }
183
184 Object getChild(int _index)
185 {
186 DjaObject o=(DjaObject)value_.getObjects().elementAt(_index);
187 Object r;
188
189 if(o instanceof DjaGroup) r=new DjaNodeGroup((DjaGroup)o);
190 else r=new DjaNodeObject(o);
191
192 return r;
193 }
194
195 int getIndexOfChild(Object _child)
196 { return value_.getObjects().indexOf(_child); }
197
198 public String toString()
199 { return "Group ["+getChildCount()+"]"; }
200
201 public Object getValue()
202 { return value_; }
203
204 public Icon getIcon()
205 { return value_.getIcon(); }
206 }
207
208 class DjaTreeModel
209 implements TreeModel
210 {
211 DjaNodeGrid root_;
212 DjaVector listeners_;
213
214 public DjaTreeModel(DjaGrid _grid)
215 {
216 root_ =new DjaNodeGrid(_grid);
217 listeners_=new DjaVector();
218 }
219
220 public int getChildCount(Object _parent)
221 {
222 int r=0;
223 if(_parent instanceof DjaNode)
224 r=((DjaNode)_parent).getChildCount();
225 return r;
226 }
227
228 public Object getChild(Object _parent, int _index)
229 {
230 Object r=null;
231 if(_parent instanceof DjaNode)
232 r=((DjaNode)_parent).getChild(_index);
233 return r;
234 }
235
236 public int getIndexOfChild(Object _parent, Object _child)
237 {
238 int r=-1;
239 if(_parent instanceof DjaNode)
240 r=((DjaNode)_parent).getIndexOfChild(_child);
241 return r;
242 }
243
244 public boolean isLeaf(Object _node)
245 {
246 boolean r=true;
247 if(_node instanceof DjaNode)
248 r=((DjaNode)_node).isLeaf();
249 return r;
250 }
251
252 public Object getRoot()
253 { return root_; }
254
255 public void addTreeModelListener(TreeModelListener _l)
256 { listeners_.addElement(_l); }
257
258 public void removeTreeModelListener(TreeModelListener _l)
259 { listeners_.removeElement(_l); }
260
261 public void valueForPathChanged(TreePath _path, Object _newValue)
262 {
263 }
264 }
265
266 class DjaTreeCellRenderer
267 implements TreeCellRenderer
268 {
269 public Component getTreeCellRendererComponent
270 (JTree tree,
271 Object value,
272 boolean selected,
273 boolean expanded,
274 boolean leaf,
275 int row,
276 boolean hasFocus)
277 {
278 JLabel r=new JLabel();
279
280 if(value instanceof DjaNode)
281 {
282 DjaNode node=(DjaNode)value;
283 r.setText(node.getTitle());
284 r.setIcon(node.getIcon());
285 }
286 else
287 {
288 if(value!=null) r.setText(value.toString());
289 }
290
291 r.setOpaque(true);
292 r.setFont(tree.getFont());
293
294 if(r.getIcon()==null)
295 {
296 if(leaf) r.setIcon(UIManager.getIcon("Tree.leafIcon"));
297 else if(expanded) r.setIcon(UIManager.getIcon("Tree.openIcon"));
298 else r.setIcon(UIManager.getIcon("Tree.closedIcon"));
299 }
300
301 if(selected)
302 {
303 r.setBackground(UIManager.getColor("Tree.selectionBackground"));
304 r.setForeground(UIManager.getColor("Tree.selectionForeground"));
305 r.setBorder(UIManager.getBorder("Tree.selectedCellBorder"));
306 }
307 else
308 {
309 r.setBackground(UIManager.getColor("Tree.background"));
310 r.setForeground(UIManager.getColor("Tree.foreground"));
311 r.setBorder(UIManager.getBorder("Tree.cellBorder"));
312 }
313
314 return r;
315 }
316 }