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 _SV_EVENT_HXX
21 : #define _SV_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 : 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 : // ------------
46 : // - KeyEvent -
47 : // ------------
48 0 : class VCL_DLLPUBLIC KeyEvent
49 : {
50 : private:
51 : KeyCode maKeyCode;
52 : sal_uInt16 mnRepeat;
53 : sal_Unicode mnCharCode;
54 :
55 : public:
56 : KeyEvent();
57 : KeyEvent( sal_Unicode nChar, const KeyCode& rKeyCode,
58 : sal_uInt16 nRepeat = 0 );
59 :
60 0 : sal_Unicode GetCharCode() const { return mnCharCode; }
61 0 : const KeyCode& GetKeyCode() const { return maKeyCode; }
62 0 : sal_uInt16 GetRepeat() const { return mnRepeat; }
63 :
64 : KeyEvent LogicalTextDirectionality (TextDirectionality eMode) const;
65 : KeyEvent (const KeyEvent& rKeyEvent);
66 :
67 : };
68 :
69 0 : inline KeyEvent::KeyEvent()
70 : {
71 0 : mnCharCode = 0;
72 0 : mnRepeat = 0;
73 0 : }
74 :
75 0 : inline KeyEvent::KeyEvent( sal_Unicode nChar, const KeyCode& rKeyCode,
76 : sal_uInt16 nRepeat ) :
77 0 : maKeyCode( rKeyCode )
78 :
79 : {
80 0 : mnCharCode = nChar;
81 0 : mnRepeat = nRepeat;
82 0 : }
83 :
84 : // --------------------
85 : // - MouseEvent-Types -
86 : // --------------------
87 :
88 : // Maus-Move-Modi
89 : #define MOUSE_SIMPLEMOVE ((sal_uInt16)0x0001)
90 : #define MOUSE_DRAGMOVE ((sal_uInt16)0x0002)
91 : #define MOUSE_DRAGCOPY ((sal_uInt16)0x0004)
92 : #define MOUSE_ENTERWINDOW ((sal_uInt16)0x0010)
93 : #define MOUSE_LEAVEWINDOW ((sal_uInt16)0x0020)
94 : #define MOUSE_SYNTHETIC ((sal_uInt16)0x0040)
95 : #define MOUSE_MODIFIERCHANGED ((sal_uInt16)0x0080)
96 :
97 : // Maus-Button-Down/Up-Modi
98 : #define MOUSE_SIMPLECLICK ((sal_uInt16)0x0001)
99 : #define MOUSE_SELECT ((sal_uInt16)0x0002)
100 : #define MOUSE_MULTISELECT ((sal_uInt16)0x0004)
101 : #define MOUSE_RANGESELECT ((sal_uInt16)0x0008)
102 :
103 : // Maus-Buttons
104 : #define MOUSE_LEFT ((sal_uInt16)0x0001)
105 : #define MOUSE_MIDDLE ((sal_uInt16)0x0002)
106 : #define MOUSE_RIGHT ((sal_uInt16)0x0004)
107 :
108 : // --------------
109 : // - MouseEvent -
110 : // --------------
111 :
112 : class VCL_DLLPUBLIC MouseEvent
113 : {
114 : private:
115 : Point maPos;
116 : sal_uInt16 mnMode;
117 : sal_uInt16 mnClicks;
118 : sal_uInt16 mnCode;
119 :
120 : public:
121 : MouseEvent();
122 : MouseEvent( const Point& rPos, sal_uInt16 nClicks = 1,
123 : sal_uInt16 nMode = 0, sal_uInt16 nButtons = 0,
124 : sal_uInt16 nModifier = 0 );
125 :
126 0 : const Point& GetPosPixel() const { return maPos; }
127 0 : sal_uInt16 GetMode() const { return mnMode; }
128 : /** inits this vcl KeyEvent with all settings from the given awt event **/
129 : MouseEvent( const ::com::sun::star::awt::MouseEvent& rEvent );
130 :
131 0 : sal_uInt16 GetClicks() const { return mnClicks; }
132 :
133 0 : sal_Bool IsEnterWindow() const
134 0 : { return ((mnMode & MOUSE_ENTERWINDOW) != 0); }
135 0 : sal_Bool IsLeaveWindow() const
136 0 : { return ((mnMode & MOUSE_LEAVEWINDOW) != 0); }
137 0 : sal_Bool IsSynthetic() const
138 0 : { return ((mnMode & MOUSE_SYNTHETIC) != 0); }
139 0 : sal_Bool IsModifierChanged() const
140 0 : { return ((mnMode & MOUSE_MODIFIERCHANGED) != 0); }
141 :
142 0 : sal_uInt16 GetButtons() const
143 0 : { return (mnCode & (MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT)); }
144 0 : sal_Bool IsLeft() const
145 0 : { return ((mnCode & MOUSE_LEFT) != 0); }
146 0 : sal_Bool IsMiddle() const
147 0 : { return ((mnCode & MOUSE_MIDDLE) != 0); }
148 0 : sal_Bool IsRight() const
149 0 : { return ((mnCode & MOUSE_RIGHT) != 0); }
150 :
151 0 : sal_uInt16 GetModifier() const
152 0 : { return (mnCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2)); }
153 0 : bool IsShift() const
154 0 : { return ((mnCode & KEY_SHIFT) != 0); }
155 0 : sal_Bool IsMod1() const
156 0 : { return ((mnCode & KEY_MOD1) != 0); }
157 0 : sal_Bool IsMod2() const
158 0 : { return ((mnCode & KEY_MOD2) != 0); }
159 0 : sal_Bool IsMod3() const
160 0 : { return ((mnCode & KEY_MOD3) != 0); }
161 : };
162 :
163 4570 : inline MouseEvent::MouseEvent()
164 : {
165 4570 : mnMode = 0;
166 4570 : mnClicks = 0;
167 4570 : mnCode = 0;
168 4570 : }
169 :
170 0 : inline MouseEvent::MouseEvent( const Point& rPos, sal_uInt16 nClicks,
171 : sal_uInt16 nMode,
172 : sal_uInt16 nButtons, sal_uInt16 nModifier ) :
173 0 : maPos( rPos )
174 : {
175 0 : mnClicks = nClicks;
176 0 : mnMode = nMode;
177 0 : mnCode = nButtons | nModifier;
178 0 : }
179 :
180 : // -------------
181 : // - HelpEvent -
182 : // -------------
183 :
184 : #define HELPMODE_CONTEXT ((sal_uInt16)0x0001)
185 : #define HELPMODE_EXTENDED ((sal_uInt16)0x0002)
186 : #define HELPMODE_BALLOON ((sal_uInt16)0x0004)
187 : #define HELPMODE_QUICK ((sal_uInt16)0x0008)
188 :
189 : class VCL_DLLPUBLIC HelpEvent
190 : {
191 : private:
192 : Point maPos;
193 : sal_uInt16 mnMode;
194 : sal_Bool mbKeyboardActivated;
195 :
196 : public:
197 : HelpEvent();
198 : HelpEvent( sal_uInt16 nHelpMode );
199 : HelpEvent( const Point& rMousePos, sal_uInt16 nHelpMode );
200 :
201 : const Point& GetMousePosPixel() const;
202 0 : sal_uInt16 GetMode() const { return mnMode; }
203 0 : sal_Bool KeyboardActivated() const { return mbKeyboardActivated; }
204 0 : void SetKeyboardActivated( sal_Bool bKeyboard ) { mbKeyboardActivated = bKeyboard; }
205 : };
206 :
207 : inline HelpEvent::HelpEvent()
208 : {
209 : mnMode = HELPMODE_CONTEXT;
210 : mbKeyboardActivated = sal_True;
211 : }
212 :
213 0 : inline HelpEvent::HelpEvent( const Point& rMousePos, sal_uInt16 nHelpMode ) :
214 0 : maPos( rMousePos )
215 : {
216 0 : mnMode = nHelpMode;
217 0 : mbKeyboardActivated = sal_False;
218 0 : }
219 :
220 : inline HelpEvent::HelpEvent( sal_uInt16 nHelpMode )
221 : {
222 : mnMode = nHelpMode;
223 : mbKeyboardActivated = sal_True;
224 : }
225 :
226 : // -----------------
227 : // - UserDrawEvent -
228 : // -----------------
229 :
230 : class VCL_DLLPUBLIC UserDrawEvent
231 : {
232 : private:
233 : OutputDevice* mpOutDev;
234 : Rectangle maOutRect;
235 : sal_uInt16 mnItemId;
236 : sal_uInt16 mnStyle;
237 :
238 : public:
239 : UserDrawEvent();
240 : UserDrawEvent( OutputDevice* pOut,
241 : const Rectangle& rOutRect,
242 : sal_uInt16 nId, sal_uInt16 nStyle = 0 );
243 :
244 0 : OutputDevice* GetDevice() const { return mpOutDev; }
245 0 : const Rectangle& GetRect() const { return maOutRect; }
246 0 : sal_uInt16 GetItemId() const { return mnItemId; }
247 0 : sal_uInt16 GetStyle() const { return mnStyle; }
248 : };
249 :
250 : inline UserDrawEvent::UserDrawEvent()
251 : {
252 : mpOutDev = NULL;
253 : mnItemId = 0;
254 : mnStyle = 0;
255 : }
256 :
257 1265 : inline UserDrawEvent::UserDrawEvent( OutputDevice* pOut,
258 : const Rectangle& rOutRect,
259 : sal_uInt16 nId, sal_uInt16 nStyle ) :
260 1265 : maOutRect( rOutRect )
261 : {
262 1265 : mpOutDev = pOut;
263 1265 : mnItemId = nId;
264 1265 : mnStyle = nStyle;
265 1265 : }
266 :
267 : // ------------------
268 : // - Tracking-Types -
269 : // ------------------
270 :
271 : #define ENDTRACK_CANCEL ((sal_uInt16)0x0001)
272 : #define ENDTRACK_KEY ((sal_uInt16)0x0002)
273 : #define ENDTRACK_FOCUS ((sal_uInt16)0x0004)
274 : #define ENDTRACK_END ((sal_uInt16)0x1000)
275 : #define ENDTRACK_DONTCALLHDL ((sal_uInt16)0x8000)
276 :
277 : #define TRACKING_REPEAT ((sal_uInt16)0x0100)
278 :
279 : // -----------------
280 : // - TrackingEvent -
281 : // -----------------
282 :
283 : class VCL_DLLPUBLIC TrackingEvent
284 : {
285 : private:
286 : MouseEvent maMEvt;
287 : sal_uInt16 mnFlags;
288 :
289 : public:
290 : TrackingEvent();
291 : TrackingEvent( const MouseEvent& rMEvt,
292 : sal_uInt16 nTrackFlags = 0 );
293 :
294 0 : const MouseEvent& GetMouseEvent() const { return maMEvt; }
295 :
296 0 : sal_Bool IsTrackingRepeat() const
297 0 : { return ((mnFlags & TRACKING_REPEAT) != 0); }
298 :
299 0 : sal_Bool IsTrackingEnded() const
300 0 : { return ((mnFlags & ENDTRACK_END) != 0); }
301 0 : sal_Bool IsTrackingCanceled() const
302 0 : { return ((mnFlags & ENDTRACK_CANCEL) != 0); }
303 : sal_uInt16 GetTrackingFlags() const { return mnFlags; }
304 : };
305 :
306 : inline TrackingEvent::TrackingEvent()
307 : {
308 : mnFlags = 0;
309 : }
310 :
311 0 : inline TrackingEvent::TrackingEvent( const MouseEvent& rMEvt,
312 : sal_uInt16 nTrackFlags ) :
313 0 : maMEvt( rMEvt )
314 : {
315 0 : mnFlags = nTrackFlags;
316 0 : }
317 :
318 : // ---------------
319 : // - NotifyEvent -
320 : // ---------------
321 :
322 : #define EVENT_MOUSEBUTTONDOWN 1
323 : #define EVENT_MOUSEBUTTONUP 2
324 : #define EVENT_MOUSEMOVE 3
325 : #define EVENT_KEYINPUT 4
326 : #define EVENT_KEYUP 5
327 : #define EVENT_GETFOCUS 6
328 : #define EVENT_LOSEFOCUS 7
329 : #define EVENT_COMMAND 8
330 : #define EVENT_DESTROY 9
331 : #define EVENT_INPUTENABLE 10
332 : #define EVENT_INPUTDISABLE 11
333 : #define EVENT_EXECUTEDIALOG 100
334 : #define EVENT_ENDEXECUTEDIALOG 101
335 :
336 : class VCL_DLLPUBLIC NotifyEvent
337 : {
338 : private:
339 : Window* mpWindow;
340 : void* mpData;
341 : sal_uInt16 mnType;
342 : long mnRetValue;
343 :
344 : public:
345 : NotifyEvent();
346 : NotifyEvent( sal_uInt16 nType,
347 : Window* pWindow,
348 : const void* pEvent = NULL,
349 : long nRet = 0 );
350 :
351 15429 : sal_uInt16 GetType() const { return mnType; }
352 5970 : Window* GetWindow() const { return mpWindow; }
353 0 : void* GetData() const { return mpData; }
354 :
355 : void SetReturnValue( long nRet ) { mnRetValue = nRet; }
356 : long GetReturnValue() const { return mnRetValue; }
357 :
358 : const KeyEvent* GetKeyEvent() const;
359 : const MouseEvent* GetMouseEvent() const;
360 : const CommandEvent* GetCommandEvent() const;
361 : };
362 :
363 : inline NotifyEvent::NotifyEvent()
364 : {
365 : mpWindow = NULL;
366 : mpData = NULL;
367 : mnType = 0;
368 : mnRetValue = 0;
369 : }
370 :
371 5040 : inline NotifyEvent::NotifyEvent( sal_uInt16 nType, Window* pWindow,
372 : const void* pEvent, long nRet )
373 : {
374 5040 : mpWindow = pWindow;
375 5040 : mpData = (void*)pEvent;
376 5040 : mnType = nType;
377 5040 : mnRetValue = nRet;
378 5040 : }
379 :
380 0 : inline const KeyEvent* NotifyEvent::GetKeyEvent() const
381 : {
382 0 : if ( (mnType == EVENT_KEYINPUT) || (mnType == EVENT_KEYUP) )
383 0 : return (const KeyEvent*)mpData;
384 : else
385 0 : return NULL;
386 : }
387 :
388 0 : inline const MouseEvent* NotifyEvent::GetMouseEvent() const
389 : {
390 0 : if ( (mnType >= EVENT_MOUSEBUTTONDOWN) && (mnType <= EVENT_MOUSEMOVE) )
391 0 : return (const MouseEvent*)mpData;
392 : else
393 0 : return NULL;
394 : }
395 :
396 0 : inline const CommandEvent* NotifyEvent::GetCommandEvent() const
397 : {
398 0 : if ( mnType == EVENT_COMMAND )
399 0 : return (const CommandEvent*)mpData;
400 : else
401 0 : return NULL;
402 : }
403 :
404 : // --------------------
405 : // - DataChangedEvent -
406 : // --------------------
407 :
408 : #define DATACHANGED_SETTINGS ((sal_uInt16)1)
409 : #define DATACHANGED_DISPLAY ((sal_uInt16)2)
410 : #define DATACHANGED_DATETIME ((sal_uInt16)3)
411 : #define DATACHANGED_FONTS ((sal_uInt16)4)
412 : #define DATACHANGED_PRINTER ((sal_uInt16)5)
413 : #define DATACHANGED_FONTSUBSTITUTION ((sal_uInt16)6)
414 : #define DATACHANGED_USER ((sal_uInt16)10000)
415 :
416 : class VCL_DLLPUBLIC DataChangedEvent
417 : {
418 : private:
419 : void* mpData;
420 : sal_uLong mnFlags;
421 : sal_uInt16 mnType;
422 :
423 : public:
424 : DataChangedEvent();
425 : DataChangedEvent( sal_uInt16 nType,
426 : const void* pData = NULL,
427 : sal_uLong nFlags = 0 );
428 :
429 9040 : sal_uInt16 GetType() const { return mnType; }
430 0 : void* GetData() const { return mpData; }
431 5152 : sal_uLong GetFlags() const { return mnFlags; }
432 :
433 : const AllSettings* GetOldSettings() const;
434 : };
435 :
436 : inline DataChangedEvent::DataChangedEvent()
437 : {
438 : mpData = NULL;
439 : mnFlags = 0;
440 : mnType = 0;
441 : }
442 :
443 4120 : inline DataChangedEvent::DataChangedEvent( sal_uInt16 nType,
444 : const void* pData,
445 : sal_uLong nChangeFlags )
446 : {
447 4120 : mpData = (void*)pData;
448 4120 : mnFlags = nChangeFlags;
449 4120 : mnType = nType;
450 4120 : }
451 :
452 0 : inline const AllSettings* DataChangedEvent::GetOldSettings() const
453 : {
454 0 : if ( mnType == DATACHANGED_SETTINGS )
455 0 : return (const AllSettings*)mpData;
456 : else
457 0 : return NULL;
458 : }
459 :
460 : #endif // _SV_EVENT_HXX
461 :
462 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|