KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > demo > sharededitor > controls > Dispatcher


1 /*
2 @COPYRIGHT@
3 */

4 package demo.sharededitor.controls;
5
6 import java.awt.BasicStroke JavaDoc;
7 import java.awt.Color JavaDoc;
8 import java.awt.Image JavaDoc;
9 import java.awt.Stroke JavaDoc;
10 import java.awt.event.KeyEvent JavaDoc;
11 import java.awt.event.KeyListener JavaDoc;
12 import java.awt.event.MouseEvent JavaDoc;
13
14 import javax.swing.event.MouseInputAdapter JavaDoc;
15
16 import demo.sharededitor.events.IListListener;
17 import demo.sharededitor.models.BaseObject;
18 import demo.sharededitor.models.ObjectManager;
19 import demo.sharededitor.ui.IFontable;
20 import demo.sharededitor.ui.ITexturable;
21 import demo.sharededitor.ui.Renderer;
22
23 public final class Dispatcher extends MouseInputAdapter JavaDoc implements KeyListener JavaDoc
24 {
25     private ObjectManager objmgr;
26
27     private transient Renderer renderer;
28
29     private transient int lx;
30
31     private transient int ly;
32
33     private transient Image JavaDoc texture;
34
35     private transient String JavaDoc drawTool;
36
37     private transient Color JavaDoc foreground;
38
39     private transient Color JavaDoc background;
40
41     private transient int fillstyle;
42
43     private transient Stroke JavaDoc stroke;
44
45     private transient String JavaDoc fontName;
46
47     private transient int fontSize;
48
49     public Dispatcher(ObjectManager objects, Renderer renderer)
50     {
51         this.renderer = renderer;
52         this.renderer.addMouseListener(this);
53         this.renderer.addMouseMotionListener(this);
54         this.renderer.addKeyListener(this);
55
56         this.objmgr = objects;
57         this.objmgr.addListener((IListListener) this.renderer);
58     }
59
60     public synchronized void mousePressed(MouseEvent JavaDoc e)
61     {
62         this.renderer.requestFocusInWindow();
63         int x = e.getX();
64         int y = e.getY();
65         trackXY(x, y);
66
67         if (objmgr.canGrabAt(x, y))
68             objmgr.grabAt(x, y, !e.isControlDown());
69         else
70         {
71             BaseObject obj = objmgr.create(x, y, this.drawTool);
72             obj.setFillStyle(this.fillstyle);
73             obj.setForeground(this.foreground);
74             obj.setBackground(this.background);
75             obj.setStroke(this.stroke);
76             if ((obj instanceof ITexturable)
77                 && (BaseObject.FILLSTYLE_TEXTURED == fillstyle))
78             {
79                 ITexturable to = (ITexturable) obj;
80                 to.setTexture(this.texture);
81             }
82
83             if (obj instanceof IFontable)
84             {
85                 IFontable fo = (IFontable) obj;
86                 fo.setFontInfo(this.fontName, this.fontSize, "");
87             }
88         }
89     }
90
91     public synchronized void mouseDragged(MouseEvent JavaDoc e)
92     {
93         if (objmgr.lastGrabbed() == null)
94            return;
95
96         int x = e.getX();
97         int y = e.getY();
98         BaseObject current = objmgr.lastGrabbed();
99         
100         if (current.isAnchorGrabbed()) current.resize(x, y);
101         else current.move(x - lx, y - ly);
102             
103         trackXY(x, y);
104     }
105
106     public synchronized void mouseClicked(MouseEvent JavaDoc e)
107     {
108         BaseObject current = objmgr.grabAt(e.getX(), e.getY(), !e.isControlDown());
109         if (current != null)
110         {
111            switch(e.getClickCount())
112            {
113               case 1:
114                  current.selectAction(true);
115                  break;
116               case 2:
117                  current.alternateSelectAction(true);
118                  break;
119            }
120        }
121         trackXY(e.getX(), e.getY());
122     }
123
124     public synchronized void mouseMoved(MouseEvent JavaDoc e)
125     {
126         trackXY(e.getX(), e.getY());
127     }
128     
129     public synchronized void mouseReleased(MouseEvent JavaDoc e)
130     {
131         trackXY(e.getX(), e.getY());
132         BaseObject current = objmgr.lastGrabbed();
133         if ((current != null) && current.isTransient())
134         {
135            objmgr.deleteSelection();
136            objmgr.selectAllWithin(current);
137        }
138     }
139
140     public synchronized void keyPressed(KeyEvent JavaDoc e)
141     {
142         processCommand(e);
143     }
144
145     public synchronized void keyTyped(KeyEvent JavaDoc e)
146     {
147         processCommand(e);
148     }
149
150     public synchronized void keyReleased(KeyEvent JavaDoc e)
151     {
152         // no need to do anything here
153
}
154
155     private void processCommand(KeyEvent JavaDoc e)
156     {
157         if (KeyEvent.KEY_TYPED == e.getID())
158         {
159             if ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy1234567890!@#$%^&*() _+=-`~[]\\{}|:;'?/><,.\""
160                 .indexOf(e.getKeyChar()) != -1) sendCharToObject(e.getKeyChar());
161         }
162         else
163         {
164             int keyCode = e.getKeyCode();
165             if (e.isControlDown())
166             {
167                 switch (keyCode)
168                 {
169                     case KeyEvent.VK_BACK_SPACE:
170                         this.objmgr.deleteSelection();
171                         break;
172                     case KeyEvent.VK_I:
173                         this.objmgr.invertSelection();
174                         break;
175                     case KeyEvent.VK_A:
176                         this.objmgr.toggleSelection();
177                         break;
178                 }
179             }
180             else
181             {
182                 switch (keyCode)
183                 {
184                     case KeyEvent.VK_BACK_SPACE:
185                         sendKeyToObject(keyCode);
186                         break;
187                     case KeyEvent.VK_DELETE:
188                         this.objmgr.deleteSelection();
189                         break;
190                     case KeyEvent.VK_ENTER:
191                     case KeyEvent.VK_ESCAPE:
192                         this.objmgr.clearSelection();
193                         break;
194                 }
195             }
196         }
197     }
198
199     private void sendCharToObject(char c)
200     {
201         BaseObject current = objmgr.lastGrabbed();
202         if ((current != null) && (current instanceof IFontable))
203         {
204             ((IFontable) current).appendToText(c);
205             //String text = ((IFontable) current).getText();
206
//((IFontable) current).setText(text + c);
207
}
208     }
209
210     private void sendKeyToObject(int keyCode)
211     {
212         BaseObject current = objmgr.lastGrabbed();
213         if ((current != null)
214             && (current instanceof IFontable))
215         {
216             String JavaDoc text = ((IFontable) current).getText();
217             if (text.length() == 0) return;
218             ((IFontable) current).setText(text.substring(0, text.length() - 1));
219         }
220     }
221
222     private void trackXY(int x, int y)
223     {
224         lx = x;
225         ly = y;
226     }
227
228     public synchronized void setDrawTool(String JavaDoc name)
229     {
230         this.renderer.requestFocusInWindow();
231         this.drawTool = name;
232     }
233
234     public synchronized void setTexture(Image JavaDoc texture)
235     {
236         this.renderer.requestFocusInWindow();
237         this.texture = texture;
238         BaseObject current = objmgr.lastGrabbed();
239         if ((current != null)
240             && (current instanceof ITexturable)
241             && (BaseObject.FILLSTYLE_TEXTURED == fillstyle))
242             ((ITexturable) current).setTexture(texture);
243     }
244
245     public synchronized void setFontName(String JavaDoc fontName)
246     {
247         this.renderer.requestFocusInWindow();
248         this.fontName = fontName;
249         BaseObject current = objmgr.lastGrabbed();
250         if ((current != null)
251             && (current instanceof IFontable))
252             ((IFontable) current).setFontName(fontName);
253     }
254
255     public synchronized void setFontSize(int fontSize)
256     {
257         this.renderer.requestFocusInWindow();
258         this.fontSize = fontSize;
259         BaseObject current = objmgr.lastGrabbed();
260         if ((current != null)
261             && (current instanceof IFontable))
262             ((IFontable) current).setFontSize(fontSize);
263     }
264
265     public synchronized void setFillStyle(int fillstyle)
266     {
267         this.renderer.requestFocusInWindow();
268         this.fillstyle = fillstyle;
269     }
270
271     public synchronized void setStroke(Stroke JavaDoc stroke)
272     {
273         this.renderer.requestFocusInWindow();
274         this.stroke = stroke;
275         BaseObject current = objmgr.lastGrabbed();
276         if (current != null) current.setStroke(stroke);
277     }
278
279     public synchronized void setForeground(Color JavaDoc foreground)
280     {
281         this.renderer.requestFocusInWindow();
282         this.foreground = foreground;
283         BaseObject current = objmgr.lastGrabbed();
284         if (current != null) current.setForeground(foreground);
285     }
286
287     public synchronized void setBackground(Color JavaDoc background)
288     {
289         this.renderer.requestFocusInWindow();
290         this.background = background;
291         BaseObject current = objmgr.lastGrabbed();
292         if (current != null) current.setBackground(background);
293     }
294 }
295
Popular Tags