double-click support
[nikiroo-utils.git] / src / jexer / event / TMouseEvent.java
1 /*
2 * Jexer - Java Text User Interface
3 *
4 * The MIT License (MIT)
5 *
6 * Copyright (C) 2017 Kevin Lamonte
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 * DEALINGS IN THE SOFTWARE.
25 *
26 * @author Kevin Lamonte [kevin.lamonte@gmail.com]
27 * @version 1
28 */
29 package jexer.event;
30
31 /**
32 * This class encapsulates several kinds of mouse input events. Note that
33 * the relative (x,y) ARE MUTABLE: TWidget's onMouse() handlers perform that
34 * update during event dispatching.
35 */
36 public final class TMouseEvent extends TInputEvent {
37
38 /**
39 * The type of event generated.
40 */
41 public enum Type {
42 /**
43 * Mouse motion. X and Y will have screen coordinates.
44 */
45 MOUSE_MOTION,
46
47 /**
48 * Mouse button down. X and Y will have screen coordinates.
49 */
50 MOUSE_DOWN,
51
52 /**
53 * Mouse button up. X and Y will have screen coordinates.
54 */
55 MOUSE_UP,
56
57 /**
58 * Mouse double-click. X and Y will have screen coordinates.
59 */
60 MOUSE_DOUBLE_CLICK
61 }
62
63 /**
64 * Type of event, one of MOUSE_MOTION, MOUSE_UP, or MOUSE_DOWN.
65 */
66 private Type type;
67
68 /**
69 * Get type.
70 *
71 * @return type
72 */
73 public Type getType() {
74 return type;
75 }
76
77 /**
78 * Mouse X - relative coordinates.
79 */
80 private int x;
81
82 /**
83 * Get x.
84 *
85 * @return x
86 */
87 public int getX() {
88 return x;
89 }
90
91 /**
92 * Set x.
93 *
94 * @param x new relative X value
95 * @see jexer.TWidget#onMouseDown(TMouseEvent mouse)
96 * @see jexer.TWidget#onMouseDown(TMouseEvent mouse)
97 * @see jexer.TWidget#onMouseMotion(TMouseEvent mouse)
98 */
99 public void setX(final int x) {
100 this.x = x;
101 }
102
103 /**
104 * Mouse Y - relative coordinates.
105 */
106 private int y;
107
108 /**
109 * Get y.
110 *
111 * @return y
112 */
113 public int getY() {
114 return y;
115 }
116
117 /**
118 * Set y.
119 *
120 * @param y new relative Y value
121 * @see jexer.TWidget#onMouseDown(TMouseEvent mouse)
122 * @see jexer.TWidget#onMouseDown(TMouseEvent mouse)
123 * @see jexer.TWidget#onMouseMotion(TMouseEvent mouse)
124 */
125 public void setY(final int y) {
126 this.y = y;
127 }
128
129 /**
130 * Mouse X - absolute screen coordinates.
131 */
132 private int absoluteX;
133
134 /**
135 * Get absoluteX.
136 *
137 * @return absoluteX
138 */
139 public int getAbsoluteX() {
140 return absoluteX;
141 }
142
143 /**
144 * Set absoluteX.
145 *
146 * @param absoluteX the new value
147 */
148 public void setAbsoluteX(final int absoluteX) {
149 this.absoluteX = absoluteX;
150 }
151
152 /**
153 * Mouse Y - absolute screen coordinate.
154 */
155 private int absoluteY;
156
157 /**
158 * Get absoluteY.
159 *
160 * @return absoluteY
161 */
162 public int getAbsoluteY() {
163 return absoluteY;
164 }
165
166 /**
167 * Set absoluteY.
168 *
169 * @param absoluteY the new value
170 */
171 public void setAbsoluteY(final int absoluteY) {
172 this.absoluteY = absoluteY;
173 }
174
175 /**
176 * Mouse button 1 (left button).
177 */
178 private boolean mouse1;
179
180 /**
181 * Get mouse1.
182 *
183 * @return mouse1
184 */
185 public boolean isMouse1() {
186 return mouse1;
187 }
188
189 /**
190 * Mouse button 2 (right button).
191 */
192 private boolean mouse2;
193
194 /**
195 * Get mouse2.
196 *
197 * @return mouse2
198 */
199 public boolean isMouse2() {
200 return mouse2;
201 }
202
203 /**
204 * Mouse button 3 (middle button).
205 */
206 private boolean mouse3;
207
208 /**
209 * Get mouse3.
210 *
211 * @return mouse3
212 */
213 public boolean isMouse3() {
214 return mouse3;
215 }
216
217 /**
218 * Mouse wheel UP (button 4).
219 */
220 private boolean mouseWheelUp;
221
222 /**
223 * Get mouseWheelUp.
224 *
225 * @return mouseWheelUp
226 */
227 public boolean isMouseWheelUp() {
228 return mouseWheelUp;
229 }
230
231 /**
232 * Mouse wheel DOWN (button 5).
233 */
234 private boolean mouseWheelDown;
235
236 /**
237 * Get mouseWheelDown.
238 *
239 * @return mouseWheelDown
240 */
241 public boolean isMouseWheelDown() {
242 return mouseWheelDown;
243 }
244
245 /**
246 * Public contructor.
247 *
248 * @param type the type of event, MOUSE_MOTION, MOUSE_DOWN, or MOUSE_UP
249 * @param x relative column
250 * @param y relative row
251 * @param absoluteX absolute column
252 * @param absoluteY absolute row
253 * @param mouse1 if true, left button is down
254 * @param mouse2 if true, right button is down
255 * @param mouse3 if true, middle button is down
256 * @param mouseWheelUp if true, mouse wheel (button 4) is down
257 * @param mouseWheelDown if true, mouse wheel (button 5) is down
258 */
259 public TMouseEvent(final Type type, final int x, final int y,
260 final int absoluteX, final int absoluteY,
261 final boolean mouse1, final boolean mouse2, final boolean mouse3,
262 final boolean mouseWheelUp, final boolean mouseWheelDown) {
263
264 this.type = type;
265 this.x = x;
266 this.y = y;
267 this.absoluteX = absoluteX;
268 this.absoluteY = absoluteY;
269 this.mouse1 = mouse1;
270 this.mouse2 = mouse2;
271 this.mouse3 = mouse3;
272 this.mouseWheelUp = mouseWheelUp;
273 this.mouseWheelDown = mouseWheelDown;
274 }
275
276 /**
277 * Create a duplicate instance.
278 *
279 * @return duplicate intance
280 */
281 public TMouseEvent dup() {
282 TMouseEvent mouse = new TMouseEvent(type, x, y, absoluteX, absoluteY,
283 mouse1, mouse2, mouse3, mouseWheelUp, mouseWheelDown);
284 return mouse;
285 }
286
287 /**
288 * Make human-readable description of this TMouseEvent.
289 *
290 * @return displayable String
291 */
292 @Override
293 public String toString() {
294 return String.format("Mouse: %s x %d y %d absoluteX %d absoluteY %d 1 %s 2 %s 3 %s DOWN %s UP %s",
295 type,
296 x, y,
297 absoluteX, absoluteY,
298 mouse1,
299 mouse2,
300 mouse3,
301 mouseWheelUp,
302 mouseWheelDown);
303 }
304
305 }