Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #ifndef _SV_WINDOW_HXX
30 : : #define _SV_WINDOW_HXX
31 : :
32 : : #include <tools/solar.h>
33 : : #include <vcl/dllapi.h>
34 : : #include <vcl/outdev.hxx>
35 : : #include <tools/resid.hxx>
36 : : #include <vcl/pointr.hxx>
37 : : #include <tools/wintypes.hxx>
38 : : #include <vcl/apptypes.hxx>
39 : : #include <vcl/inputctx.hxx>
40 : : #include <vcl/vclevent.hxx>
41 : : // Only for compatibility - because many people outside haven't included event.hxx
42 : : #include <vcl/event.hxx>
43 : : #include <vcl/region.hxx>
44 : : #include <vcl/salnativewidgets.hxx>
45 : : #include <rtl/ustring.hxx>
46 : : #include <cppuhelper/weakref.hxx>
47 : : #include <com/sun/star/uno/Reference.hxx>
48 : : #include <boost/shared_ptr.hpp>
49 : :
50 : : class VirtualDevice;
51 : : struct ImplDelData;
52 : : struct ImplWinData;
53 : : struct ImplOverlapData;
54 : : struct ImplFrameData;
55 : : struct ImplCalcToTopData;
56 : : struct SystemEnvData;
57 : : struct SystemParentData;
58 : : class ImplBorderWindow;
59 : : class VirtualDevice;
60 : : class Timer;
61 : : class Cursor;
62 : : class DockingManager;
63 : : class ScrollBar;
64 : : class Bitmap;
65 : : class Image;
66 : : class MouseEvent;
67 : : class KeyEvent;
68 : : class CommandEvent;
69 : : class TrackingEvent;
70 : : class HelpEvent;
71 : : class DataChangedEvent;
72 : : class NotifyEvent;
73 : : class SystemWindow;
74 : : class SalFrame;
75 : : class SalObject;
76 : : class MenuFloatingWindow;
77 : : class UNOWindowData;
78 : : // Nur fuer ExecuteDrag:
79 : : struct IDataObject;
80 : : class VCLXWindow;
81 : : struct ImplAccessibleInfos;
82 : :
83 : : namespace com {
84 : : namespace sun {
85 : : namespace star {
86 : : namespace accessibility {
87 : : class XAccessible;
88 : : }}}}
89 : :
90 : : namespace com {
91 : : namespace sun {
92 : : namespace star {
93 : : namespace beans {
94 : : struct PropertyValue;
95 : : }}}}
96 : :
97 : : namespace com {
98 : : namespace sun {
99 : : namespace star {
100 : : namespace rendering {
101 : : class XCanvas;
102 : : class XSpriteCanvas;
103 : : }}}}
104 : :
105 : : namespace com {
106 : : namespace sun {
107 : : namespace star {
108 : : namespace awt {
109 : : class XWindowPeer;
110 : : class XWindow;
111 : : }
112 : : namespace uno {
113 : : class Any;
114 : : class XInterface;
115 : : }
116 : : namespace datatransfer {
117 : : namespace clipboard {
118 : : class XClipboard;
119 : : }
120 : :
121 : : namespace dnd {
122 : : class XDragGestureRecognizer;
123 : : class XDragSource;
124 : : class XDropTarget;
125 : : } } } } }
126 : :
127 : : namespace vcl {
128 : : struct ControlLayoutData;
129 : : class WindowArranger;
130 : : struct ExtWindowImpl;
131 : : }
132 : :
133 : : namespace svt { class PopupWindowControllerImpl; }
134 : :
135 : : // ---------------
136 : : // - WindowTypes -
137 : : // ---------------
138 : :
139 : : // Type fuer GetWindow()
140 : : #define WINDOW_PARENT ((sal_uInt16)0)
141 : : #define WINDOW_FIRSTCHILD ((sal_uInt16)1)
142 : : #define WINDOW_LASTCHILD ((sal_uInt16)2)
143 : : #define WINDOW_PREV ((sal_uInt16)3)
144 : : #define WINDOW_NEXT ((sal_uInt16)4)
145 : : #define WINDOW_FIRSTOVERLAP ((sal_uInt16)5)
146 : : #define WINDOW_LASTOVERLAP ((sal_uInt16)6)
147 : : #define WINDOW_OVERLAP ((sal_uInt16)7)
148 : : #define WINDOW_PARENTOVERLAP ((sal_uInt16)8)
149 : : #define WINDOW_CLIENT ((sal_uInt16)9)
150 : : #define WINDOW_REALPARENT ((sal_uInt16)10)
151 : : #define WINDOW_FRAME ((sal_uInt16)11)
152 : : #define WINDOW_BORDER ((sal_uInt16)12)
153 : : #define WINDOW_FIRSTTOPWINDOWCHILD ((sal_uInt16)13)
154 : : #define WINDOW_LASTTOPWINDOWCHILD ((sal_uInt16)14)
155 : : #define WINDOW_PREVTOPWINDOWSIBLING ((sal_uInt16)15)
156 : : #define WINDOW_NEXTTOPWINDOWSIBLING ((sal_uInt16)16)
157 : :
158 : : // Flags for SetPosSizePixel()
159 : : #define WINDOW_POSSIZE_X ((sal_uInt16)0x0001)
160 : : #define WINDOW_POSSIZE_Y ((sal_uInt16)0x0002)
161 : : #define WINDOW_POSSIZE_WIDTH ((sal_uInt16)0x0004)
162 : : #define WINDOW_POSSIZE_HEIGHT ((sal_uInt16)0x0008)
163 : : #define WINDOW_POSSIZE_POS (WINDOW_POSSIZE_X | WINDOW_POSSIZE_Y)
164 : : #define WINDOW_POSSIZE_SIZE (WINDOW_POSSIZE_WIDTH | WINDOW_POSSIZE_HEIGHT)
165 : : #define WINDOW_POSSIZE_POSSIZE (WINDOW_POSSIZE_POS | WINDOW_POSSIZE_SIZE)
166 : : #define WINDOW_POSSIZE_ALL (WINDOW_POSSIZE_POSSIZE)
167 : : #define WINDOW_POSSIZE_DROPDOWN ((sal_uInt16)0x0010)
168 : :
169 : : // Flags for Show()
170 : : #define SHOW_NOPARENTUPDATE ((sal_uInt16)0x0001)
171 : : #define SHOW_NOFOCUSCHANGE ((sal_uInt16)0x0002)
172 : : #define SHOW_NOACTIVATE ((sal_uInt16)0x0004)
173 : : #define SHOW_FOREGROUNDTASK ((sal_uInt16)0x0008)
174 : :
175 : : // Flags for SetZOrder()
176 : : #define WINDOW_ZORDER_BEFOR ((sal_uInt16)0x0001)
177 : : #define WINDOW_ZORDER_BEHIND ((sal_uInt16)0x0002)
178 : : #define WINDOW_ZORDER_FIRST ((sal_uInt16)0x0004)
179 : : #define WINDOW_ZORDER_LAST ((sal_uInt16)0x0008)
180 : :
181 : : // Activate-Flags
182 : : #define ACTIVATE_MODE_GRABFOCUS ((sal_uInt16)0x0001)
183 : :
184 : : // ToTop-Flags
185 : : #define TOTOP_RESTOREWHENMIN ((sal_uInt16)0x0001)
186 : : #define TOTOP_FOREGROUNDTASK ((sal_uInt16)0x0002)
187 : : #define TOTOP_NOGRABFOCUS ((sal_uInt16)0x0004)
188 : : #define TOTOP_GRABFOCUSONLY ((sal_uInt16)0x0008)
189 : :
190 : : // Flags for Invalidate
191 : : #define INVALIDATE_CHILDREN ((sal_uInt16)0x0001)
192 : : #define INVALIDATE_NOCHILDREN ((sal_uInt16)0x0002)
193 : : #define INVALIDATE_NOERASE ((sal_uInt16)0x0004)
194 : : #define INVALIDATE_UPDATE ((sal_uInt16)0x0008)
195 : : #define INVALIDATE_TRANSPARENT ((sal_uInt16)0x0010)
196 : : #define INVALIDATE_NOTRANSPARENT ((sal_uInt16)0x0020)
197 : : #define INVALIDATE_NOCLIPCHILDREN ((sal_uInt16)0x4000)
198 : : // Temporaer fuer Kompatibilitaet
199 : : #define INVALIDATE_BACKGROUND INVALIDATE_TRANSPARENT
200 : :
201 : : // Flags for Validate
202 : : #define VALIDATE_CHILDREN ((sal_uInt16)0x0001)
203 : : #define VALIDATE_NOCHILDREN ((sal_uInt16)0x0002)
204 : :
205 : : // Flags for Scroll
206 : : #define SCROLL_CLIP ((sal_uInt16)0x0001)
207 : : #define SCROLL_CHILDREN ((sal_uInt16)0x0002)
208 : : #define SCROLL_NOCHILDREN ((sal_uInt16)0x0004)
209 : : #define SCROLL_NOERASE ((sal_uInt16)0x0008)
210 : : #define SCROLL_NOINVALIDATE ((sal_uInt16)0x0010)
211 : : #define SCROLL_NOWINDOWINVALIDATE ((sal_uInt16)0x0020)
212 : : #define SCROLL_USECLIPREGION ((sal_uInt16)0x0040)
213 : : #define SCROLL_UPDATE ((sal_uInt16)0x0080)
214 : :
215 : : // Flags for ParentClipMode
216 : : #define PARENTCLIPMODE_CLIP ((sal_uInt16)0x0001)
217 : : #define PARENTCLIPMODE_NOCLIP ((sal_uInt16)0x0002)
218 : :
219 : : // Flags for Invert()
220 : : #define INVERT_HIGHLIGHT ((sal_uInt16)0x0001)
221 : : #define INVERT_50 ((sal_uInt16)0x0002)
222 : :
223 : : // Flags for ShowTracking()
224 : : #define SHOWTRACK_SMALL ((sal_uInt16)0x0001)
225 : : #define SHOWTRACK_BIG ((sal_uInt16)0x0002)
226 : : #define SHOWTRACK_SPLIT ((sal_uInt16)0x0003)
227 : : #define SHOWTRACK_OBJECT ((sal_uInt16)0x0004)
228 : : #define SHOWTRACK_WINDOW ((sal_uInt16)0x1000)
229 : : #define SHOWTRACK_CLIP ((sal_uInt16)0x2000)
230 : : #define SHOWTRACK_STYLE ((sal_uInt16)0x000F)
231 : :
232 : : // Flags for StartTracking()
233 : : #define STARTTRACK_KEYINPUT ((sal_uInt16)0x0001)
234 : : #define STARTTRACK_KEYMOD ((sal_uInt16)0x0002)
235 : : #define STARTTRACK_NOKEYCANCEL ((sal_uInt16)0x0004)
236 : : #define STARTTRACK_SCROLLREPEAT ((sal_uInt16)0x0008)
237 : : #define STARTTRACK_BUTTONREPEAT ((sal_uInt16)0x0010)
238 : : #define STARTTRACK_MOUSEBUTTONDOWN ((sal_uInt16)0x0020)
239 : : #define STARTTRACK_FOCUSCANCEL ((sal_uInt16)0x0040)
240 : :
241 : : // Flags for StartAutoScroll()
242 : : #define AUTOSCROLL_VERT ((sal_uInt16)0x0001)
243 : : #define AUTOSCROLL_HORZ ((sal_uInt16)0x0002)
244 : :
245 : : // Flags for StateChanged()
246 : : typedef sal_uInt16 StateChangedType;
247 : : #define STATE_CHANGE_INITSHOW ((StateChangedType)1)
248 : : #define STATE_CHANGE_VISIBLE ((StateChangedType)2)
249 : : #define STATE_CHANGE_UPDATEMODE ((StateChangedType)3)
250 : : #define STATE_CHANGE_ENABLE ((StateChangedType)4)
251 : : #define STATE_CHANGE_TEXT ((StateChangedType)5)
252 : : #define STATE_CHANGE_IMAGE ((StateChangedType)6)
253 : : #define STATE_CHANGE_DATA ((StateChangedType)7)
254 : : #define STATE_CHANGE_STATE ((StateChangedType)8)
255 : : #define STATE_CHANGE_STYLE ((StateChangedType)9)
256 : : #define STATE_CHANGE_ZOOM ((StateChangedType)10)
257 : : #define STATE_CHANGE_BORDER ((StateChangedType)11)
258 : : #define STATE_CHANGE_TRANSPARENT ((StateChangedType)12)
259 : : #define STATE_CHANGE_CONTROLFONT ((StateChangedType)13)
260 : : #define STATE_CHANGE_CONTROLFOREGROUND ((StateChangedType)14)
261 : : #define STATE_CHANGE_CONTROLBACKGROUND ((StateChangedType)15)
262 : : #define STATE_CHANGE_READONLY ((StateChangedType)16)
263 : : #define STATE_CHANGE_EXTENDEDSTYLE ((StateChangedType)17)
264 : : #define STATE_CHANGE_MIRRORING ((StateChangedType)18)
265 : : #define STATE_CHANGE_USER ((StateChangedType)10000)
266 : :
267 : : // GetFocusFlags
268 : : #define GETFOCUS_TAB ((sal_uInt16)0x0001)
269 : : #define GETFOCUS_CURSOR ((sal_uInt16)0x0002)
270 : : #define GETFOCUS_MNEMONIC ((sal_uInt16)0x0004)
271 : : #define GETFOCUS_FORWARD ((sal_uInt16)0x0010)
272 : : #define GETFOCUS_BACKWARD ((sal_uInt16)0x0020)
273 : : #define GETFOCUS_AROUND ((sal_uInt16)0x0040)
274 : : #define GETFOCUS_UNIQUEMNEMONIC ((sal_uInt16)0x0100)
275 : : #define GETFOCUS_INIT ((sal_uInt16)0x0200)
276 : : #define GETFOCUS_FLOATWIN_POPUPMODEEND_CANCEL ((sal_uInt16)0x0400)
277 : :
278 : : // Draw-Flags fuer Draw()
279 : : #define WINDOW_DRAW_MONO ((sal_uLong)0x00000001)
280 : : #define WINDOW_DRAW_NOBORDER ((sal_uLong)0x00000002)
281 : : #define WINDOW_DRAW_NOCONTROLS ((sal_uLong)0x00000004)
282 : : #define WINDOW_DRAW_NODISABLE ((sal_uLong)0x00000008)
283 : : #define WINDOW_DRAW_NOMNEMONIC ((sal_uLong)0x00000010)
284 : : #define WINDOW_DRAW_NOSELECTION ((sal_uLong)0x00000020)
285 : : #define WINDOW_DRAW_NOFOCUS ((sal_uLong)0x00000040)
286 : : #define WINDOW_DRAW_NOBACKGROUND ((sal_uLong)0x00000080)
287 : : #define WINDOW_DRAW_ROLLOVER ((sal_uLong)0x00000100)
288 : :
289 : : // Border-Styles fuer SetBorder()
290 : : #define WINDOW_BORDER_NORMAL ((sal_uInt16)0x0001)
291 : : #define WINDOW_BORDER_MONO ((sal_uInt16)0x0002)
292 : : #define WINDOW_BORDER_MENU ((sal_uInt16)0x0010)
293 : : #define WINDOW_BORDER_NWF ((sal_uInt16)0x0020)
294 : : #define WINDOW_BORDER_NOBORDER ((sal_uInt16)0x1000)
295 : : #define WINDOW_BORDER_REMOVEBORDER ((sal_uInt16)0x2000)
296 : :
297 : : // DialogControl-Flags
298 : : #define WINDOW_DLGCTRL_RETURN ((sal_uInt16)0x0001)
299 : : #define WINDOW_DLGCTRL_WANTFOCUS ((sal_uInt16)0x0002)
300 : : #define WINDOW_DLGCTRL_MOD1TAB ((sal_uInt16)0x0004)
301 : : #define WINDOW_DLGCTRL_FLOATWIN_POPUPMODEEND_CANCEL ((sal_uInt16)0x0008)
302 : :
303 : : // GetWindowClipRegionPixel-Flags
304 : : #define WINDOW_GETCLIPREGION_NULL ((sal_uInt16)0x0001)
305 : : #define WINDOW_GETCLIPREGION_NOCHILDREN ((sal_uInt16)0x0002)
306 : :
307 : : // EndExtTextInput-Flags
308 : : #define EXTTEXTINPUT_END_COMPLETE ((sal_uInt16)0x0001)
309 : : #define EXTTEXTINPUT_END_CANCEL ((sal_uInt16)0x0002)
310 : :
311 : : #define IMPL_MINSIZE_BUTTON_WIDTH 70
312 : : #define IMPL_MINSIZE_BUTTON_HEIGHT 22
313 : : #define IMPL_EXTRA_BUTTON_WIDTH 18
314 : : #define IMPL_EXTRA_BUTTON_HEIGHT 10
315 : : #define IMPL_SEP_BUTTON_X 5
316 : : #define IMPL_SEP_BUTTON_Y 5
317 : : #define IMPL_MINSIZE_MSGBOX_WIDTH 150
318 : : #define IMPL_MINSIZE_MSGBOX_HEIGHT 80
319 : : #define IMPL_DIALOG_OFFSET 5
320 : : #define IMPL_DIALOG_BAR_OFFSET 3
321 : : #define IMPL_MSGBOX_OFFSET_EXTRA_X 0
322 : : #define IMPL_MSGBOX_OFFSET_EXTRA_Y 2
323 : : #define IMPL_SEP_MSGBOX_IMAGE 8
324 : :
325 : : #define DLGWINDOW_PREV 0
326 : : #define DLGWINDOW_NEXT 1
327 : : #define DLGWINDOW_FIRST 2
328 : :
329 : : enum WindowSizeType {
330 : : WINDOWSIZE_MINIMUM,
331 : : WINDOWSIZE_PREFERRED,
332 : : WINDOWSIZE_MAXIMUM
333 : : };
334 : :
335 : : // ----------
336 : : // - Window -
337 : : // ----------
338 : :
339 : : #ifdef DBG_UTIL
340 : : const char* ImplDbgCheckWindow( const void* pObj );
341 : : #endif
342 : :
343 : : class BitmapEx; // FIXME: really the SetBackgroundBitmap belongs in a toplevel 'window'
344 : : class WindowImpl;
345 : : class VCL_DLLPUBLIC Window : public OutputDevice
346 : : {
347 : : friend class Cursor;
348 : : friend class OutputDevice;
349 : : friend class Application;
350 : : friend class SystemWindow;
351 : : friend class WorkWindow;
352 : : friend class Dialog;
353 : : friend class MessBox;
354 : : friend class DockingWindow;
355 : : friend class FloatingWindow;
356 : : friend class GroupBox;
357 : : friend class PushButton;
358 : : friend class RadioButton;
359 : : friend class SystemChildWindow;
360 : : friend class ImplBorderWindow;
361 : :
362 : : // TODO: improve missing functionality
363 : : // only required because of SetFloatingMode()
364 : : friend class ImplDockingWindowWrapper;
365 : : friend class ImplPopupFloatWin;
366 : : friend class MenuFloatingWindow;
367 : :
368 : : friend class svt::PopupWindowControllerImpl;
369 : :
370 : : private:
371 : : // NOTE: to remove many dependencies of other modules
372 : : // to this central file, all members are now hidden
373 : : // in the WindowImpl class and all inline functions
374 : : // were removed
375 : : //
376 : : // Please do *not* add new members or inline functions to class Window,
377 : : // but use class WindowImpl instead
378 : : //
379 : : WindowImpl* mpWindowImpl;
380 : :
381 : : SAL_DLLPRIVATE void ImplInitWindowData( WindowType nType );
382 : :
383 : : #ifdef DBG_UTIL
384 : : friend const char* ImplDbgCheckWindow( const void* pObj );
385 : : #endif
386 : : friend Window* ImplFindWindow( const SalFrame* pFrame, Point& rSalFramePos );
387 : : public:
388 : : SAL_DLLPRIVATE void ImplInit( Window* pParent, WinBits nStyle, SystemParentData* pSystemParentData );
389 : : SAL_DLLPRIVATE WinBits ImplInitRes( const ResId& rResId );
390 : : SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
391 : : SAL_DLLPRIVATE void ImplWindowRes( const ResId& rResId );
392 : : SAL_DLLPRIVATE void ImplSetFrameParent( const Window* pParent );
393 : : SAL_DLLPRIVATE void ImplInsertWindow( Window* pParent );
394 : : SAL_DLLPRIVATE void ImplRemoveWindow( sal_Bool bRemoveFrameData );
395 : : SAL_DLLPRIVATE Window* ImplGetWindow();
396 : : SAL_DLLPRIVATE ImplFrameData* ImplGetFrameData();
397 : : SalFrame* ImplGetFrame() const;
398 : : SAL_DLLPRIVATE ImplWinData* ImplGetWinData() const;
399 : : SAL_DLLPRIVATE SalGraphics* ImplGetFrameGraphics() const;
400 : : SAL_DLLPRIVATE void ImplCallFocusChangeActivate( Window* pNewOverlapWindow, Window* pOldOverlapWindow );
401 : : SAL_DLLPRIVATE Window* ImplFindWindow( const Point& rFramePos );
402 : : SAL_DLLPRIVATE sal_uInt16 ImplHitTest( const Point& rFramePos );
403 : : SAL_DLLPRIVATE Window* ImplGetParent() const;
404 : : SAL_DLLPRIVATE Window* ImplGetClientWindow() const;
405 : : SAL_DLLPRIVATE Window* ImplGetBorderWindow() const;
406 : : SAL_DLLPRIVATE Window* ImplGetFirstOverlapWindow();
407 : : SAL_DLLPRIVATE const Window* ImplGetFirstOverlapWindow() const;
408 : : SAL_DLLPRIVATE Window* ImplGetFrameWindow() const;
409 : : SAL_DLLPRIVATE sal_Bool ImplIsRealParentPath( const Window* pWindow ) const;
410 : : SAL_DLLPRIVATE sal_Bool ImplIsChild( const Window* pWindow, sal_Bool bSystemWindow = sal_False ) const;
411 : : SAL_DLLPRIVATE sal_Bool ImplIsWindowOrChild( const Window* pWindow, sal_Bool bSystemWindow = sal_False ) const;
412 : : SAL_DLLPRIVATE sal_Bool ImplIsDockingWindow() const;
413 : : SAL_DLLPRIVATE sal_Bool ImplIsFloatingWindow() const;
414 : : SAL_DLLPRIVATE sal_Bool ImplIsSplitter() const;
415 : : SAL_DLLPRIVATE sal_Bool ImplIsPushButton() const;
416 : : SAL_DLLPRIVATE sal_Bool ImplIsOverlapWindow() const;
417 : : SAL_DLLPRIVATE void ImplSetMouseTransparent( sal_Bool bTransparent );
418 : : SAL_DLLPRIVATE int ImplTestMousePointerSet();
419 : : SAL_DLLPRIVATE PointerStyle ImplGetMousePointer() const;
420 : : SAL_DLLPRIVATE void ImplResetReallyVisible();
421 : : SAL_DLLPRIVATE void ImplSetReallyVisible();
422 : : SAL_DLLPRIVATE void ImplCallInitShow();
423 : : SAL_DLLPRIVATE void ImplAddDel( ImplDelData* pDel );
424 : : SAL_DLLPRIVATE void ImplRemoveDel( ImplDelData* pDel );
425 : : SAL_DLLPRIVATE void ImplInitResolutionSettings();
426 : : SAL_DLLPRIVATE void ImplPointToLogic( Font& rFont ) const;
427 : : SAL_DLLPRIVATE void ImplLogicToPoint( Font& rFont ) const;
428 : : SAL_DLLPRIVATE Point ImplOutputToFrame( const Point& rPos );
429 : : SAL_DLLPRIVATE Point ImplFrameToOutput( const Point& rPos );
430 : : SAL_DLLPRIVATE sal_Bool ImplSysObjClip( const Region* pOldRegion );
431 : : SAL_DLLPRIVATE void ImplUpdateSysObjChildrenClip();
432 : : SAL_DLLPRIVATE void ImplUpdateSysObjOverlapsClip();
433 : : SAL_DLLPRIVATE void ImplUpdateSysObjClip();
434 : : SAL_DLLPRIVATE sal_Bool ImplSetClipFlagChildren( sal_Bool bSysObjOnlySmaller = sal_False );
435 : : SAL_DLLPRIVATE sal_Bool ImplSetClipFlagOverlapWindows( sal_Bool bSysObjOnlySmaller = sal_False );
436 : : SAL_DLLPRIVATE sal_Bool ImplSetClipFlag( sal_Bool bSysObjOnlySmaller = sal_False );
437 : : SAL_DLLPRIVATE void ImplIntersectWindowClipRegion( Region& rRegion );
438 : : SAL_DLLPRIVATE void ImplIntersectWindowRegion( Region& rRegion );
439 : : SAL_DLLPRIVATE void ImplExcludeWindowRegion( Region& rRegion );
440 : : SAL_DLLPRIVATE void ImplExcludeOverlapWindows( Region& rRegion );
441 : : SAL_DLLPRIVATE void ImplExcludeOverlapWindows2( Region& rRegion );
442 : : SAL_DLLPRIVATE void ImplClipBoundaries( Region& rRegion, sal_Bool bThis, sal_Bool bOverlaps );
443 : : SAL_DLLPRIVATE sal_Bool ImplClipChildren( Region& rRegion );
444 : : SAL_DLLPRIVATE void ImplClipAllChildren( Region& rRegion );
445 : : SAL_DLLPRIVATE void ImplClipSiblings( Region& rRegion );
446 : : SAL_DLLPRIVATE void ImplInitWinClipRegion();
447 : : SAL_DLLPRIVATE void ImplInitWinChildClipRegion();
448 : : SAL_DLLPRIVATE Region* ImplGetWinChildClipRegion();
449 : : SAL_DLLPRIVATE void ImplIntersectAndUnionOverlapWindows( const Region& rInterRegion, Region& rRegion );
450 : : SAL_DLLPRIVATE void ImplIntersectAndUnionOverlapWindows2( const Region& rInterRegion, Region& rRegion );
451 : : SAL_DLLPRIVATE void ImplCalcOverlapRegionOverlaps( const Region& rInterRegion, Region& rRegion );
452 : : SAL_DLLPRIVATE void ImplCalcOverlapRegion( const Rectangle& rSourceRect, Region& rRegion,
453 : : sal_Bool bChildren, sal_Bool bParent, sal_Bool bSiblings );
454 : : SAL_DLLPRIVATE void ImplCallPaint( const Region* pRegion, sal_uInt16 nPaintFlags );
455 : : SAL_DLLPRIVATE void ImplCallOverlapPaint();
456 : : SAL_DLLPRIVATE void ImplPostPaint();
457 : : SAL_DLLPRIVATE void ImplInvalidateFrameRegion( const Region* pRegion, sal_uInt16 nFlags );
458 : : SAL_DLLPRIVATE void ImplInvalidateOverlapFrameRegion( const Region& rRegion );
459 : : SAL_DLLPRIVATE void ImplInvalidateParentFrameRegion( Region& rRegion );
460 : : SAL_DLLPRIVATE void ImplInvalidate( const Region* rRegion, sal_uInt16 nFlags );
461 : : SAL_DLLPRIVATE void ImplValidateFrameRegion( const Region* rRegion, sal_uInt16 nFlags );
462 : : SAL_DLLPRIVATE void ImplValidate( const Region* rRegion, sal_uInt16 nFlags );
463 : : SAL_DLLPRIVATE void ImplMoveInvalidateRegion( const Rectangle& rRect, long nHorzScroll, long nVertScroll, sal_Bool bChildren );
464 : : SAL_DLLPRIVATE void ImplMoveAllInvalidateRegions( const Rectangle& rRect, long nHorzScroll, long nVertScroll, sal_Bool bChildren );
465 : : SAL_DLLPRIVATE void ImplScroll( const Rectangle& rRect, long nHorzScroll, long nVertScroll, sal_uInt16 nFlags );
466 : : SAL_DLLPRIVATE void ImplUpdateAll( sal_Bool bOverlapWindows = sal_True );
467 : : SAL_DLLPRIVATE void ImplUpdateWindowPtr( Window* pWindow );
468 : : SAL_DLLPRIVATE void ImplUpdateWindowPtr();
469 : : SAL_DLLPRIVATE void ImplUpdateOverlapWindowPtr( sal_Bool bNewFrame );
470 : : SAL_DLLPRIVATE sal_Bool ImplUpdatePos();
471 : : SAL_DLLPRIVATE void ImplUpdateSysObjPos();
472 : 227761 : SAL_DLLPRIVATE WindowImpl* ImplGetWindowImpl() const { return mpWindowImpl; }
473 : : SAL_DLLPRIVATE void ImplFreeExtWindowImpl();
474 : : // creates ExtWindowImpl on demand, but may return NULL (e.g. if mbInDtor)
475 : : SAL_DLLPRIVATE vcl::ExtWindowImpl* ImplGetExtWindowImpl() const;
476 : : SAL_DLLPRIVATE void ImplDeleteOwnedChildren();
477 : : /** check whether a font is suitable for UI
478 : :
479 : : The font to be tested will be checked whether it could display a
480 : : localized test string. If this is not the case, then the font
481 : : is deemed unsuitable as UI font.
482 : :
483 : : @param rFont
484 : : the font to be tested
485 : :
486 : : @returns
487 : : <TRUE/> if the font can be used as UI font
488 : : <FALSE/> if the font is unsuitable as UI font
489 : : */
490 : : SAL_DLLPRIVATE bool ImplCheckUIFont( const Font& rFont );
491 : : SAL_DLLPRIVATE void ImplUpdateGlobalSettings( AllSettings& rSettings, sal_Bool bCallHdl = sal_True );
492 : : SAL_DLLPRIVATE void ImplAlignChildren();
493 : : SAL_DLLPRIVATE void ImplPosSizeWindow( long nX, long nY, long nWidth, long nHeight, sal_uInt16 nFlags );
494 : : SAL_DLLPRIVATE void ImplToBottomChild();
495 : : SAL_DLLPRIVATE void ImplCalcToTop( ImplCalcToTopData* pPrevData );
496 : : SAL_DLLPRIVATE void ImplToTop( sal_uInt16 nFlags );
497 : : SAL_DLLPRIVATE void ImplStartToTop( sal_uInt16 nFlags );
498 : : SAL_DLLPRIVATE void ImplFocusToTop( sal_uInt16 nFlags, sal_Bool bReallyVisible );
499 : : SAL_DLLPRIVATE void ImplShowAllOverlaps();
500 : : SAL_DLLPRIVATE void ImplHideAllOverlaps();
501 : : SAL_DLLPRIVATE void ImplNotifyKeyMouseCommandEventListeners( NotifyEvent& rNEvt );
502 : : SAL_DLLPRIVATE void ImplCallMouseMove( sal_uInt16 nMouseCode, sal_Bool bModChanged = sal_False );
503 : : SAL_DLLPRIVATE void ImplGenerateMouseMove();
504 : : SAL_DLLPRIVATE void ImplGrabFocus( sal_uInt16 nFlags );
505 : : SAL_DLLPRIVATE void ImplInvertFocus( const Rectangle& rRect );
506 : : SAL_DLLPRIVATE void ImplControlFocus( sal_uInt16 nFlags = 0 );
507 : : SAL_DLLPRIVATE Window* ImplGetDlgWindow( sal_uInt16 n, sal_uInt16 nType, sal_uInt16 nStart = 0, sal_uInt16 nEnd = 0xFFFF, sal_uInt16* pIndex = NULL );
508 : : SAL_DLLPRIVATE sal_Bool ImplDlgCtrl( const KeyEvent& rKEvt, sal_Bool bKeyInput );
509 : : SAL_DLLPRIVATE sal_Bool ImplHasDlgCtrl();
510 : : SAL_DLLPRIVATE void ImplDlgCtrlNextWindow();
511 : : SAL_DLLPRIVATE void ImplDlgCtrlFocusChanged( Window* pWindow, sal_Bool bGetFocus );
512 : : SAL_DLLPRIVATE Window* ImplFindDlgCtrlWindow( Window* pWindow );
513 : : SAL_DLLPRIVATE long ImplLogicUnitToPixelX( long nX, MapUnit eUnit );
514 : : SAL_DLLPRIVATE long ImplLogicUnitToPixelY( long nY, MapUnit eUnit );
515 : : SAL_DLLPRIVATE sal_Bool ImplIsWindowInFront( const Window* pTestWindow ) const;
516 : : SAL_DLLPRIVATE void ImplSaveOverlapBackground();
517 : : SAL_DLLPRIVATE sal_Bool ImplRestoreOverlapBackground( Region& rInvRegion );
518 : : SAL_DLLPRIVATE void ImplDeleteOverlapBackground();
519 : : SAL_DLLPRIVATE void ImplInvalidateAllOverlapBackgrounds();
520 : : SAL_DLLPRIVATE static void ImplNewInputContext();
521 : : SAL_DLLPRIVATE void ImplCallActivateListeners(Window*);
522 : : SAL_DLLPRIVATE void ImplCallDeactivateListeners(Window*);
523 : : DECL_DLLPRIVATE_LINK( ImplHandlePaintHdl, void* );
524 : : DECL_DLLPRIVATE_LINK( ImplGenerateMouseMoveHdl, void* );
525 : : DECL_DLLPRIVATE_LINK( ImplTrackTimerHdl, Timer* );
526 : : DECL_DLLPRIVATE_LINK( ImplAsyncFocusHdl, void* );
527 : : DECL_DLLPRIVATE_LINK( ImplHideOwnerDrawWindowsHdl, void* );
528 : : DECL_DLLPRIVATE_LINK( ImplHandleResizeTimerHdl, void* );
529 : :
530 : : SAL_DLLPRIVATE static void ImplCalcSymbolRect( Rectangle& rRect );
531 : : SAL_DLLPRIVATE void ImplHandleScroll( ScrollBar* pHScrl, long nX, ScrollBar* pVScrl, long nY );
532 : : SAL_DLLPRIVATE sal_Bool ImplIsAccessibleCandidate() const;
533 : : SAL_DLLPRIVATE sal_Bool ImplIsAccessibleNativeFrame() const;
534 : : SAL_DLLPRIVATE sal_uInt16 ImplGetAccessibleCandidateChildWindowCount( sal_uInt16 nFirstWindowType ) const;
535 : : SAL_DLLPRIVATE Window* ImplGetAccessibleCandidateChild( sal_uInt16 nChild, sal_uInt16& rChildCount, sal_uInt16 nFirstWindowType, sal_Bool bTopLevel = sal_True ) const;
536 : : SAL_DLLPRIVATE sal_Bool ImplRegisterAccessibleNativeFrame();
537 : : SAL_DLLPRIVATE void ImplRevokeAccessibleNativeFrame();
538 : : SAL_DLLPRIVATE void ImplCallResize();
539 : : SAL_DLLPRIVATE void ImplExtResize();
540 : : SAL_DLLPRIVATE void ImplCallMove();
541 : : SAL_DLLPRIVATE Rectangle ImplOutputToUnmirroredAbsoluteScreenPixel( const Rectangle& rRect ) const;
542 : : SAL_DLLPRIVATE void ImplMirrorFramePos( Point &pt ) const;
543 : : SAL_DLLPRIVATE long ImplGetUnmirroredOutOffX();
544 : : SAL_DLLPRIVATE void ImplIncModalCount();
545 : : SAL_DLLPRIVATE void ImplDecModalCount();
546 : :
547 : : // retrieves the list of owner draw decorated windows for this window hiearchy
548 : : SAL_DLLPRIVATE ::std::vector<Window *>& ImplGetOwnerDrawList();
549 : : SAL_DLLPRIVATE Window* ImplGetTopmostFrameWindow();
550 : :
551 : : SAL_DLLPRIVATE Rectangle ImplGetWindowExtentsRelative( Window *pRelativeWindow, sal_Bool bClientOnly ) const;
552 : : SAL_DLLPRIVATE void ImplNotifyIconifiedState( sal_Bool bIconified );
553 : : SAL_DLLPRIVATE bool ImplStopDnd();
554 : : SAL_DLLPRIVATE void ImplStartDnd();
555 : :
556 : : SAL_DLLPRIVATE static void ImplInitAppFontData( Window* pWindow );
557 : : SAL_DLLPRIVATE void ImplPaintToDevice( OutputDevice* pTargetOutDev, const Point& rPos );
558 : :
559 : : SAL_DLLPRIVATE void ImplIsInTaskPaneList( sal_Bool mbIsInTaskList );
560 : : SAL_DLLPRIVATE ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCanvas >
561 : : ImplGetCanvas( const Size& rFullscreenSize, bool bFullscreen, bool bSpriteCanvas ) const;
562 : :
563 : : private:
564 : : // Default construction is forbidden and not implemented.
565 : : SAL_DLLPRIVATE Window();
566 : :
567 : : // Copy assignment is forbidden and not implemented.
568 : : SAL_DLLPRIVATE Window (const Window &);
569 : : SAL_DLLPRIVATE Window & operator= (const Window &);
570 : :
571 : : protected:
572 : : // Single argument ctors shall be explicit.
573 : : explicit Window( WindowType nType );
574 : :
575 : : void SetCompoundControl( sal_Bool bCompound );
576 : :
577 : : void ImplCallEventListeners( sal_uLong nEvent, void* pData = NULL );
578 : : void CallEventListeners( sal_uLong nEvent, void* pData = NULL );
579 : : void FireVclEvent( VclSimpleEvent* pEvent );
580 : :
581 : : // FIXME: this is a hack to workaround missing layout functionality
582 : : SAL_DLLPRIVATE void ImplAdjustNWFSizes();
583 : : public:
584 : : // Single argument ctors shall be explicit.
585 : : explicit Window( Window* pParent, WinBits nStyle = 0 );
586 : :
587 : : Window( Window* pParent, const ResId& rResId );
588 : : virtual ~Window();
589 : :
590 : : virtual void MouseMove( const MouseEvent& rMEvt );
591 : : virtual void MouseButtonDown( const MouseEvent& rMEvt );
592 : : virtual void MouseButtonUp( const MouseEvent& rMEvt );
593 : : virtual void KeyInput( const KeyEvent& rKEvt );
594 : : virtual void KeyUp( const KeyEvent& rKEvt );
595 : : virtual void PrePaint();
596 : : virtual void Paint( const Rectangle& rRect );
597 : :
598 : : virtual void PostPaint();
599 : : virtual void Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, sal_uLong nFlags );
600 : : virtual void Move();
601 : : virtual void Resize();
602 : : virtual void Activate();
603 : : virtual void Deactivate();
604 : : virtual void GetFocus();
605 : : virtual void LoseFocus();
606 : : virtual void RequestHelp( const HelpEvent& rHEvt );
607 : : virtual void Command( const CommandEvent& rCEvt );
608 : : virtual void Tracking( const TrackingEvent& rTEvt );
609 : : virtual void UserEvent( sal_uLong nEvent, void* pEventData );
610 : : virtual void StateChanged( StateChangedType nStateChange );
611 : : virtual void DataChanged( const DataChangedEvent& rDCEvt );
612 : : virtual long PreNotify( NotifyEvent& rNEvt );
613 : : virtual long Notify( NotifyEvent& rNEvt );
614 : : virtual Window* GetPreferredKeyInputWindow();
615 : :
616 : : /*virtual*/ void AddEventListener( const Link& rEventListener );
617 : : /*virtual*/ void RemoveEventListener( const Link& rEventListener );
618 : : /*virtual*/ void AddChildEventListener( const Link& rEventListener );
619 : : /*virtual*/ void RemoveChildEventListener( const Link& rEventListener );
620 : :
621 : : sal_uLong PostUserEvent( const Link& rLink, void* pCaller = NULL );
622 : : sal_Bool PostUserEvent( sal_uLong& rEventId, sal_uLong nEvent, void* pEventData = NULL );
623 : : sal_Bool PostUserEvent( sal_uLong& rEventId, const Link& rLink, void* pCaller = NULL );
624 : : void RemoveUserEvent( sal_uLong nUserEvent );
625 : :
626 : : void IncrementLockCount();
627 : : void DecrementLockCount();
628 : : sal_Bool IsLocked( sal_Bool bChildren = sal_False ) const;
629 : :
630 : : // returns the input language used for the last key stroke
631 : : // may be LANGUAGE_DONTKNOW if not supported by the OS
632 : : LanguageType GetInputLanguage() const;
633 : :
634 : : void SetStyle( WinBits nStyle );
635 : : WinBits GetStyle() const;
636 : : WinBits GetPrevStyle() const;
637 : : void SetExtendedStyle( WinBits nExtendedStyle );
638 : : WinBits GetExtendedStyle() const;
639 : : void SetType( WindowType nType );
640 : : WindowType GetType() const;
641 : : sal_Bool IsSystemWindow() const;
642 : : sal_Bool IsDialog() const;
643 : : sal_Bool IsMenuFloatingWindow() const;
644 : : sal_Bool IsToolbarFloatingWindow() const;
645 : : sal_Bool IsTopWindow() const;
646 : : SystemWindow* GetSystemWindow() const;
647 : :
648 : : void EnableAllResize( sal_Bool bEnable = sal_True );
649 : :
650 : : void SetBorderStyle( sal_uInt16 nBorderStyle );
651 : : sal_uInt16 GetBorderStyle() const;
652 : : void GetBorder( sal_Int32& rLeftBorder, sal_Int32& rTopBorder,
653 : : sal_Int32& rRightBorder, sal_Int32& rBottomBorder ) const;
654 : : Size CalcWindowSize( const Size& rOutSz ) const;
655 : : Size CalcOutputSize( const Size& rWinSz ) const;
656 : : long CalcTitleWidth() const;
657 : :
658 : : void EnableClipSiblings( sal_Bool bClipSiblings = sal_True );
659 : :
660 : : void EnableChildTransparentMode( sal_Bool bEnable = sal_True );
661 : : sal_Bool IsChildTransparentModeEnabled() const;
662 : :
663 : : void SetMouseTransparent( sal_Bool bTransparent );
664 : : sal_Bool IsMouseTransparent() const;
665 : : void SetPaintTransparent( sal_Bool bTransparent );
666 : : sal_Bool IsPaintTransparent() const;
667 : : void SetDialogControlStart( sal_Bool bStart );
668 : : sal_Bool IsDialogControlStart() const;
669 : : void SetDialogControlFlags( sal_uInt16 nFlags );
670 : : sal_uInt16 GetDialogControlFlags() const;
671 : :
672 : 477 : struct PointerState
673 : : {
674 : : sal_uLong mnState; // the button state
675 : : Point maPos; // mouse position in output coordinates
676 : : };
677 : : PointerState GetPointerState();
678 : : sal_Bool IsMouseOver();
679 : :
680 : : sal_uLong GetCurrentModButtons();
681 : :
682 : : void SetInputContext( const InputContext& rInputContext );
683 : : const InputContext& GetInputContext() const;
684 : : void EndExtTextInput( sal_uInt16 nFlags );
685 : : void SetCursorRect( const Rectangle* pRect = NULL, long nExtTextInputWidth = 0 );
686 : : const Rectangle* GetCursorRect() const;
687 : : long GetCursorExtTextInputWidth() const;
688 : :
689 : : using OutputDevice::SetSettings;
690 : : virtual void SetSettings( const AllSettings& rSettings );
691 : : virtual void SetSettings( const AllSettings& rSettings, sal_Bool bChild );
692 : : void UpdateSettings( const AllSettings& rSettings, sal_Bool bChild = sal_False );
693 : : void NotifyAllChildren( DataChangedEvent& rDCEvt );
694 : :
695 : : void SetPointFont( const Font& rFont );
696 : : Font GetPointFont() const;
697 : : void SetZoomedPointFont( const Font& rFont );
698 : : long GetDrawPixel( OutputDevice* pDev, long nPixels ) const;
699 : : Font GetDrawPixelFont( OutputDevice* pDev ) const;
700 : :
701 : : void SetControlFont();
702 : : void SetControlFont( const Font& rFont );
703 : : Font GetControlFont() const;
704 : : sal_Bool IsControlFont() const;
705 : : void SetControlForeground();
706 : : void SetControlForeground( const Color& rColor );
707 : : Color GetControlForeground() const;
708 : : sal_Bool IsControlForeground() const;
709 : : void SetControlBackground();
710 : : void SetControlBackground( const Color& rColor );
711 : : Color GetControlBackground() const;
712 : : sal_Bool IsControlBackground() const;
713 : :
714 : : void SetParentClipMode( sal_uInt16 nMode = 0 );
715 : : sal_uInt16 GetParentClipMode() const;
716 : :
717 : : void SetWindowRegionPixel();
718 : : void SetWindowRegionPixel( const Region& rRegion );
719 : : const Region& GetWindowRegionPixel() const;
720 : : sal_Bool IsWindowRegionPixel() const;
721 : : Region GetWindowClipRegionPixel( sal_uInt16 nFlags = 0 ) const;
722 : : Region GetPaintRegion() const;
723 : : sal_Bool IsInPaint() const;
724 : : // while IsInPaint returns true ExpandPaintClipRegion adds the
725 : : // submitted region to the paint clip region so you can
726 : : // paint additional parts of your window if necessary
727 : : void ExpandPaintClipRegion( const Region& rRegion );
728 : :
729 : : void SetParent( Window* pNewParent );
730 : : Window* GetParent() const;
731 : : // return the dialog we are contained in or NULL if un-contained
732 : : Window* GetParentDialog() const;
733 : :
734 : : void Show( sal_Bool bVisible = sal_True, sal_uInt16 nFlags = 0 );
735 : 194014 : void Hide( sal_uInt16 nFlags = 0 ) { Show( sal_False, nFlags ); }
736 : : sal_Bool IsVisible() const;
737 : : sal_Bool IsReallyVisible() const;
738 : : sal_Bool IsReallyShown() const;
739 : : sal_Bool IsInInitShow() const;
740 : :
741 : : void Enable( bool bEnable = true, bool bChild = true );
742 : 571 : void Disable( bool bChild = true ) { Enable( false, bChild ); }
743 : : sal_Bool IsEnabled() const;
744 : :
745 : : void EnableInput( sal_Bool bEnable = sal_True, sal_Bool bChild = sal_True );
746 : : void EnableInput( sal_Bool bEnable, sal_Bool bChild, sal_Bool bSysWin,
747 : : const Window* pExcludeWindow = NULL );
748 : : sal_Bool IsInputEnabled() const;
749 : :
750 : : /** Override <code>EnableInput</code>. This can be necessary due to other people
751 : : using EnableInput for whole window hierarchies.
752 : :
753 : :
754 : : <code>AlwaysEnableInput</code> and <code>AlwaysDisableInput</code> are
755 : : mutually exclusive; the last setter wins.
756 : : @param bAlways
757 : : sets always enabled flag
758 : :
759 : : @param bChild
760 : : if true children are recursively set to AlwaysEnableInput
761 : : */
762 : : void AlwaysEnableInput( sal_Bool bAlways, sal_Bool bChild = sal_True );
763 : : /** returns the current AlwaysEnableInput state
764 : : @return
765 : : true if window is in AlwaysEnableInput state
766 : : */
767 : : sal_Bool IsAlwaysEnableInput() const;
768 : : /** Override <code>EnableInput</code>, counterpart to AlwaysEnableInput.
769 : : Windows with AlwaysDisableInput will not get key events even if enabled
770 : : and input enabled.This can be necessary due to other people using EnableInput
771 : : for whole window hierarchies.
772 : :
773 : : <code>AlwaysEnableInput</code> and <code>AlwaysDisableInput</code> are
774 : : mutually exclusive; the last setter wins.
775 : :
776 : : @param bAlways
777 : : sets always disable flag
778 : :
779 : : @param bChild
780 : : if true children are recursively set to AlwaysDisableInput
781 : : */
782 : : void AlwaysDisableInput( sal_Bool bAlways, sal_Bool bChild = sal_True );
783 : :
784 : : /** usually event handlers (see AddEventListener and AddChildEventListener)
785 : : are not called on disabled, modal or input disabled windows. There are however rare cases
786 : : in which one wants a Window or rather one of its Control subclasses to
787 : : not evaluate events but still react to those events externally. In these
788 : : rare cases call SetCallHandlersOnInputDisabled( true ) to have your handler
789 : : called anyway.
790 : :
791 : : Currently only mouse events get this special treatment.
792 : :
793 : : Use this sparingly, chances are if you want to use it you're wroking around
794 : : the real problem.
795 : :
796 : : @param bCall
797 : : Enable/Disable calling event handlers for this disabled, modal or input disabled window.
798 : : This call is implicity done recursively for possible child windows.
799 : : */
800 : : void SetCallHandlersOnInputDisabled( bool bCall );
801 : : /** get state of SetCallHandlersOnInputDisabled
802 : :
803 : : @returns whether handlers are called regardless of input enabled state
804 : : */
805 : : bool IsCallHandlersOnInputDisabled() const;
806 : : /** A window is in modal mode if one of its children or subchildren
807 : : is a running modal window (a modal dialog)
808 : :
809 : : @returns sal_True if a child or subchild is a running modal window
810 : : */
811 : : sal_Bool IsInModalMode() const;
812 : :
813 : : void SetActivateMode( sal_uInt16 nMode );
814 : : sal_uInt16 GetActivateMode() const;
815 : :
816 : : void ToTop( sal_uInt16 nFlags = 0 );
817 : : void SetZOrder( Window* pRefWindow, sal_uInt16 nFlags );
818 : : void EnableAlwaysOnTop( sal_Bool bEnable = sal_True );
819 : : sal_Bool IsAlwaysOnTopEnabled() const;
820 : :
821 : : virtual void SetPosSizePixel( long nX, long nY,
822 : : long nWidth, long nHeight,
823 : : sal_uInt16 nFlags = WINDOW_POSSIZE_ALL );
824 : : virtual void SetPosPixel( const Point& rNewPos );
825 : : virtual Point GetPosPixel() const;
826 : : virtual void SetSizePixel( const Size& rNewSize );
827 : : virtual Size GetSizePixel() const;
828 : : virtual void SetPosSizePixel( const Point& rNewPos,
829 : : const Size& rNewSize );
830 : : virtual void SetOutputSizePixel( const Size& rNewSize );
831 : : sal_Bool IsDefaultPos() const;
832 : : sal_Bool IsDefaultSize() const;
833 : :
834 : : // those conversion routines might deliver different results during UI mirroring
835 : : Point OutputToScreenPixel( const Point& rPos ) const;
836 : : Point ScreenToOutputPixel( const Point& rPos ) const;
837 : : // the normalized screen methods work independent from UI mirroring
838 : : Point OutputToNormalizedScreenPixel( const Point& rPos ) const;
839 : : Point NormalizedScreenToOutputPixel( const Point& rPos ) const;
840 : : Point OutputToAbsoluteScreenPixel( const Point& rPos ) const;
841 : : Point AbsoluteScreenToOutputPixel( const Point& rPos ) const;
842 : : Rectangle GetDesktopRectPixel() const;
843 : : // window extents including border and decoratrion
844 : : Rectangle GetWindowExtentsRelative( Window *pRelativeWindow ) const;
845 : : // window extents of the client window, coordinates to be used in SetPosPixel
846 : : Rectangle GetClientWindowExtentsRelative( Window *pRelativeWindow ) const;
847 : :
848 : : virtual sal_Bool IsScrollable() const;
849 : : virtual void Scroll( long nHorzScroll, long nVertScroll,
850 : : sal_uInt16 nFlags = 0 );
851 : : virtual void Scroll( long nHorzScroll, long nVertScroll,
852 : : const Rectangle& rRect, sal_uInt16 nFlags = 0 );
853 : : virtual void Invalidate( sal_uInt16 nFlags = 0 );
854 : : virtual void Invalidate( const Rectangle& rRect, sal_uInt16 nFlags = 0 );
855 : : virtual void Invalidate( const Region& rRegion, sal_uInt16 nFlags = 0 );
856 : : void Validate( sal_uInt16 nFlags = 0 );
857 : : sal_Bool HasPaintEvent() const;
858 : : void Update();
859 : : void Flush();
860 : : void Sync();
861 : :
862 : : // toggles new docking support, enabled via toolkit
863 : : void EnableDocking( sal_Bool bEnable = sal_True );
864 : : // retrieves the single dockingmanager instance
865 : : static DockingManager* GetDockingManager();
866 : :
867 : : void EnablePaint( sal_Bool bEnable );
868 : : sal_Bool IsPaintEnabled() const;
869 : : void SetUpdateMode( sal_Bool bUpdate );
870 : : sal_Bool IsUpdateMode() const;
871 : : void SetParentUpdateMode( sal_Bool bUpdate );
872 : :
873 : : void GrabFocus();
874 : : sal_Bool HasFocus() const;
875 : : sal_Bool HasChildPathFocus( sal_Bool bSystemWindow = sal_False ) const;
876 : : sal_Bool IsActive() const;
877 : : sal_Bool HasActiveChildFrame();
878 : : sal_uInt16 GetGetFocusFlags() const;
879 : : void GrabFocusToDocument();
880 : :
881 : : /**
882 : : * Set this when you need to act as if the window has focus even if it
883 : : * doesn't. This is necessary for implementing tab stops inside floating
884 : : * windows, but floating windows don't get focus from the system.
885 : : */
886 : : void SetFakeFocus( bool bFocus );
887 : :
888 : : sal_Bool IsCompoundControl() const;
889 : :
890 : : static sal_uIntPtr SaveFocus();
891 : : static sal_Bool EndSaveFocus( sal_uIntPtr nSaveId, sal_Bool bRestore = sal_True );
892 : :
893 : : void CaptureMouse();
894 : : void ReleaseMouse();
895 : : sal_Bool IsMouseCaptured() const;
896 : :
897 : : void SetPointer( const Pointer& rPointer );
898 : : const Pointer& GetPointer() const;
899 : : void EnableChildPointerOverwrite( sal_Bool bOverwrite = sal_True );
900 : : void SetPointerPosPixel( const Point& rPos );
901 : : Point GetPointerPosPixel();
902 : : Point GetLastPointerPosPixel();
903 : : void ShowPointer( sal_Bool bVisible );
904 : : void EnterWait();
905 : : void LeaveWait();
906 : : sal_Bool IsWait() const;
907 : :
908 : : void SetCursor( Cursor* pCursor );
909 : : Cursor* GetCursor() const;
910 : :
911 : : void SetZoom( const Fraction& rZoom );
912 : : const Fraction& GetZoom() const;
913 : : sal_Bool IsZoom() const;
914 : : long CalcZoom( long n ) const;
915 : :
916 : : virtual void SetText( const XubString& rStr );
917 : : virtual String GetText() const;
918 : : // return the actual text displayed
919 : : // this may have e.g. accellerators removed or portions
920 : : // replaced by ellipsis
921 : : virtual String GetDisplayText() const;
922 : : // gets the visible background color. for transparent windows
923 : : // this may be the parent's background color; for controls
924 : : // this may be a child's background color (e.g. ListBox)
925 : : virtual const Wallpaper& GetDisplayBackground() const;
926 : :
927 : : void SetBackgroundBitmap( const BitmapEx& rBitmapEx );
928 : :
929 : : void SetHelpText( const XubString& rHelpText );
930 : : const XubString& GetHelpText() const;
931 : :
932 : : void SetQuickHelpText( const XubString& rHelpText );
933 : : const XubString& GetQuickHelpText() const;
934 : :
935 : : void SetHelpId( const rtl::OString& );
936 : : const rtl::OString& GetHelpId() const;
937 : :
938 : : void SetUniqueId( const rtl::OString& );
939 : : const rtl::OString& GetUniqueId() const;
940 : :
941 : : Window* FindWindow( const Point& rPos ) const;
942 : :
943 : : sal_uInt16 GetChildCount() const;
944 : : Window* GetChild( sal_uInt16 nChild ) const;
945 : : Window* GetWindow( sal_uInt16 nType ) const;
946 : : sal_Bool IsChild( const Window* pWindow, sal_Bool bSystemWindow = sal_False ) const;
947 : : sal_Bool IsWindowOrChild( const Window* pWindow, sal_Bool bSystemWindow = sal_False ) const;
948 : :
949 : : void SetData( void* pNewData );
950 : : void* GetData() const;
951 : :
952 : : void ShowFocus( const Rectangle& rRect );
953 : : void HideFocus();
954 : :
955 : : void Invert( const Rectangle& rRect, sal_uInt16 nFlags = 0 );
956 : : void Invert( const Polygon& rPoly, sal_uInt16 nFlags = 0 );
957 : :
958 : : // transparent background for selected or checked items in toolboxes etc.
959 : : void DrawSelectionBackground( const Rectangle& rRect, sal_uInt16 highlight, sal_Bool bChecked, sal_Bool bDrawBorder, sal_Bool bDrawExtBorderOnly );
960 : : // the same, but fills a passed Color with a text color complementing the selection background
961 : : void DrawSelectionBackground( const Rectangle& rRect, sal_uInt16 highlight, sal_Bool bChecked, sal_Bool bDrawBorder, sal_Bool bDrawExtBorderOnly, Color* pSelectionTextColor );
962 : : // support rounded edges in the selection rect
963 : : void DrawSelectionBackground( const Rectangle& rRect, sal_uInt16 highlight, sal_Bool bChecked, sal_Bool bDrawBorder, sal_Bool bDrawExtBorderOnly, long nCornerRadius, Color* pSelectionTextColor, Color* pPaintColor );
964 : :
965 : : void ShowTracking( const Rectangle& rRect,
966 : : sal_uInt16 nFlags = SHOWTRACK_SMALL );
967 : : void HideTracking();
968 : : void InvertTracking( const Rectangle& rRect,
969 : : sal_uInt16 nFlags = SHOWTRACK_SMALL );
970 : : void InvertTracking( const Polygon& rPoly, sal_uInt16 nFlags = 0 );
971 : :
972 : : void StartTracking( sal_uInt16 nFlags = 0 );
973 : : void EndTracking( sal_uInt16 nFlags = 0 );
974 : : sal_Bool IsTracking() const;
975 : :
976 : : void StartAutoScroll( sal_uInt16 nFlags );
977 : : void EndAutoScroll();
978 : :
979 : : sal_Bool HandleScrollCommand( const CommandEvent& rCmd,
980 : : ScrollBar* pHScrl = NULL,
981 : : ScrollBar* pVScrl = NULL );
982 : :
983 : : void SaveBackground( const Point& rPos, const Size& rSize,
984 : : const Point& rDestOff, VirtualDevice& rSaveDevice );
985 : :
986 : : const SystemEnvData* GetSystemData() const;
987 : : ::com::sun::star::uno::Any GetSystemDataAny() const;
988 : :
989 : : // API to set/query the component interfaces
990 : : virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > GetComponentInterface( sal_Bool bCreate = sal_True );
991 : : virtual void SetComponentInterface( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > xIFace );
992 : :
993 : : // Accessibility
994 : : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > GetAccessible( sal_Bool bCreate = sal_True );
995 : : virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
996 : : void SetAccessible( ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > );
997 : :
998 : : Window* GetAccessibleParentWindow() const;
999 : : sal_uInt16 GetAccessibleChildWindowCount();
1000 : : Window* GetAccessibleChildWindow( sal_uInt16 n );
1001 : :
1002 : : void SetAccessibleRole( sal_uInt16 nRole );
1003 : : sal_uInt16 GetAccessibleRole() const;
1004 : :
1005 : : void SetAccessibleName( const String& rName );
1006 : : String GetAccessibleName() const;
1007 : :
1008 : : void SetAccessibleDescription( const String& rDescr );
1009 : : String GetAccessibleDescription() const;
1010 : :
1011 : : void SetAccessibleRelationLabeledBy( Window* pLabeledBy );
1012 : : Window* GetAccessibleRelationLabeledBy() const;
1013 : :
1014 : : Window* GetAccessibleRelationLabelFor() const;
1015 : :
1016 : : void SetAccessibleRelationMemberOf( Window* pMemberOf );
1017 : :
1018 : : // to avoid sending accessibility events in cases like closing dialogs
1019 : : // by default checks complete parent path
1020 : : sal_Bool IsAccessibilityEventsSuppressed( sal_Bool bTraverseParentPath = sal_True );
1021 : : void SetAccessibilityEventsSuppressed(sal_Bool bSuppressed);
1022 : :
1023 : : /// request XCanvas render interface for this window
1024 : : ::com::sun::star::uno::Reference<
1025 : : ::com::sun::star::rendering::XCanvas > GetCanvas() const;
1026 : : /// request XSpriteCanvas render interface for this window
1027 : : ::com::sun::star::uno::Reference<
1028 : : ::com::sun::star::rendering::XSpriteCanvas > GetSpriteCanvas() const;
1029 : :
1030 : : /* records all DrawText operations within the passed rectangle;
1031 : : * a synchronous paint is sent to achieve this
1032 : : */
1033 : : void RecordLayoutData( vcl::ControlLayoutData* pLayout, const Rectangle& rRect );
1034 : :
1035 : : // set and retrieve for Toolkit
1036 : : VCLXWindow* GetWindowPeer() const;
1037 : : void SetWindowPeer( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > xPeer, VCLXWindow* pVCLXWindow );
1038 : :
1039 : : // remember if it was generated by Toolkit
1040 : : sal_Bool IsCreatedWithToolkit() const;
1041 : : void SetCreatedWithToolkit( sal_Bool b );
1042 : :
1043 : : // Deprecated - can use SetAccessibleRelationLabelFor/By nowadys
1044 : : virtual Window* GetParentLabelFor( const Window* pLabel ) const;
1045 : : virtual Window* GetParentLabeledBy( const Window* pLabeled ) const;
1046 : : KeyEvent GetActivationKey() const;
1047 : :
1048 : : // Drag and Drop interfaces
1049 : : virtual ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDropTarget > GetDropTarget();
1050 : : virtual ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragSource > GetDragSource();
1051 : : virtual ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragGestureRecognizer > GetDragGestureRecognizer();
1052 : :
1053 : : // Clipboard/Selection interfaces
1054 : : virtual ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard > GetClipboard();
1055 : : virtual ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard > GetPrimarySelection();
1056 : :
1057 : : // Advisory Sizing - what is a good size for this widget ?
1058 : : virtual Size GetOptimalSize(WindowSizeType eType) const;
1059 : :
1060 : : //-------------------------------------
1061 : : // Native Widget Rendering functions
1062 : : //-------------------------------------
1063 : :
1064 : : // form controls must never use native widgets, this can be toggled here
1065 : : void EnableNativeWidget( sal_Bool bEnable = sal_True );
1066 : : sal_Bool IsNativeWidgetEnabled() const;
1067 : :
1068 : : // a helper method for a Control's Draw method
1069 : : void PaintToDevice( OutputDevice* pDevice, const Point& rPos, const Size& rSize );
1070 : :
1071 : : /* mark Window for deletion in top of event queue
1072 : : */
1073 : : void doLazyDelete();
1074 : :
1075 : : //-------------------------------------
1076 : : // Keyboard access functions
1077 : : //-------------------------------------
1078 : :
1079 : : /** Query the states of keyboard indicators - Caps Lock, Num Lock and
1080 : : Scroll Lock. Use the following mask to retrieve the state of each
1081 : : indicator:
1082 : :
1083 : : INDICATOR_CAPS_LOCK
1084 : : INDICATOR_NUM_LOCK
1085 : : INDICATOR_SCROLL_LOCK
1086 : : */
1087 : : sal_uInt16 GetIndicatorState() const;
1088 : :
1089 : : void SimulateKeyPress( sal_uInt16 nKeyCode ) const;
1090 : :
1091 : : virtual rtl::OUString GetSurroundingText() const;
1092 : : virtual Selection GetSurroundingTextSelection() const;
1093 : :
1094 : : // ExtImpl
1095 : :
1096 : : // layouting
1097 : : boost::shared_ptr< vcl::WindowArranger > getLayout();
1098 : :
1099 : : /* add a child Window
1100 : : addWindow will do the following things
1101 : : - insert the passed window into the child list (equivalent to i_pWin->SetParent( this ))
1102 : : - mark the window as "owned", meaning that the added Window will be destroyed by
1103 : : the parent's desctructor.
1104 : : This means: do not pass in member windows or stack objects here. Do not cause
1105 : : the destructor of the added window to be called in any way.
1106 : :
1107 : : to avoid ownership pass i_bTakeOwnership as "false"
1108 : : */
1109 : : void addWindow( Window* i_pWin, bool i_bTakeOwnership = true );
1110 : :
1111 : : /* return the identifier of this window
1112 : : */
1113 : : const rtl::OUString& getIdentifier() const;
1114 : :
1115 : : /* returns the first found descendant that matches
1116 : : the passed identifier or NULL
1117 : : */
1118 : : Window* findWindow( const rtl::OUString& ) const;
1119 : :
1120 : : /* get/set properties
1121 : : this will contain window properties (like visible, enabled)
1122 : : as well as properties of derived classes (e.g. text of Edit fields)
1123 : : */
1124 : : virtual com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > getProperties() const;
1125 : : /*
1126 : : */
1127 : : virtual void setProperties( const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& );
1128 : : };
1129 : :
1130 : :
1131 : : #endif // _SV_WINDOW_HXX
1132 : :
1133 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|