Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }