1 26 27 package org.nightlabs.editor2d.viewer; 28 29 import java.awt.Point ; 30 import java.util.ArrayList ; 31 import java.util.Collection ; 32 import java.util.Iterator ; 33 34 import org.apache.log4j.Logger; 35 import org.eclipse.swt.widgets.Display; 36 import org.nightlabs.editor2d.viewer.event.IMouseChangedListener; 37 import org.nightlabs.editor2d.viewer.event.MouseEvent; 38 import org.nightlabs.editor2d.viewer.event.MouseListener; 39 import org.nightlabs.editor2d.viewer.event.MouseMoveListener; 40 41 public abstract class AbstractMouseManager 42 implements IMouseManager 43 { 44 public static final Logger LOGGER = Logger.getLogger(AbstractMouseManager.class); 45 46 public AbstractMouseManager(IViewer viewer) 47 { 48 super(); 49 this.viewer = viewer; 50 } 51 52 protected IViewer viewer; 53 public IViewer getViewer() { 54 return viewer; 55 } 56 57 71 public double getZoom() { 72 return getViewer().getZoom(); 73 } 74 75 protected int getAbsoluteScrollOffsetX() { 76 return getViewer().getViewport().getOffsetX(); 77 } 78 79 protected int getAbsoluteScrollOffsetY() { 80 return getViewer().getViewport().getOffsetY(); 81 } 82 83 protected int getRelativeScrollOffsetX() { 84 return (int) Math.rint(getAbsoluteScrollOffsetX() / getZoom()); 85 } 86 87 protected int getRelativeScrollOffsetY() { 88 return (int) Math.rint(getAbsoluteScrollOffsetY() / getZoom()); 89 } 90 91 protected int x = 0; 92 protected int y = 0; 93 94 public int getRelativeX() { 95 return ((int) Math.rint(x / getZoom())) + getRelativeScrollOffsetX(); 96 } 97 public int getRelativeY() { 98 return ((int) Math.rint(y / getZoom())) + getRelativeScrollOffsetY(); 99 } 100 101 public int getAbsoluteX() { 102 return x + getAbsoluteScrollOffsetX(); 103 } 104 public int getAbsoluteY() { 105 return y + getAbsoluteScrollOffsetY(); 106 } 107 108 protected Point relativePoint = new Point (x,y); 109 public Point getRelativePoint() 110 { 111 relativePoint.x = getRelativeX(); 112 relativePoint.y = getRelativeY(); 113 return relativePoint; 114 } 115 116 protected Point absolutePoint = new Point (x,y); 117 public Point getAbsolutePoint() 118 { 119 absolutePoint.x = getAbsoluteX(); 120 absolutePoint.y = getAbsoluteY(); 121 return absolutePoint; 122 } 123 124 protected Collection mouseChangedListeners = null; 125 protected Collection getMouseChangedListeners() 126 { 127 if (mouseChangedListeners == null) 128 mouseChangedListeners = new ArrayList (); 129 130 return mouseChangedListeners; 131 } 132 133 protected void doFireMouseChanged() 134 { 135 for (Iterator it = getMouseChangedListeners().iterator(); it.hasNext(); ) { 136 IMouseChangedListener l = (IMouseChangedListener) it.next(); 137 l.mouseChanged(getRelativePoint(), getAbsolutePoint()); 138 } 139 } 140 141 protected void fireMouseChanged() 142 { 143 Display.getDefault().asyncExec(new Runnable () 144 { 145 public void run() { 146 doFireMouseChanged(); 147 } 148 }); 149 } 150 151 public void addMouseChangedListener(IMouseChangedListener l) { 152 getMouseChangedListeners().add(l); 153 } 154 155 public void removeMouseChangedListener(IMouseChangedListener l) { 156 getMouseChangedListeners().remove(l); 157 } 158 159 protected Collection mouseMoveListenerer = null; 160 protected Collection getMouseMoveListeners() 161 { 162 if (mouseMoveListenerer == null) 163 mouseMoveListenerer = new ArrayList (); 164 165 return mouseMoveListenerer; 166 } 167 168 public void addMouseMoveListener(MouseMoveListener l) { 169 getMouseMoveListeners().add(l); 170 } 171 172 public void removeMouseMoveListener(MouseMoveListener l) { 173 getMouseMoveListeners().remove(l); 174 } 175 176 protected MouseEvent mouseEvent = new MouseEvent(); 177 protected void doFireMouseMoved(int x, int y, int mouseButton) 178 { 179 mouseEvent.setX(x); 180 mouseEvent.setY(y); 181 mouseEvent.setButton(mouseButton); 182 for (Iterator it = getMouseMoveListeners().iterator(); it.hasNext(); ) { 183 MouseMoveListener l = (MouseMoveListener) it.next(); 184 l.mouseMoved(mouseEvent); 185 } 186 } 187 188 protected void fireMouseMoved(final int x, final int y, final int mouseButton) 189 { 190 Display.getDefault().asyncExec(new Runnable () 191 { 192 public void run() { 193 doFireMouseMoved(x, y, mouseButton); 194 } 195 }); 196 } 197 198 protected Collection mouseListeners = null; 199 protected Collection getMouseListeners() 200 { 201 if (mouseListeners == null) 202 mouseListeners = new ArrayList (); 203 204 return mouseListeners; 205 } 206 207 public void addMouseListener(MouseListener l) { 208 getMouseListeners().add(l); 209 } 210 211 public void removeMouseListener(MouseListener l) { 212 getMouseListeners().remove(l); 213 } 214 215 protected void doFireMousePressed(int x, int y, int mouseButton) 216 { 217 mouseEvent.setX(x); 218 mouseEvent.setY(y); 219 mouseEvent.setButton(mouseButton); 220 for (Iterator it = getMouseListeners().iterator(); it.hasNext(); ) { 221 MouseListener l = (MouseListener) it.next(); 222 l.mousePressed(mouseEvent); 223 } 224 } 225 226 protected void fireMousePressed(final int x, final int y, final int mouseButton) 227 { 228 Display.getDefault().asyncExec(new Runnable () 229 { 230 public void run() { 231 doFireMousePressed(x, y, mouseButton); 232 } 233 }); 234 } 235 236 protected void doFireMouseReleased(int x, int y, int mouseButton) 237 { 238 mouseEvent.setX(x); 239 mouseEvent.setY(y); 240 mouseEvent.setButton(mouseButton); 241 for (Iterator it = getMouseListeners().iterator(); it.hasNext(); ) { 242 MouseListener l = (MouseListener) it.next(); 243 l.mouseReleased(mouseEvent); 244 } 245 } 246 247 protected void fireMouseReleased(final int x, final int y, final int mouseButton) 248 { 249 Display.getDefault().asyncExec(new Runnable () 250 { 251 public void run() { 252 doFireMouseReleased(x, y, mouseButton); 253 } 254 }); 255 } 256 257 307 308 } 309 | Popular Tags |