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

Quick Search    Search Deep

Source code: com/memoire/dja/DjaGridInteractive.java


1   /**
2    * @modification $Date: 2003/01/23 09:59:29 $
3    * @statut       unstable
4    * @file         DjaGridInteractive.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 java.awt.*;
22  import java.awt.event.*;
23  import java.io.*;
24  import java.util.*;
25  import javax.swing.*;
26  import javax.swing.border.*;
27  
28  public class DjaGridInteractive
29         extends DjaGrid
30  {
31    public DjaGridInteractive()
32    {
33      this(true,null);
34    }
35  
36    public DjaGridInteractive(boolean _interactive)
37    {
38      this(_interactive,null);
39    }
40  
41    public DjaGridInteractive(boolean _interactive, DjaVector _objects)
42    {
43      super(_objects);
44  
45      anchorsVisible_=true;
46      attachsVisible_=true;
47      dotsVisible_   =true;
48  
49      clearSelection();
50      setInteractive(_interactive);
51    }
52  
53    private boolean anchorsVisible_;
54    public boolean isAnchorsVisible() { return anchorsVisible_; }
55    public void setAnchorsVisible(boolean _v) { anchorsVisible_=_v; }
56  
57    private boolean attachsVisible_;
58    public boolean isAttachsVisible() { return attachsVisible_; }
59    public void setAttachsVisible(boolean _v) { attachsVisible_=_v; }
60  
61    private boolean dotsVisible_;
62    public boolean isDotsVisible() { return dotsVisible_; }
63    public void setDotsVisible(boolean _v) { dotsVisible_=_v; }
64  
65    public DjaVector getSelection()
66    {
67      if(!isInteractive()) return null; //new DjaVector(0);
68  
69      DjaVector r=new DjaVector();
70      for(Enumeration e=getObjects().elements(); e.hasMoreElements(); )
71      {
72        DjaObject o=(DjaObject)e.nextElement();
73        if(o.isSelected()) r.addElement(o);
74      }
75      return r;
76    }
77  
78    public void setSelection(DjaVector _selection)
79    {
80      boolean refresh=false;
81  
82      if(_selection==null) _selection=new DjaVector(0);
83  
84      for(Enumeration e=getObjects().elements(); e.hasMoreElements(); )
85      {
86        DjaObject o=(DjaObject)e.nextElement();
87        if(o.isSelected()&&!_selection.contains(o))
88    { o.setSelected(false); refresh=true; }
89      }
90  
91      for(Enumeration e=_selection.elements(); e.hasMoreElements(); )
92      {
93        DjaObject o=(DjaObject)e.nextElement();
94        if(!o.isSelected()&&getObjects().contains(o))
95    { o.setSelected(true); refresh=true; }
96      }
97  
98      if(refresh) repaint();
99    }
100 
101   public void clearSelection()
102   {
103     setSelection((DjaVector)null);
104   }
105 
106   public void setSelectionToAll()
107   {
108     setSelection(getObjects());
109   }
110 
111   public void setSelection(DjaObject _o)
112   {
113     DjaVector s=new DjaVector(1);
114     if(_o!=null) s.addElement(_o);
115     setSelection(s);
116   }
117 
118   public void addSelection(DjaObject _o)
119   {
120     DjaVector s=getSelection();
121     if((_o!=null)&&!s.contains(_o))
122     {
123       s.addElement(_o);
124       setSelection(s);
125     }
126   }
127 
128   public void removeSelection(DjaObject _o)
129   {
130     DjaVector s=getSelection();
131     if((_o!=null)&&s.contains(_o))
132     {
133       s.removeElement(_o);
134       setSelection(s);
135     }
136   }
137 
138   public DjaVector cloneSelection()
139     { return DjaLib.clone(getSelection()); }
140 
141   public void moveSelection(int _dx, int _dy)
142   {
143     DjaVector s=getSelection();
144     int l=s.size();
145 
146     if(l==0) return;
147 
148     if(l==1)
149     {
150       DjaObject o=(DjaObject)s.elementAt(0);
151       Rectangle r=DjaLib.getDirtyArea(o);//o.getExtendedBounds();
152       o.setX(o.getX()+_dx);
153       o.setY(o.getY()+_dy);
154       r=DjaLib.getDirtyArea(o).union(r);
155       repaint(r);
156     }
157     else
158     {
159       for(Enumeration e=s.elements(); e.hasMoreElements(); )
160       {
161         DjaObject o=(DjaObject)e.nextElement();
162   o.setX(o.getX()+_dx);
163   o.setY(o.getY()+_dy);
164       }
165       repaint();
166     }
167   }
168 
169   public void putSelectionToFront()
170   {
171     // quiet
172     DjaVector s=getSelection();
173     for(Enumeration e=s.elements(); e.hasMoreElements(); )
174       remove((DjaObject)e.nextElement(),true);
175     int l=s.size();
176     for(int i=l-1;i>=0;i--)
177       add((DjaObject)s.elementAt(i),true);
178   }
179 
180   public void putSelectionToBack()
181   {
182     // quiet
183     DjaVector s=getSelection();
184     for(Enumeration e=s.elements(); e.hasMoreElements(); )
185       remove((DjaObject)e.nextElement(),true);
186     int l=s.size();
187     for(int i=0;i<l;i++)
188       insert(getObjects().size(),
189        (DjaObject)s.elementAt(i),true);
190   }
191 
192   protected DjaMouseListener createInteractiveMouseListener()
193   {
194     return new DjaMouseListener(this);
195   }
196 
197   protected DjaKeyListener createInteractiveKeyListener()
198   {
199     return new DjaKeyListener(this);
200   }
201 
202   private DjaMouseListener ml_;
203   private DjaKeyListener   kl_;
204   private DjaVector        ss_; // saved selection
205 
206   private boolean interactive_;
207   public boolean isInteractive() { return interactive_; }
208   public void setInteractive(boolean _s)
209   {
210     if(interactive_!=_s)
211     {
212       interactive_=_s;
213       if(interactive_)
214       {
215   ml_=createInteractiveMouseListener();
216   addMouseListener      (ml_);
217   addMouseMotionListener(ml_);
218   addKeyListener        (ml_);
219   kl_=createInteractiveKeyListener();
220   addKeyListener(kl_);
221 
222   for(Enumeration e=getObjects().elements(); e.hasMoreElements(); )
223   {
224     DjaObject o=(DjaObject)e.nextElement();
225     if(o instanceof DjaEmbed)
226     {
227       JComponent c=((DjaEmbed)o).getEmbed();
228       if(c!=null) remove(c);
229     }
230     if(o instanceof DjaGroup)
231       removeEmbeds((DjaGroup)o);
232     if((ss_!=null)&&ss_.contains(o))
233       o.setSelected(true);
234   }
235   ss_=null;
236 
237   if(!hasFocus()) requestFocus();
238       }
239       else
240       {
241   removeMouseListener      (ml_);
242   removeMouseMotionListener(ml_);
243   removeKeyListener        (ml_);
244   ml_=null;
245   removeKeyListener(kl_);
246   kl_=null;
247 
248   ss_=new DjaVector();
249   for(Enumeration e=getObjects().elements(); e.hasMoreElements(); )
250   {
251     DjaObject o=(DjaObject)e.nextElement();
252     if(o instanceof DjaEmbed)
253     {
254       JComponent c=((DjaEmbed)o).getEmbed();
255       if(c!=null) add(c);
256     }
257     if(o instanceof DjaGroup)
258       addEmbeds((DjaGroup)o);
259     if(o.isSelected())
260     {
261       ss_.addElement(o);
262       o.setSelected(false);
263     }
264 
265     DjaText[] texts=o.getTexts();
266     for(int k=0;k<texts.length;k++)
267       texts[k].setSelected(false);
268   }
269 
270   transferFocus();
271       }
272       repaint();
273     }
274   }
275 
276   public boolean isFocusTraversable()
277   { return isInteractive(); }
278 
279   protected void processFocusEvent(FocusEvent _evt)
280   {
281     super.processFocusEvent(_evt);
282     repaint();
283   }
284 
285   public void paintGrid(Graphics _g)
286   {
287     super.paintGrid(_g);
288 
289     if(isDotsVisible()&&isInteractive())
290     {
291       Insets    i=getInsets();
292       int       w=getWidth() -i.left-i.right;
293       int       h=getHeight()-i.top-i.bottom;
294       Rectangle r=new Rectangle(i.left,i.top,w,h);
295 
296       Rectangle clip=_g.getClipBounds();
297       if(clip!=null) r=r.intersection(clip);
298       if(r!=null)
299       {
300         final int dx=5*deltaX;
301   final int dy=5*deltaY;
302   final int x0=i.left+Math.max(0,r.x-(r.x%dx));
303   final int y0=i.top +Math.max(0,r.y-(r.y%dy));
304   final int x1=Math.min(i.left+w,x0+r.width +dx);
305   final int y1=Math.min(i.top +h,y0+r.height+dy);
306 
307   //System.err.println("XY01="+x0+","+y0+" "+x1+","+y1);
308   _g.setColor(getForeground());
309   /*
310     for(int x=i.left;x<w;x+=5*deltaX)
311     for(int y=i.top;y<h;y+=deltaY)
312     _g.drawLine(x,y,x,y);
313     for(int y=i.top;y<h;y+=5*deltaY)
314     for(int x=i.left;x<w;x+=deltaX)
315     _g.drawLine(x,y,x,y);
316   */
317   for(int x=x0;x<x1;x+=dx)
318     for(int y=y0;y<y1;y+=deltaY)
319       _g.drawLine(x,y,x,y);
320   for(int y=y0;y<y1;y+=dy)
321     for(int x=x0;x<x1;x+=deltaX)
322       _g.drawLine(x,y,x,y);
323       }
324     }
325   }
326 
327   public void paintComponent(Graphics _g)
328   {
329     super.paintComponent(_g);
330 
331     if(hasFocus())
332     {
333       Insets i=getInsets();
334       int    w=getWidth() -i.left-i.right;
335       int    h=getHeight()-i.top-i.bottom;
336 
337       _g.setColor(UIManager.getColor("Button.focus"));
338       _g.drawRect(i.left+1,i.top+1,w-3,h-3);
339 
340       if(kl_!=null)
341       {
342   int kp=kl_.getPreviousKey();
343   if(kp!=-1)
344   {
345     Font ft=getFont();
346     int  fs=ft.getSize();
347     _g.fillOval(-32,-fs-3,64,2*fs+6);
348     _g.setFont(ft);
349     _g.setColor(Color.white);
350     _g.drawString(KeyEvent.getKeyText(kp),4,fs);
351   }
352       }
353     }
354   }
355 
356   public static void main(String[] args)
357   {
358     final JFrame             f  =new JFrame("test Dja");
359     final DjaGridInteractive g  =new DjaGridInteractive(false);
360     final BuToggleButton     tbi=new BuToggleButton("Interactive");
361     final BuButton           tbs=new BuButton("Write");
362     final BuButton           tbl=new BuButton("Read");
363 
364     DjaBox         b1 =new DjaBox("boite");
365     DjaDiamond     d1 =new DjaDiamond("losange");
366     DjaBox         r1 =new DjaRoundBox("rond");
367     DjaLabel       l1 =new DjaLabel("étiquette\nsur 2 lignes");
368     DjaBrokenArrow a1 =new DjaBrokenArrow("flèche");
369     DjaDirectArrow a2 =new DjaDirectArrow("flèche");
370     DjaEllipse  e1 =new DjaEllipse("ellipse");
371     DjaPoint    p1 =new DjaPoint("point");
372     DjaIcon     ic1=new DjaIcon("icône",
373         UIManager.getIcon("InternalFrame.icon"));
374     DjaImage    im1=new DjaImage("image",
375          new ImageIcon("logo-dja.gif").getImage());
376 
377     BuLabelMultiLine m1=new BuLabelMultiLine("Salut tout\nle monde !");
378     DjaEmbed c1=new DjaEmbed("composant",m1);
379     c1.setX(220);
380     c1.setY(30);
381     g.add(c1);
382 
383     BuButton j1=new BuButton("Bouton");
384     DjaEmbed c2=new DjaEmbed("composant",j1);
385     c2.setX(160);
386     c2.setY(210);
387     g.add(c2);
388 
389     e1.setBackground(new Color(0x80CFFFFF));
390     l1.setFont(new Font("SansSerif",Font.PLAIN,18));
391 
392     l1 .setX(100);
393     r1 .setX(200); r1 .setY(100);
394     e1 .setX(100); e1 .setY(100);
395     d1 .setX( 20); d1 .setY(250);
396     p1 .setX( 20); p1 .setY( 60);
397     ic1.setX( 20); ic1.setY(100);
398     im1.setX( 20); im1.setY(140);
399 
400     a1.setBegin(b1,4,11);
401     a1.setEnd  (e1,6, 8);
402     a2.setBegin(e1,4, 3);
403     a2.setEnd  (d1,2, 6);
404 
405     g.add(b1);
406     g.add(l1);
407     g.add(d1);
408     g.add(r1);
409     g.add(e1);
410     g.add(p1);
411     g.add(ic1);
412     g.add(im1);
413     g.add(a1);
414     g.add(a2);
415 
416     f.getContentPane().add("Center",g);
417 
418     tbi.addActionListener
419       (new ActionListener()
420        {
421    public void actionPerformed(ActionEvent _evt)
422      { g.setInteractive(tbi.isSelected()); }
423        }
424       );
425 
426     tbs.addActionListener
427       (new ActionListener()
428        {
429    public void actionPerformed(ActionEvent _evt)
430    {
431      try
432      {
433        FileOutputStream out;
434        out=new FileOutputStream("essai.dja");
435        DjaSaver.saveAsText(g.getObjects(),out);
436        out.close();
437        /*
438        out=new FileOutputStream("essai.ser");
439        DjaSaver.saveAsSer(g,out);
440        out.close();
441        */
442      }
443      catch(IOException ex) { ex.printStackTrace(); }
444    }
445        }
446       );
447 
448     tbl.addActionListener
449       (new ActionListener()
450        {
451    public void actionPerformed(ActionEvent _evt)
452    {
453      try
454      {
455        FileInputStream in;
456        DjaVector v;
457        DjaGroup  gp;
458 
459        in=new FileInputStream("essai.dja");
460        v=DjaLoader.loadAsText(in);
461        in.close();
462 
463        gp=new DjaGroup("essai.dja");
464        Enumeration e=v.elements();
465        while(e.hasMoreElements())
466        {
467          DjaObject o=(DjaObject)e.nextElement();
468          gp.add(o);
469        }
470 
471        gp.setSelected(true);
472        gp.setX(gp.getX()+deltaX);
473        gp.setY(gp.getY()+deltaY);
474        g.add(gp);
475 
476        /*
477        in=new FileInputStream("essai.ser");
478        r=DjaLoader.loadAsSer(in);
479        in.close();
480 
481        gp=new DjaGroup("essai.ser");
482        for(Enumeration e=r.getObjects().elements();
483      e.hasMoreElements(); )
484        {
485          DjaObject o=(DjaObject)e.nextElement();
486          gp.add(o);
487        }
488        gp.setSelected(true);
489        gp.setX(gp.getX()+2*deltaX);
490        gp.setY(gp.getY()+2*deltaY);
491        g.add(gp);
492        */
493 
494        g.repaint();
495      }
496      catch(IOException            ex1) { ex1.printStackTrace(); }
497      //catch(ClassNotFoundException ex2) { ex2.printStackTrace(); }
498    }
499        }
500       );
501 
502     g.addGridListener
503       (new DjaGridListener()
504        {
505    public void objectAdded       (DjaGridEvent _evt) { System.err.println("EVT: "+_evt); }
506    public void objectRemoved     (DjaGridEvent _evt) { System.err.println("EVT: "+_evt); }
507    public void objectConnected   (DjaGridEvent _evt) { System.err.println("EVT: "+_evt); }
508    public void objectDisconnected(DjaGridEvent _evt) { System.err.println("EVT: "+_evt); }
509    public void objectSelected    (DjaGridEvent _evt) { System.err.println("EVT: "+_evt); }
510    public void objectUnselected  (DjaGridEvent _evt) { System.err.println("EVT: "+_evt); }
511    public void objectModified    (DjaGridEvent _evt) { System.err.println("EVT: "+_evt); }
512        });
513 
514     JPanel p=new JPanel(new GridLayout(1,3));
515     p.add(tbi);
516     p.add(tbs);
517     p.add(tbl);
518     f.getContentPane().add("South",p);
519     
520     f.pack();
521     f.setSize(500,500);
522     f.show();
523     f.setLocation(200,100);
524 
525     tbi.requestFocus();
526   }
527 }