Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #ifndef INCLUDED_VCL_EVENT_HXX
21 : #define INCLUDED_VCL_EVENT_HXX
22 :
23 : #include <tools/solar.h>
24 : #include <vcl/dllapi.h>
25 : #include <tools/gen.hxx>
26 : #include <vcl/keycod.hxx>
27 : #include <vcl/cmdevt.hxx>
28 :
29 : class AllSettings;
30 : class OutputDevice;
31 : namespace vcl { class Window; }
32 : struct IDataObject;
33 :
34 : namespace com { namespace sun { namespace star { namespace awt {
35 : struct KeyEvent;
36 : struct MouseEvent;
37 : } } } }
38 :
39 : enum TextDirectionality {
40 : TextDirectionality_LeftToRight_TopToBottom,
41 : TextDirectionality_RightToLeft_TopToBottom,
42 : TextDirectionality_TopToBottom_RightToLeft
43 : };
44 :
45 2 : class VCL_DLLPUBLIC KeyEvent
46 : {
47 : private:
48 : vcl::KeyCode maKeyCode;
49 : sal_uInt16 mnRepeat;
50 : sal_Unicode mnCharCode;
51 :
52 : public:
53 : KeyEvent();
54 : KeyEvent( sal_Unicode nChar, const vcl::KeyCode& rKeyCode,
55 : sal_uInt16 nRepeat = 0 );
56 :
57 2 : sal_Unicode GetCharCode() const { return mnCharCode; }
58 2 : const vcl::KeyCode& GetKeyCode() const { return maKeyCode; }
59 0 : sal_uInt16 GetRepeat() const { return mnRepeat; }
60 :
61 : KeyEvent LogicalTextDirectionality (TextDirectionality eMode) const;
62 : KeyEvent (const KeyEvent& rKeyEvent);
63 :
64 : };
65 :
66 2 : inline KeyEvent::KeyEvent()
67 : {
68 2 : mnCharCode = 0;
69 2 : mnRepeat = 0;
70 2 : }
71 :
72 2 : inline KeyEvent::KeyEvent( sal_Unicode nChar, const vcl::KeyCode& rKeyCode,
73 : sal_uInt16 nRepeat ) :
74 2 : maKeyCode( rKeyCode )
75 :
76 : {
77 2 : mnCharCode = nChar;
78 2 : mnRepeat = nRepeat;
79 2 : }
80 :
81 :
82 : // - MouseEvent-Types -
83 :
84 :
85 : // Maus-Move-Modi
86 : #define MOUSE_SIMPLEMOVE ((sal_uInt16)0x0001)
87 : #define MOUSE_DRAGMOVE ((sal_uInt16)0x0002)
88 : #define MOUSE_DRAGCOPY ((sal_uInt16)0x0004)
89 : #define MOUSE_ENTERWINDOW ((sal_uInt16)0x0010)
90 : #define MOUSE_LEAVEWINDOW ((sal_uInt16)0x0020)
91 : #define MOUSE_SYNTHETIC ((sal_uInt16)0x0040)
92 : #define MOUSE_MODIFIERCHANGED ((sal_uInt16)0x0080)
93 :
94 : // Maus-Button-Down/Up-Modi
95 : #define MOUSE_SIMPLECLICK ((sal_uInt16)0x0001)
96 : #define MOUSE_SELECT ((sal_uInt16)0x0002)
97 : #define MOUSE_MULTISELECT ((sal_uInt16)0x0004)
98 : #define MOUSE_RANGESELECT ((sal_uInt16)0x0008)
99 :
100 : // Maus-Buttons
101 : #define MOUSE_LEFT ((sal_uInt16)0x0001)
102 : #define MOUSE_MIDDLE ((sal_uInt16)0x0002)
103 : #define MOUSE_RIGHT ((sal_uInt16)0x0004)
104 :
105 :
106 : // - MouseEvent -
107 :
108 :
109 : class VCL_DLLPUBLIC MouseEvent
110 : {
111 : private:
112 : Point maPos;
113 : sal_uInt16 mnMode;
114 : sal_uInt16 mnClicks;
115 : sal_uInt16 mnCode;
116 :
117 : public:
118 : explicit MouseEvent();
119 : explicit MouseEvent( const Point& rPos, sal_uInt16 nClicks = 1,
120 : sal_uInt16 nMode = 0, sal_uInt16 nButtons = 0,
121 : sal_uInt16 nModifier = 0 );
122 :
123 0 : const Point& GetPosPixel() const { return maPos; }
124 0 : sal_uInt16 GetMode() const { return mnMode; }
125 : /** inits this vcl KeyEvent with all settings from the given awt event **/
126 : MouseEvent( const ::com::sun::star::awt::MouseEvent& rEvent );
127 :
128 0 : sal_uInt16 GetClicks() const { return mnClicks; }
129 :
130 0 : bool IsEnterWindow() const
131 0 : { return ((mnMode & MOUSE_ENTERWINDOW) != 0); }
132 0 : bool IsLeaveWindow() const
133 0 : { return ((mnMode & MOUSE_LEAVEWINDOW) != 0); }
134 0 : bool IsSynthetic() const
135 0 : { return ((mnMode & MOUSE_SYNTHETIC) != 0); }
136 0 : bool IsModifierChanged() const
137 0 : { return ((mnMode & MOUSE_MODIFIERCHANGED) != 0); }
138 :
139 0 : sal_uInt16 GetButtons() const
140 0 : { return (mnCode & (MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT)); }
141 0 : bool IsLeft() const
142 0 : { return ((mnCode & MOUSE_LEFT) != 0); }
143 0 : bool IsMiddle() const
144 0 : { return ((mnCode & MOUSE_MIDDLE) != 0); }
145 0 : bool IsRight() const
146 0 : { return ((mnCode & MOUSE_RIGHT) != 0); }
147 :
148 0 : sal_uInt16 GetModifier() const
149 0 : { return (mnCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2)); }
150 0 : bool IsShift() const
151 0 : { return ((mnCode & KEY_SHIFT) != 0); }
152 0 : bool IsMod1() const
153 0 : { return ((mnCode & KEY_MOD1) != 0); }
154 0 : bool IsMod2() const
155 0 : { return ((mnCode & KEY_MOD2) != 0); }
156 0 : bool IsMod3() const
157 0 : { return ((mnCode & KEY_MOD3) != 0); }
158 : };
159 :
160 60744 : inline MouseEvent::MouseEvent()
161 : {
162 60744 : mnMode = 0;
163 60744 : mnClicks = 0;
164 60744 : mnCode = 0;
165 60744 : }
166 :
167 0 : inline MouseEvent::MouseEvent( const Point& rPos, sal_uInt16 nClicks,
168 : sal_uInt16 nMode,
169 : sal_uInt16 nButtons, sal_uInt16 nModifier ) :
170 0 : maPos( rPos )
171 : {
172 0 : mnClicks = nClicks;
173 0 : mnMode = nMode;
174 0 : mnCode = nButtons | nModifier;
175 0 : }
176 :
177 : class VCL_DLLPUBLIC ZoomEvent
178 : {
179 : private:
180 : Point maCenter;
181 : float mfScale;
182 :
183 : public:
184 0 : ZoomEvent() :
185 0 : mfScale( 1 )
186 : {
187 0 : }
188 :
189 : ZoomEvent( const Point& rCenter,
190 : float fScale ) :
191 : maCenter( rCenter ),
192 : mfScale( fScale )
193 : {
194 : }
195 :
196 0 : const Point& GetCenter() const
197 : {
198 0 : return maCenter;
199 : }
200 :
201 0 : float GetScale() const
202 : {
203 0 : return mfScale;
204 : }
205 : };
206 :
207 : class VCL_DLLPUBLIC ScrollEvent
208 : {
209 : private:
210 : int mnXOffset;
211 : int mnYOffset;
212 :
213 : public:
214 0 : ScrollEvent() :
215 : mnXOffset( 0 ),
216 0 : mnYOffset( 0 )
217 : {
218 0 : }
219 :
220 : ScrollEvent( int xOffset, int yOffset ) :
221 : mnXOffset( xOffset ),
222 : mnYOffset( yOffset )
223 : {
224 : }
225 :
226 0 : int GetXOffset() const
227 : {
228 0 : return mnXOffset;
229 : }
230 :
231 0 : int GetYOffset() const
232 : {
233 0 : return mnYOffset;
234 : }
235 : };
236 :
237 :
238 : // - HelpEvent -
239 :
240 :
241 : #define HELPMODE_CONTEXT ((sal_uInt16)0x0001)
242 : #define HELPMODE_EXTENDED ((sal_uInt16)0x0002)
243 : #define HELPMODE_BALLOON ((sal_uInt16)0x0004)
244 : #define HELPMODE_QUICK ((sal_uInt16)0x0008)
245 :
246 : class VCL_DLLPUBLIC HelpEvent
247 : {
248 : private:
249 : Point maPos;
250 : sal_uInt16 mnMode;
251 : bool mbKeyboardActivated;
252 :
253 : public:
254 : explicit HelpEvent();
255 : explicit HelpEvent( sal_uInt16 nHelpMode );
256 : explicit HelpEvent( const Point& rMousePos, sal_uInt16 nHelpMode );
257 :
258 0 : const Point& GetMousePosPixel() const { return maPos; }
259 0 : sal_uInt16 GetMode() const { return mnMode; }
260 0 : bool KeyboardActivated() const { return mbKeyboardActivated; }
261 0 : void SetKeyboardActivated( bool bKeyboard ) { mbKeyboardActivated = bKeyboard; }
262 : };
263 :
264 : inline HelpEvent::HelpEvent()
265 : {
266 : mnMode = HELPMODE_CONTEXT;
267 : mbKeyboardActivated = true;
268 : }
269 :
270 0 : inline HelpEvent::HelpEvent( const Point& rMousePos, sal_uInt16 nHelpMode ) :
271 0 : maPos( rMousePos )
272 : {
273 0 : mnMode = nHelpMode;
274 0 : mbKeyboardActivated = false;
275 0 : }
276 :
277 : inline HelpEvent::HelpEvent( sal_uInt16 nHelpMode )
278 : {
279 : mnMode = nHelpMode;
280 : mbKeyboardActivated = true;
281 : }
282 :
283 :
284 : // - UserDrawEvent -
285 :
286 :
287 : class VCL_DLLPUBLIC UserDrawEvent
288 : {
289 : private:
290 : OutputDevice* mpOutDev;
291 : Rectangle maOutRect;
292 : sal_uInt16 mnItemId;
293 : sal_uInt16 mnStyle;
294 :
295 : public:
296 : UserDrawEvent();
297 : UserDrawEvent( OutputDevice* pOut,
298 : const Rectangle& rOutRect,
299 : sal_uInt16 nId, sal_uInt16 nStyle = 0 );
300 :
301 54014 : OutputDevice* GetDevice() const { return mpOutDev; }
302 67266 : const Rectangle& GetRect() const { return maOutRect; }
303 21708 : sal_uInt16 GetItemId() const { return mnItemId; }
304 13772 : sal_uInt16 GetStyle() const { return mnStyle; }
305 : };
306 :
307 : inline UserDrawEvent::UserDrawEvent()
308 : {
309 : mpOutDev = NULL;
310 : mnItemId = 0;
311 : mnStyle = 0;
312 : }
313 :
314 43786 : inline UserDrawEvent::UserDrawEvent( OutputDevice* pOut,
315 : const Rectangle& rOutRect,
316 : sal_uInt16 nId, sal_uInt16 nStyle ) :
317 43786 : maOutRect( rOutRect )
318 : {
319 43786 : mpOutDev = pOut;
320 43786 : mnItemId = nId;
321 43786 : mnStyle = nStyle;
322 43786 : }
323 :
324 :
325 : // - Tracking-Types -
326 :
327 :
328 : #define ENDTRACK_CANCEL ((sal_uInt16)0x0001)
329 : #define ENDTRACK_KEY ((sal_uInt16)0x0002)
330 : #define ENDTRACK_FOCUS ((sal_uInt16)0x0004)
331 : #define ENDTRACK_END ((sal_uInt16)0x1000)
332 : #define ENDTRACK_DONTCALLHDL ((sal_uInt16)0x8000)
333 :
334 : #define TRACKING_REPEAT ((sal_uInt16)0x0100)
335 :
336 :
337 : // - TrackingEvent -
338 :
339 :
340 : class VCL_DLLPUBLIC TrackingEvent
341 : {
342 : private:
343 : MouseEvent maMEvt;
344 : sal_uInt16 mnFlags;
345 :
346 : public:
347 : explicit TrackingEvent();
348 : explicit TrackingEvent( const MouseEvent&,
349 : sal_uInt16 nTrackFlags = 0 );
350 :
351 0 : const MouseEvent& GetMouseEvent() const { return maMEvt; }
352 :
353 0 : bool IsTrackingRepeat() const
354 0 : { return ((mnFlags & TRACKING_REPEAT) != 0); }
355 :
356 0 : bool IsTrackingEnded() const
357 0 : { return ((mnFlags & ENDTRACK_END) != 0); }
358 0 : bool IsTrackingCanceled() const
359 0 : { return ((mnFlags & ENDTRACK_CANCEL) != 0); }
360 : sal_uInt16 GetTrackingFlags() const { return mnFlags; }
361 : };
362 :
363 : inline TrackingEvent::TrackingEvent()
364 : {
365 : mnFlags = 0;
366 : }
367 :
368 0 : inline TrackingEvent::TrackingEvent( const MouseEvent& rMEvt,
369 : sal_uInt16 nTrackFlags ) :
370 0 : maMEvt( rMEvt )
371 : {
372 0 : mnFlags = nTrackFlags;
373 0 : }
374 :
375 :
376 : // - NotifyEvent -
377 :
378 :
379 : #define EVENT_MOUSEBUTTONDOWN 1
380 : #define EVENT_MOUSEBUTTONUP 2
381 : #define EVENT_MOUSEMOVE 3
382 : #define EVENT_KEYINPUT 4
383 : #define EVENT_KEYUP 5
384 : #define EVENT_GETFOCUS 6
385 : #define EVENT_LOSEFOCUS 7
386 : #define EVENT_COMMAND 8
387 : #define EVENT_DESTROY 9
388 : #define EVENT_INPUTENABLE 10
389 : #define EVENT_INPUTDISABLE 11
390 : #define EVENT_EXECUTEDIALOG 100
391 : #define EVENT_ENDEXECUTEDIALOG 101
392 :
393 : class VCL_DLLPUBLIC NotifyEvent
394 : {
395 : private:
396 : vcl::Window* mpWindow;
397 : void* mpData;
398 : sal_uInt16 mnType;
399 : long mnRetValue;
400 :
401 : public:
402 : NotifyEvent();
403 : NotifyEvent( sal_uInt16 nType,
404 : vcl::Window* pWindow,
405 : const void* pEvent = NULL,
406 : long nRet = 0 );
407 :
408 4110734 : sal_uInt16 GetType() const { return mnType; }
409 311284 : vcl::Window* GetWindow() const { return mpWindow; }
410 0 : void* GetData() const { return mpData; }
411 :
412 : void SetReturnValue( long nRet ) { mnRetValue = nRet; }
413 : long GetReturnValue() const { return mnRetValue; }
414 :
415 : const KeyEvent* GetKeyEvent() const;
416 : const MouseEvent* GetMouseEvent() const;
417 : const CommandEvent* GetCommandEvent() const;
418 : };
419 :
420 : inline NotifyEvent::NotifyEvent()
421 : {
422 : mpWindow = NULL;
423 : mpData = NULL;
424 : mnType = 0;
425 : mnRetValue = 0;
426 : }
427 :
428 549958 : inline NotifyEvent::NotifyEvent( sal_uInt16 nType, vcl::Window* pWindow,
429 : const void* pEvent, long nRet )
430 : {
431 549958 : mpWindow = pWindow;
432 549958 : mpData = (void*)pEvent;
433 549958 : mnType = nType;
434 549958 : mnRetValue = nRet;
435 549958 : }
436 :
437 32 : inline const KeyEvent* NotifyEvent::GetKeyEvent() const
438 : {
439 32 : if ( (mnType == EVENT_KEYINPUT) || (mnType == EVENT_KEYUP) )
440 0 : return (const KeyEvent*)mpData;
441 : else
442 32 : return NULL;
443 : }
444 :
445 0 : inline const MouseEvent* NotifyEvent::GetMouseEvent() const
446 : {
447 0 : if ( (mnType >= EVENT_MOUSEBUTTONDOWN) && (mnType <= EVENT_MOUSEMOVE) )
448 0 : return (const MouseEvent*)mpData;
449 : else
450 0 : return NULL;
451 : }
452 :
453 0 : inline const CommandEvent* NotifyEvent::GetCommandEvent() const
454 : {
455 0 : if ( mnType == EVENT_COMMAND )
456 0 : return (const CommandEvent*)mpData;
457 : else
458 0 : return NULL;
459 : }
460 :
461 :
462 : // - DataChangedEvent -
463 :
464 :
465 : #define DATACHANGED_SETTINGS ((sal_uInt16)1)
466 : #define DATACHANGED_DISPLAY ((sal_uInt16)2)
467 : #define DATACHANGED_DATETIME ((sal_uInt16)3)
468 : #define DATACHANGED_FONTS ((sal_uInt16)4)
469 : #define DATACHANGED_PRINTER ((sal_uInt16)5)
470 : #define DATACHANGED_FONTSUBSTITUTION ((sal_uInt16)6)
471 : #define DATACHANGED_USER ((sal_uInt16)10000)
472 :
473 : class VCL_DLLPUBLIC DataChangedEvent
474 : {
475 : private:
476 : void* mpData;
477 : sal_uLong mnFlags;
478 : sal_uInt16 mnType;
479 :
480 : public:
481 : explicit DataChangedEvent();
482 : explicit DataChangedEvent( sal_uInt16 nType,
483 : const void* pData = NULL,
484 : sal_uLong nFlags = 0 );
485 :
486 35000 : sal_uInt16 GetType() const { return mnType; }
487 : void* GetData() const { return mpData; }
488 15804 : sal_uLong GetFlags() const { return mnFlags; }
489 :
490 : const AllSettings* GetOldSettings() const;
491 : };
492 :
493 : inline DataChangedEvent::DataChangedEvent()
494 : {
495 : mpData = NULL;
496 : mnFlags = 0;
497 : mnType = 0;
498 : }
499 :
500 15041 : inline DataChangedEvent::DataChangedEvent( sal_uInt16 nType,
501 : const void* pData,
502 : sal_uLong nChangeFlags )
503 : {
504 15041 : mpData = (void*)pData;
505 15041 : mnFlags = nChangeFlags;
506 15041 : mnType = nType;
507 15041 : }
508 :
509 84 : inline const AllSettings* DataChangedEvent::GetOldSettings() const
510 : {
511 84 : if ( mnType == DATACHANGED_SETTINGS )
512 84 : return (const AllSettings*)mpData;
513 : else
514 0 : return NULL;
515 : }
516 :
517 : #endif // INCLUDED_VCL_EVENT_HXX
518 :
519 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|