TWindowBackend
[fanfix.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 /**
59 * Type of event, one of MOUSE_MOTION, MOUSE_UP, or MOUSE_DOWN.
60 */
61 private Type type;
62
63 /**
64 * Get type.
65 *
66 * @return type
67 */
68 public Type getType() {
69 return type;
70 }
71
72 /**
73 * Mouse X - relative coordinates.
74 */
75 private int x;
76
77 /**
78 * Get x.
79 *
80 * @return x
81 */
82 public int getX() {
83 return x;
84 }
85
86 /**
87 * Set x.
88 *
89 * @param x new relative X value
90 * @see jexer.TWidget#onMouseDown(TMouseEvent mouse)
91 * @see jexer.TWidget#onMouseDown(TMouseEvent mouse)
92 * @see jexer.TWidget#onMouseMotion(TMouseEvent mouse)
93 */
94 public void setX(final int x) {
95 this.x = x;
96 }
97
98 /**
99 * Mouse Y - relative coordinates.
100 */
101 private int y;
102
103 /**
104 * Get y.
105 *
106 * @return y
107 */
108 public int getY() {
109 return y;
110 }
111
112 /**
113 * Set y.
114 *
115 * @param y new relative Y value
116 * @see jexer.TWidget#onMouseDown(TMouseEvent mouse)
117 * @see jexer.TWidget#onMouseDown(TMouseEvent mouse)
118 * @see jexer.TWidget#onMouseMotion(TMouseEvent mouse)
119 */
120 public void setY(final int y) {
121 this.y = y;
122 }
123
124 /**
125 * Mouse X - absolute screen coordinates.
126 */
127 private int absoluteX;
128
129 /**
130 * Get absoluteX.
131 *
132 * @return absoluteX
133 */
134 public int getAbsoluteX() {
135 return absoluteX;
136 }
137
138 /**
139 * Set absoluteX.
140 *
141 * @param absoluteX the new value
142 */
143 public void setAbsoluteX(final int absoluteX) {
144 this.absoluteX = absoluteX;
145 }
146
147 /**
148 * Mouse Y - absolute screen coordinate.
149 */
150 private int absoluteY;
151
152 /**
153 * Get absoluteY.
154 *
155 * @return absoluteY
156 */
157 public int getAbsoluteY() {
158 return absoluteY;
159 }
160
161 /**
162 * Set absoluteY.
163 *
164 * @param absoluteY the new value
165 */
166 public void setAbsoluteY(final int absoluteY) {
167 this.absoluteY = absoluteY;
168 }
169
170 /**
171 * Mouse button 1 (left button).
172 */
173 private boolean mouse1;
174
175 /**
176 * Get mouse1.
177 *
178 * @return mouse1
179 */
180 public boolean isMouse1() {
181 return mouse1;
182 }
183
184 /**
185 * Mouse button 2 (right button).
186 */
187 private boolean mouse2;
188
189 /**
190 * Get mouse2.
191 *
192 * @return mouse2
193 */
194 public boolean isMouse2() {
195 return mouse2;
196 }
197
198 /**
199 * Mouse button 3 (middle button).
200 */
201 private boolean mouse3;
202
203 /**
204 * Get mouse3.
205 *
206 * @return mouse3
207 */
208 public boolean isMouse3() {
209 return mouse3;
210 }
211
212 /**
213 * Mouse wheel UP (button 4).
214 */
215 private boolean mouseWheelUp;
216
217 /**
218 * Get mouseWheelUp.
219 *
220 * @return mouseWheelUp
221 */
222 public boolean isMouseWheelUp() {
223 return mouseWheelUp;
224 }
225
226 /**
227 * Mouse wheel DOWN (button 5).
228 */
229 private boolean mouseWheelDown;
230
231 /**
232 * Get mouseWheelDown.
233 *
234 * @return mouseWheelDown
235 */
236 public boolean isMouseWheelDown() {
237 return mouseWheelDown;
238 }
239
240 /**
241 * Public contructor.
242 *
243 * @param type the type of event, MOUSE_MOTION, MOUSE_DOWN, or MOUSE_UP
244 * @param x relative column
245 * @param y relative row
246 * @param absoluteX absolute column
247 * @param absoluteY absolute row
248 * @param mouse1 if true, left button is down
249 * @param mouse2 if true, right button is down
250 * @param mouse3 if true, middle button is down
251 * @param mouseWheelUp if true, mouse wheel (button 4) is down
252 * @param mouseWheelDown if true, mouse wheel (button 5) is down
253 */
254 public TMouseEvent(final Type type, final int x, final int y,
255 final int absoluteX, final int absoluteY,
256 final boolean mouse1, final boolean mouse2, final boolean mouse3,
257 final boolean mouseWheelUp, final boolean mouseWheelDown) {
258
259 this.type = type;
260 this.x = x;
261 this.y = y;
262 this.absoluteX = absoluteX;
263 this.absoluteY = absoluteY;
264 this.mouse1 = mouse1;
265 this.mouse2 = mouse2;
266 this.mouse3 = mouse3;
267 this.mouseWheelUp = mouseWheelUp;
268 this.mouseWheelDown = mouseWheelDown;
269 }
270
271 /**
272 * Create a duplicate instance.
273 *
274 * @return duplicate intance
275 */
276 public TMouseEvent dup() {
277 TMouseEvent mouse = new TMouseEvent(type, x, y, absoluteX, absoluteY,
278 mouse1, mouse2, mouse3, mouseWheelUp, mouseWheelDown);
279 return mouse;
280 }
281
282 /**
283 * Make human-readable description of this TMouseEvent.
284 *
285 * @return displayable String
286 */
287 @Override
288 public String toString() {
289 return String.format("Mouse: %s x %d y %d absoluteX %d absoluteY %d 1 %s 2 %s 3 %s DOWN %s UP %s",
290 type,
291 x, y,
292 absoluteX, absoluteY,
293 mouse1,
294 mouse2,
295 mouse3,
296 mouseWheelUp,
297 mouseWheelDown);
298 }
299
300 }