1 4 package demo.sharededitor.controls; 5 6 import java.awt.BasicStroke ; 7 import java.awt.Color ; 8 import java.awt.Image ; 9 import java.awt.Stroke ; 10 import java.awt.event.KeyEvent ; 11 import java.awt.event.KeyListener ; 12 import java.awt.event.MouseEvent ; 13 14 import javax.swing.event.MouseInputAdapter ; 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 implements KeyListener  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 texture; 34 35 private transient String drawTool; 36 37 private transient Color foreground; 38 39 private transient Color background; 40 41 private transient int fillstyle; 42 43 private transient Stroke stroke; 44 45 private transient String 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 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 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 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 e) 125 { 126 trackXY(e.getX(), e.getY()); 127 } 128 129 public synchronized void mouseReleased(MouseEvent 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 e) 141 { 142 processCommand(e); 143 } 144 145 public synchronized void keyTyped(KeyEvent e) 146 { 147 processCommand(e); 148 } 149 150 public synchronized void keyReleased(KeyEvent e) 151 { 152 } 154 155 private void processCommand(KeyEvent 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 } 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 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 name) 229 { 230 this.renderer.requestFocusInWindow(); 231 this.drawTool = name; 232 } 233 234 public synchronized void setTexture(Image 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 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 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 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 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 |