1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
14 * @author Toni Kalajainen
\r
16 package org.simantics.scenegraph.g2d.events;
\r
18 import java.awt.datatransfer.Transferable;
\r
19 import java.awt.event.InputEvent;
\r
20 import java.awt.geom.Point2D;
\r
23 * TODO Remove hold time
\r
25 * @see MouseClickEvent
\r
26 * @see MouseDragBegin
\r
28 * @author Toni Kalajainen
\r
30 public abstract class MouseEvent extends Event {
\r
32 private static final long serialVersionUID = -2090477028406944454L;
\r
34 public static final int LEFT_BUTTON = 1;
\r
35 public static final int RIGHT_BUTTON = 2;
\r
36 public static final int MIDDLE_BUTTON = 3;
\r
38 /** Time for mouse press + mouse release to be interpreted as mouse click */
\r
39 public static final long CLICK_TIME = 250;
\r
41 public static final int LEFT_MASK = 1 << (LEFT_BUTTON - 1);
\r
42 public static final int RIGHT_MASK = 1 << (RIGHT_BUTTON - 1);
\r
43 public static final int MIDDLE_MASK = 1 << (MIDDLE_BUTTON - 1);
\r
44 public static final int ALL_BUTTONS_MASK = LEFT_MASK | RIGHT_MASK | MIDDLE_MASK;
\r
46 public static final int CTRL_MASK = InputEvent.CTRL_DOWN_MASK;
\r
47 public static final int ALT_MASK = InputEvent.ALT_DOWN_MASK;
\r
48 public static final int ALT_GRAPH_MASK = InputEvent.ALT_GRAPH_DOWN_MASK;
\r
49 public static final int SHIFT_MASK = InputEvent.SHIFT_DOWN_MASK;
\r
50 public static final int ALL_MODIFIERS_MASK = CTRL_MASK | ALT_MASK | ALT_GRAPH_MASK | SHIFT_MASK;
\r
53 * The identifier of the mouse of this event.
\r
54 * 0 = the main mouse.
\r
56 public final int mouseId;
\r
58 /** Position in the coordinate system of the UI component */
\r
59 public final Point2D controlPosition;
\r
61 /** Position in the coordinate system of the screen */
\r
62 public final Point2D screenPosition;
\r
65 * The status of mouse buttons
\r
70 public final int buttons;
\r
73 * The state of the keyboard modifier keys at the time the event was
\r
77 * @see #ALT_GRAPH_MASK
\r
81 public int stateMask;
\r
83 private MouseEvent(Object context, long time, int mouseId, int buttons, int stateMask,
\r
84 Point2D controlPosition, Point2D screenPosition) {
\r
85 super(context, time);
\r
86 this.mouseId = mouseId;
\r
87 this.buttons = buttons;
\r
88 this.controlPosition = controlPosition;
\r
89 this.screenPosition = screenPosition;
\r
90 this.stateMask = stateMask;
\r
93 public boolean hasAnyButton(int mask) {
\r
94 return (buttons & mask) != 0;
\r
97 public boolean hasAllButtons(int mask) {
\r
98 return (buttons & mask) == mask;
\r
101 public boolean hasAnyModifier(int mask) {
\r
102 return (stateMask & mask) != 0;
\r
105 public boolean hasAllModifiers(int mask) {
\r
106 return (stateMask & mask) == mask;
\r
110 * Returns whether or not the Shift modifier is down on this event.
\r
112 public boolean isShiftDown() {
\r
113 return (stateMask & MouseEvent.SHIFT_MASK) != 0;
\r
117 * Returns whether or not the Control modifier is down on this event.
\r
119 public boolean isControlDown() {
\r
120 return (stateMask & MouseEvent.CTRL_MASK) != 0;
\r
124 * Returns whether or not the Alt modifier is down on this event.
\r
126 public boolean isAltDown() {
\r
127 return (stateMask & MouseEvent.ALT_MASK) != 0;
\r
131 * Returns whether or not the Alt Graph modifier is down on this event.
\r
133 public boolean isAltGraphDown() {
\r
134 return (stateMask & MouseEvent.ALT_GRAPH_MASK) != 0;
\r
137 public abstract static class MouseButtonEvent extends MouseEvent {
\r
139 private static final long serialVersionUID = 3540032494506535841L;
\r
142 * button of this event
\r
144 public final int button;
\r
146 public MouseButtonEvent(Object context, long time, int mouseId, int buttons, int stateMask,
\r
147 int button, Point2D controlPosition, Point2D screenPosition) {
\r
148 super(context, time, mouseId, buttons, stateMask, controlPosition,screenPosition);
\r
149 this.button = button;
\r
153 public static class MouseWheelMovedEvent extends MouseEvent {
\r
155 private static final long serialVersionUID = -7896477913481842708L;
\r
158 * Constant representing scrolling by "units" (like scrolling with the
\r
161 * @see #getScrollType
\r
163 public static final int WHEEL_UNIT_SCROLL = 0;
\r
166 * Constant representing scrolling by a "block" (like scrolling
\r
167 * with page-up, page-down keys)
\r
169 * @see #getScrollType
\r
171 public static final int WHEEL_BLOCK_SCROLL = 1;
\r
174 * Indicates what sort of scrolling should take place in response to this
\r
175 * event, based on platform settings. Legal values are:
\r
177 * <li> WHEEL_UNIT_SCROLL
\r
178 * <li> WHEEL_BLOCK_SCROLL
\r
181 * @see #getScrollType
\r
183 public final int scrollType;
\r
186 * Only valid for scrollType WHEEL_UNIT_SCROLL.
\r
187 * Indicates number of units that should be scrolled per
\r
188 * click of mouse wheel rotation, based on platform settings.
\r
190 * @see #getScrollAmount
\r
191 * @see #getScrollType
\r
193 public final int scrollAmount;
\r
196 * Indicates how far the mouse wheel was rotated.
\r
198 * @see #getWheelRotation
\r
200 public final int wheelRotation;
\r
202 public MouseWheelMovedEvent(Object context, long time, int mouseId, int buttons, int stateMask,
\r
203 Point2D controlPosition, Point2D screenPosition, int scrollType, int scrollAmount,
\r
204 int wheelRotation) {
\r
205 super(context, time, mouseId, buttons, stateMask, controlPosition,screenPosition);
\r
206 this.scrollType = scrollType;
\r
207 this.scrollAmount = scrollAmount;
\r
208 this.wheelRotation = wheelRotation;
\r
213 public static class MouseButtonPressedEvent extends MouseButtonEvent {
\r
215 private static final long serialVersionUID = -4687294674299429690L;
\r
217 public MouseButtonPressedEvent(Object context, long time, int mouseId, int buttons, int stateMask,
\r
218 int button, Point2D controlPosition, Point2D screenPosition) {
\r
219 super(context, time, mouseId, buttons, stateMask, button, controlPosition,screenPosition);
\r
224 public static class MouseButtonReleasedEvent extends MouseButtonEvent {
\r
226 private static final long serialVersionUID = -2303672225339491858L;
\r
228 /** Time in milliseconds how long the button was held down */
\r
229 public final long holdTime;
\r
231 public MouseButtonReleasedEvent(Object context, long time,
\r
232 int mouseId, int buttons, int stateMask, int button, long holdTime,
\r
233 Point2D controlPosition, Point2D screenPosition) {
\r
234 super(context, time, mouseId, buttons, stateMask, button, controlPosition, screenPosition);
\r
235 this.holdTime = holdTime;
\r
239 public static class MouseMovedEvent extends MouseEvent {
\r
240 private static final long serialVersionUID = 1463958776335678155L;
\r
242 public MouseMovedEvent(Object context, long time, int mouseId, int buttons, int stateMask,
\r
243 Point2D controlPosition, Point2D screenPosition) {
\r
244 super(context, time, mouseId, buttons, stateMask, controlPosition, screenPosition);
\r
248 public static class MouseEnterEvent extends MouseEvent {
\r
249 private static final long serialVersionUID = 6074648747865556588L;
\r
251 public MouseEnterEvent(Object context, long time, int mouseId, int buttons, int stateMask,
\r
252 Point2D controlPosition, Point2D screenPosition) {
\r
253 super(context, time, mouseId, buttons, stateMask, controlPosition, screenPosition);
\r
257 public static class MouseExitEvent extends MouseEvent {
\r
258 private static final long serialVersionUID = 8596801599996844789L;
\r
260 public MouseExitEvent(Object context, long time, int mouseId, int buttons, int stateMask,
\r
261 Point2D controlPosition, Point2D screenPosition) {
\r
262 super(context, time, mouseId, buttons, stateMask, controlPosition, screenPosition);
\r
266 public static class MouseDoubleClickedEvent extends MouseButtonEvent {
\r
267 private static final long serialVersionUID = -8046967155607105912L;
\r
269 public MouseDoubleClickedEvent(Object context, long time, int mouseId, int buttons, int stateMask,
\r
270 int button, Point2D controlPosition, Point2D screenPosition) {
\r
271 super(context, time, mouseId, buttons, stateMask, button, controlPosition, screenPosition);
\r
275 public static class MouseClickEvent extends MouseButtonEvent {
\r
276 private static final long serialVersionUID = -1737712792090986607L;
\r
278 * Indicates the number of quick consecutive clicks of
\r
281 public final int clickCount;
\r
283 public MouseClickEvent(Object context, long time, int mouseId, int buttons, int stateMask,
\r
284 int button, int clickCount, Point2D controlPosition, Point2D screenPosition) {
\r
285 super(context, time, mouseId, buttons, stateMask, button, controlPosition, screenPosition);
\r
286 this.clickCount = clickCount;
\r
290 public static class MouseDragBegin extends MouseButtonEvent {
\r
291 private static final long serialVersionUID = 3882552912240236450L;
\r
292 public final Point2D startCanvasPos;
\r
293 public final Point2D startControlPos;
\r
294 public Transferable transferable = null;
\r
295 public MouseDragBegin(Object context, long time, int mouseId, int buttons, int stateMask,
\r
296 int button, Point2D startCanvasPos, Point2D startControlPos, Point2D controlPosition, Point2D screenPosition) {
\r
297 super(context, time, mouseId, buttons, stateMask, button, controlPosition, screenPosition);
\r
298 this.startCanvasPos = startCanvasPos;
\r
299 this.startControlPos = startControlPos;
\r
304 * Spans button bit mask into individual button ids (starting from 1)
\r
308 public static int[] getButtonIds(int buttons)
\r
310 // calculate 1 bits
\r
312 for (int i=0; i<32; i++)
\r
313 if ((buttons & (1<<i))!=0)
\r
315 int result[] = new int[size];
\r
317 for (int i=0; i<32; i++)
\r
318 if ((buttons & (1<<i))!=0)
\r
324 public String toString() {
\r
325 return super.toString() + "[mouse#=" + mouseId + ", control pos=" + controlPosition + ", screen pos="
\r
326 + screenPosition + ", buttons=" + Integer.toBinaryString(buttons) + ", stateMask=0x"
\r
327 + Integer.toHexString(stateMask) + "]";
\r