]> git.saurik.com Git - wxWidgets.git/blame - include/wx/window.h
initialize m_ownsConv (part of patch 1836644)
[wxWidgets.git] / include / wx / window.h
CommitLineData
f03fc89f 1///////////////////////////////////////////////////////////////////////////////
23895080 2// Name: wx/window.h
789295bf 3// Purpose: wxWindowBase class - the interface of wxWindow
f03fc89f 4// Author: Vadim Zeitlin
566d84a7 5// Modified by: Ron Lee
f03fc89f
VZ
6// Created: 01/02/97
7// RCS-ID: $Id$
99d80019 8// Copyright: (c) Vadim Zeitlin
65571936 9// Licence: wxWindows licence
f03fc89f
VZ
10///////////////////////////////////////////////////////////////////////////////
11
34138703
JS
12#ifndef _WX_WINDOW_H_BASE_
13#define _WX_WINDOW_H_BASE_
c801d85f 14
f03fc89f
VZ
15// ----------------------------------------------------------------------------
16// headers which we must include here
17// ----------------------------------------------------------------------------
18
19#include "wx/event.h" // the base class
20
21#include "wx/list.h" // defines wxWindowList
22
23#include "wx/cursor.h" // we have member variables of these classes
24#include "wx/font.h" // so we can't do without them
25#include "wx/colour.h"
26#include "wx/region.h"
5e4ff78a 27#include "wx/utils.h"
978af864 28#include "wx/intl.h"
88ac883a 29
674ac8b9 30#include "wx/validate.h" // for wxDefaultValidator (always include it)
8d99be5f 31
574c939e 32#if wxUSE_PALETTE
d577d610 33 #include "wx/palette.h"
574c939e
KB
34#endif // wxUSE_PALETTE
35
88ac883a
VZ
36#if wxUSE_ACCEL
37 #include "wx/accel.h"
38#endif // wxUSE_ACCEL
f03fc89f 39
45a959a3
JS
40#if wxUSE_ACCESSIBILITY
41#include "wx/access.h"
42#endif
43
6522713c
VZ
44// when building wxUniv/Foo we don't want the code for native menu use to be
45// compiled in - it should only be used when building real wxFoo
46#ifdef __WXUNIVERSAL__
47 #define wxUSE_MENUS_NATIVE 0
22dd3847 48#else // !__WXUNIVERSAL__
6522713c 49 #define wxUSE_MENUS_NATIVE wxUSE_MENUS
22dd3847 50#endif // __WXUNIVERSAL__/!__WXUNIVERSAL__
6522713c 51
47a8a4d5
VZ
52
53// Define this macro if the corresponding operating system handles the state
54// of children windows automatically when the parent is enabled/disabled.
55// Otherwise wx itself must ensure that when the parent is disabled its
56// children are disabled too, and their initial state is restored when the
57// parent is enabled back.
58#if defined(__WXMSW__) || defined(__WXPM__)
59 // must do everything ourselves
60 #undef wxHAS_NATIVE_ENABLED_MANAGEMENT
61#else
62 #define wxHAS_NATIVE_ENABLED_MANAGEMENT
63#endif
64
f03fc89f
VZ
65// ----------------------------------------------------------------------------
66// forward declarations
67// ----------------------------------------------------------------------------
68
b5dbe15d
VS
69class WXDLLIMPEXP_FWD_CORE wxCaret;
70class WXDLLIMPEXP_FWD_CORE wxControl;
71class WXDLLIMPEXP_FWD_CORE wxCursor;
72class WXDLLIMPEXP_FWD_CORE wxDC;
73class WXDLLIMPEXP_FWD_CORE wxDropTarget;
74class WXDLLIMPEXP_FWD_CORE wxItemResource;
75class WXDLLIMPEXP_FWD_CORE wxLayoutConstraints;
76class WXDLLIMPEXP_FWD_CORE wxResourceTable;
77class WXDLLIMPEXP_FWD_CORE wxSizer;
78class WXDLLIMPEXP_FWD_CORE wxToolTip;
79class WXDLLIMPEXP_FWD_CORE wxWindowBase;
80class WXDLLIMPEXP_FWD_CORE wxWindow;
81class WXDLLIMPEXP_FWD_CORE wxScrollHelper;
f03fc89f 82
45a959a3 83#if wxUSE_ACCESSIBILITY
b5dbe15d 84class WXDLLIMPEXP_FWD_CORE wxAccessible;
45a959a3
JS
85#endif
86
1b69c815
VZ
87// ----------------------------------------------------------------------------
88// helper stuff used by wxWindow
89// ----------------------------------------------------------------------------
90
91// struct containing all the visual attributes of a control
92struct WXDLLEXPORT wxVisualAttributes
93{
94 // the font used for control label/text inside it
95 wxFont font;
96
97 // the foreground colour
98 wxColour colFg;
99
100 // the background colour, may be wxNullColour if the controls background
101 // colour is not solid
102 wxColour colBg;
103};
104
105// different window variants, on platforms like eg mac uses different
106// rendering sizes
400a9e41 107enum wxWindowVariant
1b69c815
VZ
108{
109 wxWINDOW_VARIANT_NORMAL, // Normal size
110 wxWINDOW_VARIANT_SMALL, // Smaller size (about 25 % smaller than normal)
111 wxWINDOW_VARIANT_MINI, // Mini size (about 33 % smaller than normal)
112 wxWINDOW_VARIANT_LARGE, // Large size (about 25 % larger than normal)
113 wxWINDOW_VARIANT_MAX
114};
115
ff9f7a12
SC
116#if wxUSE_SYSTEM_OPTIONS
117 #define wxWINDOW_DEFAULT_VARIANT wxT("window-default-variant")
118#endif
119
376d7d97
VZ
120// valid values for Show/HideWithEffect()
121enum wxShowEffect
122{
123 wxSHOW_EFFECT_ROLL,
124 wxSHOW_EFFECT_SLIDE,
125 wxSHOW_EFFECT_BLEND,
126 wxSHOW_EFFECT_EXPAND,
127 wxSHOW_EFFECT_MAX
128};
129
f03fc89f
VZ
130// ----------------------------------------------------------------------------
131// (pseudo)template list classes
132// ----------------------------------------------------------------------------
133
f6bcfd97 134WX_DECLARE_LIST_3(wxWindow, wxWindowBase, wxWindowList, wxWindowListNode, class WXDLLEXPORT);
f03fc89f
VZ
135
136// ----------------------------------------------------------------------------
137// global variables
138// ----------------------------------------------------------------------------
139
16cba29d 140extern WXDLLEXPORT_DATA(wxWindowList) wxTopLevelWindows;
e7445ff8 141extern WXDLLIMPEXP_DATA_CORE(wxList) wxPendingDelete;
f03fc89f 142
f03fc89f
VZ
143// ----------------------------------------------------------------------------
144// wxWindowBase is the base class for all GUI controls/widgets, this is the public
145// interface of this class.
146//
147// Event handler: windows have themselves as their event handlers by default,
148// but their event handlers could be set to another object entirely. This
149// separation can reduce the amount of derivation required, and allow
150// alteration of a window's functionality (e.g. by a resource editor that
151// temporarily switches event handlers).
152// ----------------------------------------------------------------------------
153
154class WXDLLEXPORT wxWindowBase : public wxEvtHandler
155{
f03fc89f
VZ
156public:
157 // creating the window
158 // -------------------
159
06f6df7d
VZ
160 // default ctor, initializes everything which can be initialized before
161 // Create()
6463b9f5 162 wxWindowBase() ;
f03fc89f
VZ
163
164 // pseudo ctor (can't be virtual, called from ctor)
165 bool CreateBase(wxWindowBase *parent,
d9e2e4c2 166 wxWindowID winid,
f03fc89f
VZ
167 const wxPoint& pos = wxDefaultPosition,
168 const wxSize& size = wxDefaultSize,
169 long style = 0,
8d99be5f 170 const wxValidator& validator = wxDefaultValidator,
f03fc89f
VZ
171 const wxString& name = wxPanelNameStr);
172
173 virtual ~wxWindowBase();
174
f03fc89f
VZ
175 // deleting the window
176 // -------------------
177
d4864e97 178 // ask the window to close itself, return true if the event handler
f03fc89f 179 // honoured our request
d4864e97 180 bool Close( bool force = false );
f03fc89f
VZ
181
182 // the following functions delete the C++ objects (the window itself
183 // or its children) as well as the GUI windows and normally should
184 // never be used directly
185
d4864e97 186 // delete window unconditionally (dangerous!), returns true if ok
f03fc89f 187 virtual bool Destroy();
d4864e97 188 // delete all children of this window, returns true if ok
f03fc89f
VZ
189 bool DestroyChildren();
190
191 // is the window being deleted?
192 bool IsBeingDeleted() const { return m_isBeingDeleted; }
193
194 // window attributes
195 // -----------------
196
ffd84c94
WS
197 // label is just the same as the title (but for, e.g., buttons it
198 // makes more sense to speak about labels), title access
199 // is available from wxTLW classes only (frames, dialogs)
faa49bfd
WS
200 virtual void SetLabel(const wxString& label) = 0;
201 virtual wxString GetLabel() const = 0;
f03fc89f
VZ
202
203 // the window name is used for ressource setting in X, it is not the
204 // same as the window title/label
205 virtual void SetName( const wxString &name ) { m_windowName = name; }
206 virtual wxString GetName() const { return m_windowName; }
207
978af864
VZ
208 // sets the window variant, calls internally DoSetVariant if variant
209 // has changed
210 void SetWindowVariant(wxWindowVariant variant);
211 wxWindowVariant GetWindowVariant() const { return m_windowVariant; }
400a9e41 212
69d90995 213
978af864
VZ
214 // get or change the layout direction (LTR or RTL) for this window,
215 // wxLayout_Default is returned if layout direction is not supported
216 virtual wxLayoutDirection GetLayoutDirection() const
217 { return wxLayout_Default; }
218 virtual void SetLayoutDirection(wxLayoutDirection WXUNUSED(dir))
219 { }
220
221 // mirror coordinates for RTL layout if this window uses it and if the
222 // mirroring is not done automatically like Win32
223 virtual wxCoord AdjustForLayoutDirection(wxCoord x,
224 wxCoord width,
225 wxCoord widthTotal) const;
f03fc89f 226
f35fdf7e
VZ
227
228 // window id uniquely identifies the window among its siblings unless
229 // it is wxID_ANY which means "don't care"
230 void SetId( wxWindowID winid ) { m_windowId = winid; }
231 wxWindowID GetId() const { return m_windowId; }
232
233 // returns true if this id value belong to the range reserved for the
234 // auto-generated (by NewControlId()) ids (they're always negative)
235 static bool IsAutoGeneratedId(wxWindowID id);
236
237 // generate a unique id (or count of them consecutively), returns a
238 // valid id in IsAutoGeneratedId() range or wxID_NONE if failed
239 static wxWindowID NewControlId(int count = 1);
240
241 // mark an id previously returned by NewControlId() as being unused any
242 // more so that it can be reused again for another control later
243 static void ReleaseControlId(wxWindowID id);
244
f03fc89f
VZ
245
246 // moving/resizing
247 // ---------------
248
249 // set the window size and/or position
250 void SetSize( int x, int y, int width, int height,
251 int sizeFlags = wxSIZE_AUTO )
252 { DoSetSize(x, y, width, height, sizeFlags); }
253
254 void SetSize( int width, int height )
a0d9c6cb 255 { DoSetSize( wxDefaultCoord, wxDefaultCoord, width, height, wxSIZE_USE_EXISTING ); }
f03fc89f
VZ
256
257 void SetSize( const wxSize& size )
258 { SetSize( size.x, size.y); }
259
260 void SetSize(const wxRect& rect, int sizeFlags = wxSIZE_AUTO)
261 { DoSetSize(rect.x, rect.y, rect.width, rect.height, sizeFlags); }
262
1e6feb95 263 void Move(int x, int y, int flags = wxSIZE_USE_EXISTING)
a0d9c6cb 264 { DoSetSize(x, y, wxDefaultCoord, wxDefaultCoord, flags); }
f03fc89f 265
1e6feb95
VZ
266 void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING)
267 { Move(pt.x, pt.y, flags); }
f03fc89f 268
3c81c9aa
VZ
269 void SetPosition(const wxPoint& pt) { Move(pt); }
270
f03fc89f
VZ
271 // Z-order
272 virtual void Raise() = 0;
273 virtual void Lower() = 0;
274
275 // client size is the size of area available for subwindows
276 void SetClientSize( int width, int height )
277 { DoSetClientSize(width, height); }
278
279 void SetClientSize( const wxSize& size )
280 { DoSetClientSize(size.x, size.y); }
281
282 void SetClientSize(const wxRect& rect)
283 { SetClientSize( rect.width, rect.height ); }
284
3c81c9aa
VZ
285 // get the window position (pointers may be NULL): notice that it is in
286 // client coordinates for child windows and screen coordinates for the
287 // top level ones, use GetScreenPosition() if you need screen
288 // coordinates for all kinds of windows
f03fc89f
VZ
289 void GetPosition( int *x, int *y ) const { DoGetPosition(x, y); }
290 wxPoint GetPosition() const
291 {
3c81c9aa
VZ
292 int x, y;
293 DoGetPosition(&x, &y);
f03fc89f 294
3c81c9aa 295 return wxPoint(x, y);
f03fc89f
VZ
296 }
297
3c81c9aa
VZ
298 // get the window position in screen coordinates
299 void GetScreenPosition(int *x, int *y) const { DoGetScreenPosition(x, y); }
300 wxPoint GetScreenPosition() const
301 {
302 int x, y;
303 DoGetScreenPosition(&x, &y);
38759b67 304
3c81c9aa
VZ
305 return wxPoint(x, y);
306 }
307
308 // get the window size (pointers may be NULL)
f03fc89f
VZ
309 void GetSize( int *w, int *h ) const { DoGetSize(w, h); }
310 wxSize GetSize() const
311 {
312 int w, h;
313 DoGetSize(& w, & h);
314 return wxSize(w, h);
315 }
316
3c81c9aa
VZ
317 void GetClientSize( int *w, int *h ) const { DoGetClientSize(w, h); }
318 wxSize GetClientSize() const
319 {
320 int w, h;
321 DoGetClientSize(&w, &h);
322
323 return wxSize(w, h);
324 }
325
326 // get the position and size at once
f03fc89f
VZ
327 wxRect GetRect() const
328 {
329 int x, y, w, h;
3c81c9aa
VZ
330 GetPosition(&x, &y);
331 GetSize(&w, &h);
f03fc89f
VZ
332
333 return wxRect(x, y, w, h);
334 }
335
3c81c9aa 336 wxRect GetScreenRect() const
f03fc89f 337 {
3c81c9aa
VZ
338 int x, y, w, h;
339 GetScreenPosition(&x, &y);
340 GetSize(&w, &h);
f03fc89f 341
3c81c9aa 342 return wxRect(x, y, w, h);
f03fc89f
VZ
343 }
344
1e6feb95
VZ
345 // get the origin of the client area of the window relative to the
346 // window top left corner (the client area may be shifted because of
347 // the borders, scrollbars, other decorations...)
348 virtual wxPoint GetClientAreaOrigin() const;
349
350 // get the client rectangle in window (i.e. client) coordinates
351 wxRect GetClientRect() const
352 {
353 return wxRect(GetClientAreaOrigin(), GetClientSize());
354 }
355
f68586e5 356 // get the size best suited for the window (in fact, minimal
9f884528
RD
357 // acceptable size using which it will still look "nice" in
358 // most situations)
359 wxSize GetBestSize() const
360 {
361 if (m_bestSizeCache.IsFullySpecified())
362 return m_bestSizeCache;
363 return DoGetBestSize();
364 }
f68586e5
VZ
365 void GetBestSize(int *w, int *h) const
366 {
9f884528 367 wxSize s = GetBestSize();
f68586e5
VZ
368 if ( w )
369 *w = s.x;
370 if ( h )
371 *h = s.y;
372 }
373
f4fe2f20
RR
374 void SetScrollHelper( wxScrollHelper *sh ) { m_scrollHelper = sh; }
375 wxScrollHelper *GetScrollHelper() { return m_scrollHelper; }
376
9f884528
RD
377 // reset the cached best size value so it will be recalculated the
378 // next time it is needed.
992b2ec4 379 void InvalidateBestSize();
9f884528
RD
380 void CacheBestSize(const wxSize& size) const
381 { wxConstCast(this, wxWindowBase)->m_bestSizeCache = size; }
a0d9c6cb 382
2b5f62a0 383
9f884528
RD
384 // This function will merge the window's best size into the window's
385 // minimum size, giving priority to the min size components, and
386 // returns the results.
170acdc9
RD
387 wxSize GetEffectiveMinSize() const;
388 wxDEPRECATED( wxSize GetBestFittingSize() const ); // replaced by GetEffectiveMinSize
d6f582e7 389 wxDEPRECATED( wxSize GetAdjustedMinSize() const ); // replaced by GetEffectiveMinSize
a0d9c6cb 390
9f884528
RD
391 // A 'Smart' SetSize that will fill in default size values with 'best'
392 // size. Sets the minsize to what was passed in.
170acdc9
RD
393 void SetInitialSize(const wxSize& size=wxDefaultSize);
394 wxDEPRECATED( void SetBestFittingSize(const wxSize& size=wxDefaultSize) ); // replaced by SetInitialSize
9f884528 395
47a8a4d5 396
2b5f62a0 397 // the generic centre function - centers the window on parent by`
7eb4e9cc
VZ
398 // default or on screen if it doesn't have parent or
399 // wxCENTER_ON_SCREEN flag is given
1f464296
VZ
400 void Centre(int dir = wxBOTH) { DoCentre(dir); }
401 void Center(int dir = wxBOTH) { DoCentre(dir); }
7eb4e9cc
VZ
402
403 // centre with respect to the the parent window
1f464296 404 void CentreOnParent(int dir = wxBOTH) { DoCentre(dir); }
7eb4e9cc 405 void CenterOnParent(int dir = wxBOTH) { CentreOnParent(dir); }
f03fc89f
VZ
406
407 // set window size to wrap around its children
408 virtual void Fit();
409
2b5f62a0
VZ
410 // set virtual size to satisfy children
411 virtual void FitInside();
412
9379c0d7 413
b21f4960
RR
414 // SetSizeHints is actually for setting the size hints
415 // for the wxTLW for a Window Manager - hence the name -
416 // and it is therefore overridden in wxTLW to do that.
417 // In wxWindow(Base), it has (unfortunately) been abused
418 // to mean the same as SetMinSize() and SetMaxSize().
47a8a4d5 419
f03fc89f 420 virtual void SetSizeHints( int minW, int minH,
a0d9c6cb 421 int maxW = wxDefaultCoord, int maxH = wxDefaultCoord,
571f6981 422 int incW = wxDefaultCoord, int incH = wxDefaultCoord )
9379c0d7 423 { DoSetSizeHints(minW, minH, maxW, maxH, incW, incH); }
6fb99eb3 424
1ec25e8f
RD
425 void SetSizeHints( const wxSize& minSize,
426 const wxSize& maxSize=wxDefaultSize,
427 const wxSize& incSize=wxDefaultSize)
9379c0d7
RR
428 { DoSetSizeHints(minSize.x, minSize.y, maxSize.x, maxSize.y, incSize.x, incSize.y); }
429
9379c0d7
RR
430 // Methods for setting virtual size hints
431 // FIXME: What are virtual size hints?
f03fc89f 432
566d84a7 433 virtual void SetVirtualSizeHints( int minW, int minH,
a0d9c6cb 434 int maxW = wxDefaultCoord, int maxH = wxDefaultCoord );
1ec25e8f
RD
435 void SetVirtualSizeHints( const wxSize& minSize,
436 const wxSize& maxSize=wxDefaultSize)
437 {
438 SetVirtualSizeHints(minSize.x, minSize.y, maxSize.x, maxSize.y);
439 }
566d84a7 440
57c4d796 441
47a8a4d5 442 // Call these to override what GetBestSize() returns. This
a1b05a60
RR
443 // method is only virtual because it is overriden in wxTLW
444 // as a different API for SetSizeHints().
445 virtual void SetMinSize(const wxSize& minSize) { m_minWidth = minSize.x; m_minHeight = minSize.y; }
446 virtual void SetMaxSize(const wxSize& maxSize) { m_maxWidth = maxSize.x; m_maxHeight = maxSize.y; }
447
448 // Override these methods to impose restrictions on min/max size.
47a8a4d5 449 // The easier way is to call SetMinSize() and SetMaxSize() which
a1b05a60 450 // will have the same effect. Doing both is non-sense.
b4350341
VZ
451 virtual wxSize GetMinSize() const { return wxSize(m_minWidth, m_minHeight); }
452 virtual wxSize GetMaxSize() const { return wxSize(m_maxWidth, m_maxHeight); }
400a9e41 453
a1b05a60
RR
454 // Get the min and max values one by one
455 int GetMinWidth() const { return GetMinSize().x; }
456 int GetMinHeight() const { return GetMinSize().y; }
457 int GetMaxWidth() const { return GetMaxSize().x; }
458 int GetMaxHeight() const { return GetMaxSize().y; }
9379c0d7 459
a0d9c6cb 460
566d84a7
RL
461 // Methods for accessing the virtual size of a window. For most
462 // windows this is just the client area of the window, but for
463 // some like scrolled windows it is more or less independent of
464 // the screen window size. You may override the DoXXXVirtual
465 // methods below for classes where that is is the case.
466
467 void SetVirtualSize( const wxSize &size ) { DoSetVirtualSize( size.x, size.y ); }
468 void SetVirtualSize( int x, int y ) { DoSetVirtualSize( x, y ); }
469
470 wxSize GetVirtualSize() const { return DoGetVirtualSize(); }
471 void GetVirtualSize( int *x, int *y ) const
472 {
473 wxSize s( DoGetVirtualSize() );
474
475 if( x )
476 *x = s.GetWidth();
477 if( y )
478 *y = s.GetHeight();
479 }
480
481 // Override these methods for windows that have a virtual size
482 // independent of their client size. eg. the virtual area of a
e5ecf1fc 483 // wxScrolledWindow.
566d84a7
RL
484
485 virtual void DoSetVirtualSize( int x, int y );
85b38e0b 486 virtual wxSize DoGetVirtualSize() const;
e5ecf1fc 487
2b5f62a0
VZ
488 // Return the largest of ClientSize and BestSize (as determined
489 // by a sizer, interior children, or other means)
490
491 virtual wxSize GetBestVirtualSize() const
492 {
493 wxSize client( GetClientSize() );
494 wxSize best( GetBestSize() );
495
496 return wxSize( wxMax( client.x, best.x ), wxMax( client.y, best.y ) );
497 }
498
333d7052
VZ
499 // return the size of the left/right and top/bottom borders in x and y
500 // components of the result respectively
501 virtual wxSize GetWindowBorderSize() const;
502
503
f03fc89f
VZ
504 // window state
505 // ------------
506
d4864e97 507 // returns true if window was shown/hidden, false if the nothing was
f03fc89f 508 // done (window was already shown/hidden)
d4864e97
VZ
509 virtual bool Show( bool show = true );
510 bool Hide() { return Show(false); }
f03fc89f 511
376d7d97
VZ
512 // show or hide the window with a special effect, not implemented on
513 // most platforms (where it is the same as Show()/Hide() respectively)
514 //
515 // timeout specifies how long the animation should take, in ms, the
516 // default value of 0 means to use the default (system-dependent) value
517 //
518 // direction is only used with wxSHOW_EFFECT_ROLL and SLIDE values
519 virtual bool ShowWithEffect(wxShowEffect effect,
520 unsigned timeout = 0,
521 wxDirection dir = wxBOTTOM)
522 {
523 wxUnusedVar(effect);
524 wxUnusedVar(timeout);
525 wxUnusedVar(dir);
526
527 return Show();
528 }
529
530 virtual bool HideWithEffect(wxShowEffect effect,
531 unsigned timeout = 0,
532 wxDirection dir = wxBOTTOM)
533 {
534 wxUnusedVar(effect);
535 wxUnusedVar(timeout);
536 wxUnusedVar(dir);
537
538 return Hide();
539 }
540
d4864e97
VZ
541 // returns true if window was enabled/disabled, false if nothing done
542 virtual bool Enable( bool enable = true );
543 bool Disable() { return Enable(false); }
f03fc89f 544
b08cd3bf 545 virtual bool IsShown() const { return m_isShown; }
47a8a4d5
VZ
546 // returns true if the window is really enabled and false otherwise,
547 // whether because it had been explicitly disabled itself or because
548 // its parent is currently disabled -- then this method returns false
549 // whatever is the intrinsic state of this window, use IsThisEnabled(0
550 // to retrieve it. In other words, this relation always holds:
551 //
552 // IsEnabled() == IsThisEnabled() && parent.IsEnabled()
553 //
554 bool IsEnabled() const;
555
556 // returns the internal window state independently of the parent(s)
557 // state, i.e. the state in which the window would be if all its
558 // parents were enabled (use IsEnabled() above to get the effective
559 // window state)
560 bool IsThisEnabled() const { return m_isEnabled; }
f03fc89f 561
9c72cf76
VS
562 // returns true if the window is visible, i.e. IsShown() returns true
563 // if called on it and all its parents up to the first TLW
865a74c7 564 virtual bool IsShownOnScreen() const;
9c72cf76 565
f03fc89f
VZ
566 // get/set window style (setting style won't update the window and so
567 // is only useful for internal usage)
568 virtual void SetWindowStyleFlag( long style ) { m_windowStyle = style; }
569 virtual long GetWindowStyleFlag() const { return m_windowStyle; }
570
571 // just some (somewhat shorter) synonims
572 void SetWindowStyle( long style ) { SetWindowStyleFlag(style); }
573 long GetWindowStyle() const { return GetWindowStyleFlag(); }
574
d63312a9 575 // check if the flag is set
f03fc89f 576 bool HasFlag(int flag) const { return (m_windowStyle & flag) != 0; }
d80cd92a 577 virtual bool IsRetained() const { return HasFlag(wxRETAINED); }
f03fc89f 578
d63312a9
VZ
579 // turn the flag on if it had been turned off before and vice versa,
580 // return true if the flag is currently turned on
581 bool ToggleWindowStyle(int flag);
582
d80cd92a
VZ
583 // extra style: the less often used style bits which can't be set with
584 // SetWindowStyleFlag()
b2d5a7ee 585 virtual void SetExtraStyle(long exStyle) { m_exStyle = exStyle; }
d80cd92a 586 long GetExtraStyle() const { return m_exStyle; }
f03fc89f 587
a2979ead
VZ
588 bool HasExtraStyle(int exFlag) const { return (m_exStyle & exFlag) != 0; }
589
f03fc89f 590 // make the window modal (all other windows unresponsive)
d4864e97 591 virtual void MakeModal(bool modal = true);
f03fc89f 592
b8e7b673
VZ
593
594 // (primitive) theming support
595 // ---------------------------
596
a2d93e73
JS
597 virtual void SetThemeEnabled(bool enableTheme) { m_themeEnabled = enableTheme; }
598 virtual bool GetThemeEnabled() const { return m_themeEnabled; }
599
d4864e97 600
456bc6d9
VZ
601 // focus and keyboard handling
602 // ---------------------------
f03fc89f
VZ
603
604 // set focus to this window
605 virtual void SetFocus() = 0;
606
d577d610
VZ
607 // set focus to this window as the result of a keyboard action
608 virtual void SetFocusFromKbd() { SetFocus(); }
609
f03fc89f 610 // return the window which currently has the focus or NULL
0fe02759 611 static wxWindow *FindFocus();
6fb99eb3 612
0fe02759 613 static wxWindow *DoFindFocus() /* = 0: implement in derived classes */;
f03fc89f 614
ad02525d
VZ
615 // can this window have focus in principle?
616 //
617 // the difference between AcceptsFocus[FromKeyboard]() and CanAcceptFocus
618 // [FromKeyboard]() is that the former functions are meant to be
619 // overridden in the derived classes to simply return false if the
620 // control can't have focus, while the latter are meant to be used by
621 // this class clients and take into account the current window state
622 virtual bool AcceptsFocus() const { return true; }
623
edc09871
VZ
624 // can this window or one of its children accept focus?
625 //
626 // usually it's the same as AcceptsFocus() but is overridden for
627 // container windows
628 virtual bool AcceptsFocusRecursively() const { return AcceptsFocus(); }
f03fc89f 629
1e6feb95
VZ
630 // can this window be given focus by keyboard navigation? if not, the
631 // only way to give it focus (provided it accepts it at all) is to
632 // click it
633 virtual bool AcceptsFocusFromKeyboard() const { return AcceptsFocus(); }
634
edc09871
VZ
635
636 // this is mostly a helper for the various functions using it below
637 bool CanBeFocused() const { return IsShown() && IsEnabled(); }
638
639 // can this window itself have focus?
640 bool IsFocusable() const { return AcceptsFocus() && CanBeFocused(); }
641
642 // can this window have focus right now?
643 //
644 // if this method returns true, it means that calling SetFocus() will
645 // put focus either to this window or one of its children, if you need
646 // to know whether this window accepts focus itself, use IsFocusable()
647 bool CanAcceptFocus() const
648 { return AcceptsFocusRecursively() && CanBeFocused(); }
649
ad02525d
VZ
650 // can this window be assigned focus from keyboard right now?
651 bool CanAcceptFocusFromKeyboard() const
edc09871 652 { return AcceptsFocusFromKeyboard() && CanBeFocused(); }
ad02525d 653
80332672
VZ
654 // call this when the return value of AcceptsFocus() changes
655 virtual void SetCanFocus(bool WXUNUSED(canFocus)) { }
656
5644933f
VZ
657 // navigates inside this window
658 bool NavigateIn(int flags = wxNavigationKeyEvent::IsForward)
659 { return DoNavigateIn(flags); }
660
661 // navigates in the specified direction from this window, this is
662 // equivalent to GetParent()->NavigateIn()
663 bool Navigate(int flags = wxNavigationKeyEvent::IsForward)
664 { return m_parent && ((wxWindowBase *)m_parent)->DoNavigateIn(flags); }
5f6cfda7 665
a24de76b
VZ
666 // move this window just before/after the specified one in tab order
667 // (the other window must be our sibling!)
668 void MoveBeforeInTabOrder(wxWindow *win)
c944775f 669 { DoMoveInTabOrder(win, OrderBefore); }
a24de76b 670 void MoveAfterInTabOrder(wxWindow *win)
c944775f 671 { DoMoveInTabOrder(win, OrderAfter); }
a24de76b
VZ
672
673
f03fc89f
VZ
674 // parent/children relations
675 // -------------------------
676
677 // get the list of children
678 const wxWindowList& GetChildren() const { return m_children; }
679 wxWindowList& GetChildren() { return m_children; }
680
1978421a
SC
681 // needed just for extended runtime
682 const wxWindowList& GetWindowChildren() const { return GetChildren() ; }
683
c944775f
VZ
684 // get the window before/after this one in the parents children list,
685 // returns NULL if this is the first/last window
686 wxWindow *GetPrevSibling() const { return DoGetSibling(OrderBefore); }
687 wxWindow *GetNextSibling() const { return DoGetSibling(OrderAfter); }
688
f03fc89f
VZ
689 // get the parent or the parent of the parent
690 wxWindow *GetParent() const { return m_parent; }
691 inline wxWindow *GetGrandParent() const;
692
693 // is this window a top level one?
8487f887 694 virtual bool IsTopLevel() const;
f03fc89f 695
87b6002d 696 // it doesn't really change parent, use Reparent() instead
f03fc89f 697 void SetParent( wxWindowBase *parent ) { m_parent = (wxWindow *)parent; }
d4864e97
VZ
698 // change the real parent of this window, return true if the parent
699 // was changed, false otherwise (error or newParent == oldParent)
f03fc89f
VZ
700 virtual bool Reparent( wxWindowBase *newParent );
701
146ba0fe
VZ
702 // implementation mostly
703 virtual void AddChild( wxWindowBase *child );
704 virtual void RemoveChild( wxWindowBase *child );
705
049908c5
VS
706 // returns true if the child is in the client area of the window, i.e. is
707 // not scrollbar, toolbar etc.
708 virtual bool IsClientAreaChild(const wxWindow *WXUNUSED(child)) const
709 { return true; }
710
146ba0fe
VZ
711 // looking for windows
712 // -------------------
713
f03fc89f
VZ
714 // find window among the descendants of this one either by id or by
715 // name (return NULL if not found)
6b73af79
VZ
716 wxWindow *FindWindow(long winid) const;
717 wxWindow *FindWindow(const wxString& name) const;
f03fc89f 718
146ba0fe 719 // Find a window among any window (all return NULL if not found)
d9e2e4c2 720 static wxWindow *FindWindowById( long winid, const wxWindow *parent = NULL );
146ba0fe
VZ
721 static wxWindow *FindWindowByName( const wxString& name,
722 const wxWindow *parent = NULL );
723 static wxWindow *FindWindowByLabel( const wxString& label,
724 const wxWindow *parent = NULL );
f03fc89f
VZ
725
726 // event handler stuff
727 // -------------------
728
729 // get the current event handler
730 wxEvtHandler *GetEventHandler() const { return m_eventHandler; }
731
732 // replace the event handler (allows to completely subclass the
733 // window)
734 void SetEventHandler( wxEvtHandler *handler ) { m_eventHandler = handler; }
735
736 // push/pop event handler: allows to chain a custom event handler to
737 // alreasy existing ones
738 void PushEventHandler( wxEvtHandler *handler );
d4864e97 739 wxEvtHandler *PopEventHandler( bool deleteHandler = false );
f03fc89f 740
2e36d5cf 741 // find the given handler in the event handler chain and remove (but
d4864e97
VZ
742 // not delete) it from the event handler chain, return true if it was
743 // found and false otherwise (this also results in an assert failure so
2e36d5cf
VZ
744 // this function should only be called when the handler is supposed to
745 // be there)
746 bool RemoveEventHandler(wxEvtHandler *handler);
747
1e6feb95
VZ
748 // validators
749 // ----------
f03fc89f 750
88ac883a 751#if wxUSE_VALIDATORS
f03fc89f
VZ
752 // a window may have an associated validator which is used to control
753 // user input
754 virtual void SetValidator( const wxValidator &validator );
755 virtual wxValidator *GetValidator() { return m_windowValidator; }
88ac883a 756#endif // wxUSE_VALIDATORS
f03fc89f 757
f03fc89f
VZ
758
759 // dialog oriented functions
760 // -------------------------
761
d4864e97 762 // validate the correctness of input, return true if ok
f03fc89f
VZ
763 virtual bool Validate();
764
765 // transfer data between internal and GUI representations
766 virtual bool TransferDataToWindow();
767 virtual bool TransferDataFromWindow();
768
769 virtual void InitDialog();
770
88ac883a 771#if wxUSE_ACCEL
f03fc89f
VZ
772 // accelerators
773 // ------------
774 virtual void SetAcceleratorTable( const wxAcceleratorTable& accel )
775 { m_acceleratorTable = accel; }
776 wxAcceleratorTable *GetAcceleratorTable()
777 { return &m_acceleratorTable; }
5048c832 778
540b6b09
VZ
779#endif // wxUSE_ACCEL
780
781#if wxUSE_HOTKEY
782 // hot keys (system wide accelerators)
783 // -----------------------------------
784
785 virtual bool RegisterHotKey(int hotkeyId, int modifiers, int keycode);
5048c832 786 virtual bool UnregisterHotKey(int hotkeyId);
540b6b09 787#endif // wxUSE_HOTKEY
5048c832 788
f03fc89f
VZ
789
790 // dialog units translations
791 // -------------------------
792
793 wxPoint ConvertPixelsToDialog( const wxPoint& pt );
794 wxPoint ConvertDialogToPixels( const wxPoint& pt );
795 wxSize ConvertPixelsToDialog( const wxSize& sz )
796 {
797 wxPoint pt(ConvertPixelsToDialog(wxPoint(sz.x, sz.y)));
798
799 return wxSize(pt.x, pt.y);
800 }
801
802 wxSize ConvertDialogToPixels( const wxSize& sz )
803 {
804 wxPoint pt(ConvertDialogToPixels(wxPoint(sz.x, sz.y)));
805
806 return wxSize(pt.x, pt.y);
807 }
808
809 // mouse functions
810 // ---------------
811
812 // move the mouse to the specified position
813 virtual void WarpPointer(int x, int y) = 0;
814
94633ad9
VZ
815 // start or end mouse capture, these functions maintain the stack of
816 // windows having captured the mouse and after calling ReleaseMouse()
817 // the mouse is not released but returns to the window which had had
818 // captured it previously (if any)
819 void CaptureMouse();
820 void ReleaseMouse();
f03fc89f 821
1e6feb95
VZ
822 // get the window which currently captures the mouse or NULL
823 static wxWindow *GetCapture();
824
825 // does this window have the capture?
826 virtual bool HasCapture() const
827 { return (wxWindow *)this == GetCapture(); }
828
f03fc89f
VZ
829 // painting the window
830 // -------------------
831
832 // mark the specified rectangle (or the whole window) as "dirty" so it
833 // will be repainted
d4864e97 834 virtual void Refresh( bool eraseBackground = true,
f03fc89f 835 const wxRect *rect = (const wxRect *) NULL ) = 0;
1e6feb95
VZ
836
837 // a less awkward wrapper for Refresh
8cfa09bd
VZ
838 void RefreshRect(const wxRect& rect, bool eraseBackground = true)
839 {
840 Refresh(eraseBackground, &rect);
841 }
1e6feb95
VZ
842
843 // repaint all invalid areas of the window immediately
844 virtual void Update() { }
845
5da0803c
VZ
846 // clear the window background
847 virtual void ClearBackground();
f03fc89f 848
0cc7251e
VZ
849 // freeze the window: don't redraw it until it is thawed
850 virtual void Freeze() { }
851
852 // thaw the window: redraw it after it had been frozen
853 virtual void Thaw() { }
854
d4a1433f
VZ
855 // return true if window had been frozen and not unthawed yet
856 virtual bool IsFrozen() const { return false; }
857
f03fc89f 858 // adjust DC for drawing on this window
f6147cfc 859 virtual void PrepareDC( wxDC & WXUNUSED(dc) ) { }
f03fc89f 860
2e992e06
VZ
861 // return true if the window contents is double buffered by the system
862 virtual bool IsDoubleBuffered() const { return false; }
863
f03fc89f
VZ
864 // the update region of the window contains the areas which must be
865 // repainted by the program
866 const wxRegion& GetUpdateRegion() const { return m_updateRegion; }
867 wxRegion& GetUpdateRegion() { return m_updateRegion; }
868
1e6feb95
VZ
869 // get the update rectangleregion bounding box in client coords
870 wxRect GetUpdateClientRect() const;
871
f03fc89f
VZ
872 // these functions verify whether the given point/rectangle belongs to
873 // (or at least intersects with) the update region
657b4fd4
RD
874 virtual bool DoIsExposed( int x, int y ) const;
875 virtual bool DoIsExposed( int x, int y, int w, int h ) const;
f03fc89f 876
657b4fd4
RD
877 bool IsExposed( int x, int y ) const
878 { return DoIsExposed(x, y); }
879 bool IsExposed( int x, int y, int w, int h ) const
880 { return DoIsExposed(x, y, w, h); }
f03fc89f 881 bool IsExposed( const wxPoint& pt ) const
657b4fd4 882 { return DoIsExposed(pt.x, pt.y); }
f03fc89f 883 bool IsExposed( const wxRect& rect ) const
657b4fd4 884 { return DoIsExposed(rect.x, rect.y, rect.width, rect.height); }
f03fc89f
VZ
885
886 // colours, fonts and cursors
887 // --------------------------
888
1b69c815
VZ
889 // get the default attributes for the controls of this class: we
890 // provide a virtual function which can be used to query the default
891 // attributes of an existing control and a static function which can
892 // be used even when no existing object of the given class is
893 // available, but which won't return any styles specific to this
894 // particular control, of course (e.g. "Ok" button might have
895 // different -- bold for example -- font)
896 virtual wxVisualAttributes GetDefaultAttributes() const
897 {
898 return GetClassDefaultAttributes(GetWindowVariant());
899 }
900
901 static wxVisualAttributes
902 GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
903
f03fc89f 904 // set/retrieve the window colours (system defaults are used by
b8e7b673 905 // default): SetXXX() functions return true if colour was changed,
f8ff87ed
VS
906 // SetDefaultXXX() reset the "m_inheritXXX" flag after setting the
907 // value to prevent it from being inherited by our children
b8e7b673 908 virtual bool SetBackgroundColour(const wxColour& colour);
fa47d7a7 909 void SetOwnBackgroundColour(const wxColour& colour)
b8e7b673
VZ
910 {
911 if ( SetBackgroundColour(colour) )
f8ff87ed 912 m_inheritBgCol = false;
b8e7b673 913 }
1b69c815 914 wxColour GetBackgroundColour() const;
e5ecf1fc
WS
915 bool InheritsBackgroundColour() const
916 {
917 return m_inheritBgCol;
918 }
919 bool UseBgCol() const
920 {
921 return m_hasBgCol;
922 }
b8e7b673
VZ
923
924 virtual bool SetForegroundColour(const wxColour& colour);
fa47d7a7 925 void SetOwnForegroundColour(const wxColour& colour)
b8e7b673
VZ
926 {
927 if ( SetForegroundColour(colour) )
f8ff87ed 928 m_inheritFgCol = false;
b8e7b673 929 }
1b69c815 930 wxColour GetForegroundColour() const;
f03fc89f 931
50c53860
JS
932 // Set/get the background style.
933 // Pass one of wxBG_STYLE_SYSTEM, wxBG_STYLE_COLOUR, wxBG_STYLE_CUSTOM
934 virtual bool SetBackgroundStyle(wxBackgroundStyle style) { m_backgroundStyle = style; return true; }
935 virtual wxBackgroundStyle GetBackgroundStyle() const { return m_backgroundStyle; }
936
7c7a653b
VZ
937 // returns true if the control has "transparent" areas such as a
938 // wxStaticText and wxCheckBox and the background should be adapted
939 // from a parent window
940 virtual bool HasTransparentBackground() { return false; }
941
b8e7b673
VZ
942 // set/retrieve the font for the window (SetFont() returns true if the
943 // font really changed)
944 virtual bool SetFont(const wxFont& font) = 0;
fa47d7a7 945 void SetOwnFont(const wxFont& font)
b8e7b673
VZ
946 {
947 if ( SetFont(font) )
f8ff87ed 948 m_inheritFont = false;
b8e7b673 949 }
29094af0 950 wxFont GetFont() const;
b8e7b673 951
d4864e97 952 // set/retrieve the cursor for this window (SetCursor() returns true
f03fc89f
VZ
953 // if the cursor was really changed)
954 virtual bool SetCursor( const wxCursor &cursor );
955 const wxCursor& GetCursor() const { return m_cursor; }
f03fc89f 956
789295bf
VZ
957#if wxUSE_CARET
958 // associate a caret with the window
959 void SetCaret(wxCaret *caret);
960 // get the current caret (may be NULL)
961 wxCaret *GetCaret() const { return m_caret; }
962#endif // wxUSE_CARET
963
f03fc89f
VZ
964 // get the (average) character size for the current font
965 virtual int GetCharHeight() const = 0;
966 virtual int GetCharWidth() const = 0;
967
968 // get the width/height/... of the text using current or specified
969 // font
970 virtual void GetTextExtent(const wxString& string,
971 int *x, int *y,
972 int *descent = (int *) NULL,
973 int *externalLeading = (int *) NULL,
974 const wxFont *theFont = (const wxFont *) NULL)
975 const = 0;
976
6b062263
VZ
977 wxSize GetTextExtent(const wxString& string) const
978 {
979 wxCoord w, h;
980 GetTextExtent(string, &w, &h);
981 return wxSize(w, h);
982 }
983
1e6feb95
VZ
984 // client <-> screen coords
985 // ------------------------
986
f03fc89f 987 // translate to/from screen/client coordinates (pointers may be NULL)
dabc0cd5
VZ
988 void ClientToScreen( int *x, int *y ) const
989 { DoClientToScreen(x, y); }
990 void ScreenToClient( int *x, int *y ) const
991 { DoScreenToClient(x, y); }
1e6feb95
VZ
992
993 // wxPoint interface to do the same thing
dabc0cd5
VZ
994 wxPoint ClientToScreen(const wxPoint& pt) const
995 {
996 int x = pt.x, y = pt.y;
997 DoClientToScreen(&x, &y);
998
999 return wxPoint(x, y);
1000 }
1001
1002 wxPoint ScreenToClient(const wxPoint& pt) const
1003 {
1004 int x = pt.x, y = pt.y;
1005 DoScreenToClient(&x, &y);
1006
1007 return wxPoint(x, y);
1008 }
f03fc89f 1009
1e6feb95
VZ
1010 // test where the given (in client coords) point lies
1011 wxHitTest HitTest(wxCoord x, wxCoord y) const
1012 { return DoHitTest(x, y); }
1013
1014 wxHitTest HitTest(const wxPoint& pt) const
1015 { return DoHitTest(pt.x, pt.y); }
1016
f03fc89f
VZ
1017 // misc
1018 // ----
1019
aede4ebb
VZ
1020 // get the window border style from the given flags: this is different from
1021 // simply doing flags & wxBORDER_MASK because it uses GetDefaultBorder() to
1022 // translate wxBORDER_DEFAULT to something reasonable
1023 wxBorder GetBorder(long flags) const;
1024
1025 // get border for the flags of this window
1026 wxBorder GetBorder() const { return GetBorder(GetWindowStyleFlag()); }
1e6feb95 1027
d4864e97 1028 // send wxUpdateUIEvents to this window, and children if recurse is true
e39af974
JS
1029 virtual void UpdateWindowUI(long flags = wxUPDATE_UI_NONE);
1030
1031 // do the window-specific processing after processing the update event
1032 virtual void DoUpdateWindowUI(wxUpdateUIEvent& event) ;
f03fc89f 1033
1e6feb95 1034#if wxUSE_MENUS
00a77b7c
VZ
1035 // show popup menu at the given position, generate events for the items
1036 // selected in it
45b8a256 1037 bool PopupMenu(wxMenu *menu, const wxPoint& pos = wxDefaultPosition)
a1665b22 1038 { return DoPopupMenu(menu, pos.x, pos.y); }
971562cb 1039 bool PopupMenu(wxMenu *menu, int x, int y)
a1665b22 1040 { return DoPopupMenu(menu, x, y); }
00a77b7c
VZ
1041
1042 // simply return the id of the selected item or wxID_NONE without
1043 // generating any events
1044 int GetPopupMenuSelectionFromUser(wxMenu& menu, const wxPoint& pos)
1045 { return DoGetPopupMenuSelectionFromUser(menu, pos.x, pos.y); }
1046 int GetPopupMenuSelectionFromUser(wxMenu& menu, int x, int y)
1047 { return DoGetPopupMenuSelectionFromUser(menu, x, y); }
1e6feb95 1048#endif // wxUSE_MENUS
f03fc89f 1049
e71c530e
VZ
1050 // override this method to return true for controls having multiple pages
1051 virtual bool HasMultiplePages() const { return false; }
1052
1053
f03fc89f
VZ
1054 // scrollbars
1055 // ----------
1056
1e6feb95
VZ
1057 // does the window have the scrollbar for this orientation?
1058 bool HasScrollbar(int orient) const
1059 {
1060 return (m_windowStyle &
1061 (orient == wxHORIZONTAL ? wxHSCROLL : wxVSCROLL)) != 0;
1062 }
1063
f03fc89f
VZ
1064 // configure the window scrollbars
1065 virtual void SetScrollbar( int orient,
1066 int pos,
1e6feb95 1067 int thumbvisible,
f03fc89f 1068 int range,
d4864e97
VZ
1069 bool refresh = true ) = 0;
1070 virtual void SetScrollPos( int orient, int pos, bool refresh = true ) = 0;
f03fc89f
VZ
1071 virtual int GetScrollPos( int orient ) const = 0;
1072 virtual int GetScrollThumb( int orient ) const = 0;
1073 virtual int GetScrollRange( int orient ) const = 0;
1074
1075 // scroll window to the specified position
1076 virtual void ScrollWindow( int dx, int dy,
1077 const wxRect* rect = (wxRect *) NULL ) = 0;
1078
b9b3393e 1079 // scrolls window by line/page: note that not all controls support this
9cd6d737 1080 //
d4864e97
VZ
1081 // return true if the position changed, false otherwise
1082 virtual bool ScrollLines(int WXUNUSED(lines)) { return false; }
1083 virtual bool ScrollPages(int WXUNUSED(pages)) { return false; }
9cd6d737
VZ
1084
1085 // convenient wrappers for ScrollLines/Pages
1086 bool LineUp() { return ScrollLines(-1); }
1087 bool LineDown() { return ScrollLines(1); }
1088 bool PageUp() { return ScrollPages(-1); }
1089 bool PageDown() { return ScrollPages(1); }
b9b3393e 1090
c1142003
VZ
1091 // call this to always show one or both scrollbars, even if the window
1092 // is big enough to not require them
1093 virtual void AlwaysShowScrollbars(bool WXUNUSED(horz) = true,
1094 bool WXUNUSED(vert) = true)
1095 {
1096 }
1097
1098 // return true if AlwaysShowScrollbars() had been called before for the
1099 // corresponding orientation
1100 virtual bool IsScrollbarAlwaysShown(int WXUNUSED(orient)) const
1101 {
1102 return false;
1103 }
1104
bd83cb56
VZ
1105 // context-sensitive help
1106 // ----------------------
1107
1108 // these are the convenience functions wrapping wxHelpProvider methods
1109
1110#if wxUSE_HELP
1111 // associate this help text with this window
1112 void SetHelpText(const wxString& text);
1113 // associate this help text with all windows with the same id as this
1114 // one
1115 void SetHelpTextForId(const wxString& text);
dc6588e7
VZ
1116 // get the help string associated with the given position in this window
1117 //
1118 // notice that pt may be invalid if event origin is keyboard or unknown
1119 // and this method should return the global window help text then
1120 virtual wxString GetHelpTextAtPoint(const wxPoint& pt,
1121 wxHelpEvent::Origin origin) const;
1122 // returns the position-independent help text
1123 wxString GetHelpText() const
1124 {
1125 return GetHelpTextAtPoint(wxDefaultPosition, wxHelpEvent::Origin_Unknown);
1126 }
1127
1128#else // !wxUSE_HELP
6c3c55cf
VZ
1129 // silently ignore SetHelpText() calls
1130 void SetHelpText(const wxString& WXUNUSED(text)) { }
1131 void SetHelpTextForId(const wxString& WXUNUSED(text)) { }
bd83cb56
VZ
1132#endif // wxUSE_HELP
1133
f03fc89f
VZ
1134 // tooltips
1135 // --------
bd83cb56 1136
f03fc89f
VZ
1137#if wxUSE_TOOLTIPS
1138 // the easiest way to set a tooltip for a window is to use this method
1139 void SetToolTip( const wxString &tip );
1140 // attach a tooltip to the window
1141 void SetToolTip( wxToolTip *tip ) { DoSetToolTip(tip); }
1142 // get the associated tooltip or NULL if none
1143 wxToolTip* GetToolTip() const { return m_tooltip; }
311a173b 1144 wxString GetToolTipText() const ;
7649d8fc
JS
1145#else
1146 // make it much easier to compile apps in an environment
1147 // that doesn't support tooltips, such as PocketPC
1148 inline void SetToolTip( const wxString & WXUNUSED(tip) ) {}
f03fc89f
VZ
1149#endif // wxUSE_TOOLTIPS
1150
1151 // drag and drop
1152 // -------------
1153#if wxUSE_DRAG_AND_DROP
1154 // set/retrieve the drop target associated with this window (may be
1155 // NULL; it's owned by the window and will be deleted by it)
1156 virtual void SetDropTarget( wxDropTarget *dropTarget ) = 0;
1157 virtual wxDropTarget *GetDropTarget() const { return m_dropTarget; }
1158#endif // wxUSE_DRAG_AND_DROP
1159
1160 // constraints and sizers
1161 // ----------------------
1162#if wxUSE_CONSTRAINTS
1163 // set the constraints for this window or retrieve them (may be NULL)
1164 void SetConstraints( wxLayoutConstraints *constraints );
1165 wxLayoutConstraints *GetConstraints() const { return m_constraints; }
1166
f03fc89f
VZ
1167 // implementation only
1168 void UnsetConstraints(wxLayoutConstraints *c);
1169 wxWindowList *GetConstraintsInvolvedIn() const
1170 { return m_constraintsInvolvedIn; }
1171 void AddConstraintReference(wxWindowBase *otherWin);
1172 void RemoveConstraintReference(wxWindowBase *otherWin);
1173 void DeleteRelatedConstraints();
1174 void ResetConstraints();
1175
90e572f1 1176 // these methods may be overridden for special layout algorithms
d4864e97 1177 virtual void SetConstraintSizes(bool recurse = true);
f03fc89f
VZ
1178 virtual bool LayoutPhase1(int *noChanges);
1179 virtual bool LayoutPhase2(int *noChanges);
4b7f2165 1180 virtual bool DoPhase(int phase);
f03fc89f
VZ
1181
1182 // these methods are virtual but normally won't be overridden
f03fc89f
VZ
1183 virtual void SetSizeConstraint(int x, int y, int w, int h);
1184 virtual void MoveConstraint(int x, int y);
1185 virtual void GetSizeConstraint(int *w, int *h) const ;
1186 virtual void GetClientSizeConstraint(int *w, int *h) const ;
1187 virtual void GetPositionConstraint(int *x, int *y) const ;
1188
461e93f9
JS
1189#endif // wxUSE_CONSTRAINTS
1190
1191 // when using constraints or sizers, it makes sense to update
1192 // children positions automatically whenever the window is resized
1193 // - this is done if autoLayout is on
1194 void SetAutoLayout( bool autoLayout ) { m_autoLayout = autoLayout; }
1195 bool GetAutoLayout() const { return m_autoLayout; }
1196
1197 // lay out the window and its children
1198 virtual bool Layout();
1199
f03fc89f 1200 // sizers
d4864e97
VZ
1201 void SetSizer(wxSizer *sizer, bool deleteOld = true );
1202 void SetSizerAndFit( wxSizer *sizer, bool deleteOld = true );
566d84a7 1203
f03fc89f 1204 wxSizer *GetSizer() const { return m_windowSizer; }
be90c029
RD
1205
1206 // Track if this window is a member of a sizer
1ebfafde 1207 void SetContainingSizer(wxSizer* sizer);
be90c029
RD
1208 wxSizer *GetContainingSizer() const { return m_containingSizer; }
1209
45a959a3
JS
1210 // accessibility
1211 // ----------------------
1212#if wxUSE_ACCESSIBILITY
1213 // Override to create a specific accessible object.
1214 virtual wxAccessible* CreateAccessible();
1215
1216 // Sets the accessible object.
1217 void SetAccessible(wxAccessible* accessible) ;
1218
1219 // Returns the accessible object.
47b378bd 1220 wxAccessible* GetAccessible() { return m_accessible; }
45a959a3
JS
1221
1222 // Returns the accessible object, creating if necessary.
1223 wxAccessible* GetOrCreateAccessible() ;
1224#endif
1225
b137e493 1226
b58d5e2d
RD
1227 // Set window transparency if the platform supports it
1228 virtual bool SetTransparent(wxByte WXUNUSED(alpha)) { return false; }
1229 virtual bool CanSetTransparent() { return false; }
1230
1231
f03fc89f
VZ
1232 // implementation
1233 // --------------
1234
1235 // event handlers
1236 void OnSysColourChanged( wxSysColourChangedEvent& event );
1237 void OnInitDialog( wxInitDialogEvent &event );
72fc5caf 1238 void OnMiddleClick( wxMouseEvent& event );
bd83cb56
VZ
1239#if wxUSE_HELP
1240 void OnHelp(wxHelpEvent& event);
1241#endif // wxUSE_HELP
f03fc89f 1242
e39af974
JS
1243 // virtual function for implementing internal idle
1244 // behaviour
1245 virtual void OnInternalIdle() {}
1246
1247 // call internal idle recursively
5109ae5d 1248// void ProcessInternalIdle() ;
e39af974
JS
1249
1250 // get the handle of the window for the underlying window system: this
d7c24517
VZ
1251 // is only used for wxWin itself or for user code which wants to call
1252 // platform-specific APIs
d22699b5 1253 virtual WXWidget GetHandle() const = 0;
ed4780ea
VZ
1254 // associate the window with a new native handle
1255 virtual void AssociateHandle(WXWidget WXUNUSED(handle)) { }
1256 // dissociate the current native handle from the window
1257 virtual void DissociateHandle() { }
cc2b7472 1258
574c939e
KB
1259#if wxUSE_PALETTE
1260 // Store the palette used by DCs in wxWindow so that the dcs can share
1261 // a palette. And we can respond to palette messages.
1262 wxPalette GetPalette() const { return m_palette; }
b95edd47 1263
574c939e
KB
1264 // When palette is changed tell the DC to set the system palette to the
1265 // new one.
b95edd47
VZ
1266 void SetPalette(const wxPalette& pal);
1267
1268 // return true if we have a specific palette
1269 bool HasCustomPalette() const { return m_hasCustomPalette; }
1270
1271 // return the first parent window with a custom palette or NULL
1272 wxWindow *GetAncestorWithCustomPalette() const;
574c939e
KB
1273#endif // wxUSE_PALETTE
1274
b8e7b673
VZ
1275 // inherit the parents visual attributes if they had been explicitly set
1276 // by the user (i.e. we don't inherit default attributes) and if we don't
1277 // have our own explicitly set
1278 virtual void InheritAttributes();
1279
1280 // returns false from here if this window doesn't want to inherit the
1281 // parents colours even if InheritAttributes() would normally do it
1282 //
1283 // this just provides a simple way to customize InheritAttributes()
1284 // behaviour in the most common case
1285 virtual bool ShouldInheritColours() const { return false; }
1286
c04c7a3d
VS
1287 // returns true if the window can be positioned outside of parent's client
1288 // area (normal windows can't, but e.g. menubar or statusbar can):
1289 virtual bool CanBeOutsideClientArea() const { return false; }
1290
dc797d8e
JS
1291 // returns true if the platform should explicitly apply a theme border. Currently
1292 // used only by Windows
a047aff2
JS
1293 virtual bool CanApplyThemeBorder() const { return true; }
1294
245c5d2e
RD
1295protected:
1296 // event handling specific to wxWindow
1297 virtual bool TryValidator(wxEvent& event);
1298 virtual bool TryParent(wxEvent& event);
1299
c944775f 1300 enum WindowOrder
a24de76b 1301 {
c944775f
VZ
1302 OrderBefore, // insert before the given window
1303 OrderAfter // insert after the given window
a24de76b 1304 };
c944775f
VZ
1305
1306 // common part of GetPrev/NextSibling()
1307 wxWindow *DoGetSibling(WindowOrder order) const;
1308
1309 // common part of MoveBefore/AfterInTabOrder()
1310 virtual void DoMoveInTabOrder(wxWindow *win, WindowOrder move);
4caf847c 1311
5644933f
VZ
1312 // implementation of Navigate() and NavigateIn()
1313 virtual bool DoNavigateIn(int flags);
1314
ec5bb70d
VZ
1315#if wxUSE_CONSTRAINTS
1316 // satisfy the constraints for the windows but don't set the window sizes
1317 void SatisfyConstraints();
1318#endif // wxUSE_CONSTRAINTS
566d84a7 1319
7de59551
RD
1320 // Send the wxWindowDestroyEvent
1321 void SendDestroyEvent();
1322
0fe02759
VS
1323 // returns the main window of composite control; this is the window
1324 // that FindFocus returns if the focus is in one of composite control's
1325 // windows
6fb99eb3 1326 virtual wxWindow *GetMainWindowOfCompositeControl()
0fe02759
VS
1327 { return (wxWindow*)this; }
1328
47a8a4d5
VZ
1329 // this method should be implemented to use operating system specific code
1330 // to really enable/disable the widget, it will only be called when we
1331 // really need to enable/disable window and so no additional checks on the
1332 // widgets state are necessary
1333 virtual void DoEnable(bool WXUNUSED(enable)) { }
1334
1335 // called when the on-screen widget state changes and provides an
1336 // an opportunity for the widget to update its visual state (colours,
1337 // fonts, anything else) as necessary
1338 virtual void OnEnabled(bool WXUNUSED(enabled)) { }
1339
1340
7af6f327 1341 // the window id - a number which uniquely identifies a window among
a0d9c6cb 1342 // its siblings unless it is wxID_ANY
f03fc89f 1343 wxWindowID m_windowId;
456bc6d9 1344
f03fc89f
VZ
1345 // the parent window of this window (or NULL) and the list of the children
1346 // of this window
1347 wxWindow *m_parent;
1348 wxWindowList m_children;
1349
1350 // the minimal allowed size for the window (no minimal size if variable(s)
a0d9c6cb 1351 // contain(s) wxDefaultCoord)
ec5bb70d
VZ
1352 int m_minWidth,
1353 m_minHeight,
1354 m_maxWidth,
1355 m_maxHeight;
f03fc89f
VZ
1356
1357 // event handler for this window: usually is just 'this' but may be
1358 // changed with SetEventHandler()
1359 wxEvtHandler *m_eventHandler;
1360
88ac883a 1361#if wxUSE_VALIDATORS
f03fc89f
VZ
1362 // associated validator or NULL if none
1363 wxValidator *m_windowValidator;
88ac883a 1364#endif // wxUSE_VALIDATORS
f03fc89f
VZ
1365
1366#if wxUSE_DRAG_AND_DROP
1367 wxDropTarget *m_dropTarget;
1368#endif // wxUSE_DRAG_AND_DROP
1369
1370 // visual window attributes
1371 wxCursor m_cursor;
1b69c815
VZ
1372 wxFont m_font; // see m_hasFont
1373 wxColour m_backgroundColour, // m_hasBgCol
1374 m_foregroundColour; // m_hasFgCol
f03fc89f 1375
789295bf
VZ
1376#if wxUSE_CARET
1377 wxCaret *m_caret;
1378#endif // wxUSE_CARET
1379
f03fc89f
VZ
1380 // the region which should be repainted in response to paint event
1381 wxRegion m_updateRegion;
1382
88ac883a 1383#if wxUSE_ACCEL
f03fc89f
VZ
1384 // the accelerator table for the window which translates key strokes into
1385 // command events
1386 wxAcceleratorTable m_acceleratorTable;
88ac883a 1387#endif // wxUSE_ACCEL
f03fc89f 1388
f03fc89f
VZ
1389 // the tooltip for this window (may be NULL)
1390#if wxUSE_TOOLTIPS
1391 wxToolTip *m_tooltip;
1392#endif // wxUSE_TOOLTIPS
1393
1394 // constraints and sizers
1395#if wxUSE_CONSTRAINTS
1396 // the constraints for this window or NULL
1397 wxLayoutConstraints *m_constraints;
1398
1399 // constraints this window is involved in
1400 wxWindowList *m_constraintsInvolvedIn;
461e93f9 1401#endif // wxUSE_CONSTRAINTS
f03fc89f 1402
be90c029 1403 // this window's sizer
f03fc89f 1404 wxSizer *m_windowSizer;
be90c029
RD
1405
1406 // The sizer this window is a member of, if any
1407 wxSizer *m_containingSizer;
f03fc89f
VZ
1408
1409 // Layout() window automatically when its size changes?
1410 bool m_autoLayout:1;
f03fc89f 1411
f35fdf7e
VZ
1412 // true if we had automatically allocated the id value for this window
1413 // (i.e. wxID_ANY had been passed to the ctor)
1414 bool m_freeId:1;
1415
f03fc89f
VZ
1416 // window state
1417 bool m_isShown:1;
1418 bool m_isEnabled:1;
1419 bool m_isBeingDeleted:1;
1420
23895080
VZ
1421 // was the window colours/font explicitly changed by user?
1422 bool m_hasBgCol:1;
1423 bool m_hasFgCol:1;
1424 bool m_hasFont:1;
a0d9c6cb 1425
f8ff87ed
VS
1426 // and should it be inherited by children?
1427 bool m_inheritBgCol:1;
1428 bool m_inheritFgCol:1;
1429 bool m_inheritFont:1;
23895080 1430
f03fc89f 1431 // window attributes
d80cd92a
VZ
1432 long m_windowStyle,
1433 m_exStyle;
f03fc89f 1434 wxString m_windowName;
a2d93e73 1435 bool m_themeEnabled;
50c53860 1436 wxBackgroundStyle m_backgroundStyle;
071e5fd9 1437#if wxUSE_PALETTE
574c939e 1438 wxPalette m_palette;
b95edd47
VZ
1439 bool m_hasCustomPalette;
1440#endif // wxUSE_PALETTE
574c939e 1441
45a959a3
JS
1442#if wxUSE_ACCESSIBILITY
1443 wxAccessible* m_accessible;
1444#endif
2654f7e4 1445
566d84a7
RL
1446 // Virtual size (scrolling)
1447 wxSize m_virtualSize;
1448
f4fe2f20
RR
1449 wxScrollHelper *m_scrollHelper;
1450
566d84a7
RL
1451 int m_minVirtualWidth; // VirtualSizeHints
1452 int m_minVirtualHeight;
1453 int m_maxVirtualWidth;
1454 int m_maxVirtualHeight;
400a9e41 1455
69d90995 1456 wxWindowVariant m_windowVariant ;
45e0dc94 1457
1e6feb95
VZ
1458 // override this to change the default (i.e. used when no style is
1459 // specified) border for the window class
1460 virtual wxBorder GetDefaultBorder() const;
1461
a047aff2
JS
1462 // this allows you to implement standard control borders without
1463 // repeating the code in different classes that are not derived from
1464 // wxControl
dc797d8e 1465 virtual wxBorder GetDefaultBorderForControl() const { return wxBORDER_THEME; }
a047aff2 1466
5c2be659
RD
1467 // Get the default size for the new window if no explicit size given. TLWs
1468 // have their own default size so this is just for non top-level windows.
a0d9c6cb
WS
1469 static int WidthDefault(int w) { return w == wxDefaultCoord ? 20 : w; }
1470 static int HeightDefault(int h) { return h == wxDefaultCoord ? 20 : h; }
f03fc89f 1471
9f884528
RD
1472
1473 // Used to save the results of DoGetBestSize so it doesn't need to be
1474 // recalculated each time the value is needed.
1475 wxSize m_bestSizeCache;
1476
170acdc9
RD
1477 wxDEPRECATED( void SetBestSize(const wxSize& size) ); // use SetInitialSize
1478 wxDEPRECATED( virtual void SetInitialBestSize(const wxSize& size) ); // use SetInitialSize
d3b5db4b 1479
a0d9c6cb 1480
d3b5db4b 1481
f03fc89f
VZ
1482 // more pure virtual functions
1483 // ---------------------------
1484
1485 // NB: we must have DoSomething() function when Something() is an overloaded
1486 // method: indeed, we can't just have "virtual Something()" in case when
1487 // the function is overloaded because then we'd have to make virtual all
1488 // the variants (otherwise only the virtual function may be called on a
1489 // pointer to derived class according to C++ rules) which is, in
1490 // general, absolutely not needed. So instead we implement all
1491 // overloaded Something()s in terms of DoSomething() which will be the
1492 // only one to be virtual.
1493
dabc0cd5
VZ
1494 // coordinates translation
1495 virtual void DoClientToScreen( int *x, int *y ) const = 0;
1496 virtual void DoScreenToClient( int *x, int *y ) const = 0;
1497
1e6feb95
VZ
1498 virtual wxHitTest DoHitTest(wxCoord x, wxCoord y) const;
1499
94633ad9 1500 // capture/release the mouse, used by Capture/ReleaseMouse()
a83e1475
VZ
1501 virtual void DoCaptureMouse() = 0;
1502 virtual void DoReleaseMouse() = 0;
be90c029 1503
f03fc89f 1504 // retrieve the position/size of the window
3c81c9aa
VZ
1505 virtual void DoGetPosition(int *x, int *y) const = 0;
1506 virtual void DoGetScreenPosition(int *x, int *y) const;
1507 virtual void DoGetSize(int *width, int *height) const = 0;
1508 virtual void DoGetClientSize(int *width, int *height) const = 0;
f03fc89f 1509
f68586e5
VZ
1510 // get the size which best suits the window: for a control, it would be
1511 // the minimal size which doesn't truncate the control, for a panel - the
1512 // same size as it would have after a call to Fit()
1513 virtual wxSize DoGetBestSize() const;
1514
ee146bca
VZ
1515 // called from DoGetBestSize() to convert best virtual size (returned by
1516 // the window sizer) to the best size for the window itself; this is
1517 // overridden at wxScrolledWindow level to clump down virtual size to real
1518 virtual wxSize GetWindowSizeForVirtualSize(const wxSize& size) const
1519 {
1520 return size;
1521 }
1522
f03fc89f
VZ
1523 // this is the virtual function to be overriden in any derived class which
1524 // wants to change how SetSize() or Move() works - it is called by all
1525 // versions of these functions in the base class
1526 virtual void DoSetSize(int x, int y,
1527 int width, int height,
1528 int sizeFlags = wxSIZE_AUTO) = 0;
1529
1530 // same as DoSetSize() for the client size
1531 virtual void DoSetClientSize(int width, int height) = 0;
1532
b2e10dac
PC
1533 virtual void DoSetSizeHints( int minW, int minH,
1534 int maxW, int maxH,
1535 int incW, int incH );
1536
9d9b7755
VZ
1537 // move the window to the specified location and resize it: this is called
1538 // from both DoSetSize() and DoSetClientSize() and would usually just
1539 // reposition this window except for composite controls which will want to
1540 // arrange themselves inside the given rectangle
69deca26
VS
1541 //
1542 // Important note: the coordinates passed to this method are in parent's
1543 // *window* coordinates and not parent's client coordinates (as the values
1544 // passed to DoSetSize and returned by DoGetPosition are)!
9d9b7755
VZ
1545 virtual void DoMoveWindow(int x, int y, int width, int height) = 0;
1546
1f464296
VZ
1547 // centre the window in the specified direction on parent, note that
1548 // wxCENTRE_ON_SCREEN shouldn't be specified here, it only makes sense for
1549 // TLWs
1550 virtual void DoCentre(int dir);
1551
f03fc89f
VZ
1552#if wxUSE_TOOLTIPS
1553 virtual void DoSetToolTip( wxToolTip *tip );
1554#endif // wxUSE_TOOLTIPS
1555
1e6feb95 1556#if wxUSE_MENUS
971562cb 1557 virtual bool DoPopupMenu(wxMenu *menu, int x, int y) = 0;
1e6feb95 1558#endif // wxUSE_MENUS
a1665b22 1559
716e96df
VZ
1560 // Makes an adjustment to the window position to make it relative to the
1561 // parents client area, e.g. if the parent is a frame with a toolbar, its
1562 // (0, 0) is just below the toolbar
1563 virtual void AdjustForParentClientOrigin(int& x, int& y,
1564 int sizeFlags = 0) const;
8d99be5f 1565
69d90995
SC
1566 // implements the window variants
1567 virtual void DoSetWindowVariant( wxWindowVariant variant ) ;
45e0dc94 1568
63e819f2 1569 // Must be called when mouse capture is lost to send
72f8c792
VS
1570 // wxMouseCaptureLostEvent to windows on capture stack.
1571 static void NotifyCaptureLost();
63e819f2 1572
f03fc89f 1573private:
47a8a4d5
VZ
1574 // recursively call our own and our children OnEnabled() when the
1575 // enabled/disabled status changed because a parent window had been
1576 // enabled/disabled
1577 void NotifyWindowOnEnableChange(bool enabled);
1578
00a77b7c
VZ
1579#if wxUSE_MENUS
1580 // temporary event handler used by GetPopupMenuSelectionFromUser()
1581 void InternalOnPopupMenu(wxCommandEvent& event);
1582
1583 // implementation of the public GetPopupMenuSelectionFromUser() method
1584 int DoGetPopupMenuSelectionFromUser(wxMenu& menu, int x, int y);
1585#endif // wxUSE_MENUS
47a8a4d5 1586
a83e1475 1587 // the stack of windows which have captured the mouse
b5dbe15d 1588 static struct WXDLLIMPEXP_FWD_CORE wxWindowNext *ms_winCaptureNext;
63e819f2
VS
1589 // the window that currently has mouse capture
1590 static wxWindow *ms_winCaptureCurrent;
1591 // indicates if execution is inside CaptureMouse/ReleaseMouse
1592 static bool ms_winCaptureChanging;
a83e1475 1593
1e6feb95
VZ
1594 DECLARE_ABSTRACT_CLASS(wxWindowBase)
1595 DECLARE_NO_COPY_CLASS(wxWindowBase)
f03fc89f
VZ
1596 DECLARE_EVENT_TABLE()
1597};
1598
170acdc9
RD
1599
1600
1601// Inlines for some deprecated methods
1602inline wxSize wxWindowBase::GetBestFittingSize() const
1603{
1604 return GetEffectiveMinSize();
1605}
1606
1607inline void wxWindowBase::SetBestFittingSize(const wxSize& size)
1608{
1609 SetInitialSize(size);
1610}
1611
1612inline void wxWindowBase::SetBestSize(const wxSize& size)
1613{
1614 SetInitialSize(size);
1615}
1616
1617inline void wxWindowBase::SetInitialBestSize(const wxSize& size)
1618{
1619 SetInitialSize(size);
1620}
1621
1622
f03fc89f
VZ
1623// ----------------------------------------------------------------------------
1624// now include the declaration of wxWindow class
1625// ----------------------------------------------------------------------------
1626
1e6feb95 1627// include the declaration of the platform-specific class
4055ed82 1628#if defined(__WXPALMOS__)
ffecfa5a
JS
1629 #ifdef __WXUNIVERSAL__
1630 #define wxWindowNative wxWindowPalm
1631 #else // !wxUniv
1632 #define wxWindowPalm wxWindow
1633 #endif // wxUniv/!wxUniv
1634 #include "wx/palmos/window.h"
1635#elif defined(__WXMSW__)
a5b3669d
VZ
1636 #ifdef __WXUNIVERSAL__
1637 #define wxWindowNative wxWindowMSW
1638 #else // !wxUniv
1e6feb95 1639 #define wxWindowMSW wxWindow
a5b3669d 1640 #endif // wxUniv/!wxUniv
f03fc89f 1641 #include "wx/msw/window.h"
2049ba38 1642#elif defined(__WXMOTIF__)
f03fc89f 1643 #include "wx/motif/window.h"
1be7a35c 1644#elif defined(__WXGTK20__)
a5b3669d
VZ
1645 #ifdef __WXUNIVERSAL__
1646 #define wxWindowNative wxWindowGTK
1647 #else // !wxUniv
1e6feb95 1648 #define wxWindowGTK wxWindow
1e6feb95 1649 #endif // wxUniv
f03fc89f 1650 #include "wx/gtk/window.h"
1be7a35c
MR
1651#elif defined(__WXGTK__)
1652 #ifdef __WXUNIVERSAL__
1653 #define wxWindowNative wxWindowGTK
1654 #else // !wxUniv
1655 #define wxWindowGTK wxWindow
1656 #endif // wxUniv
1657 #include "wx/gtk1/window.h"
83df96d6
JS
1658#elif defined(__WXX11__)
1659 #ifdef __WXUNIVERSAL__
1660 #define wxWindowNative wxWindowX11
1661 #else // !wxUniv
1662 #define wxWindowX11 wxWindow
83df96d6
JS
1663 #endif // wxUniv
1664 #include "wx/x11/window.h"
711c76db 1665#elif defined(__WXMGL__)
b3c86150 1666 #define wxWindowNative wxWindowMGL
386c7058 1667 #include "wx/mgl/window.h"
b3c86150
VS
1668#elif defined(__WXDFB__)
1669 #define wxWindowNative wxWindowDFB
1670 #include "wx/dfb/window.h"
34138703 1671#elif defined(__WXMAC__)
e766c8a9
SC
1672 #ifdef __WXUNIVERSAL__
1673 #define wxWindowNative wxWindowMac
1674 #else // !wxUniv
1675 #define wxWindowMac wxWindow
e766c8a9 1676 #endif // wxUniv
f03fc89f 1677 #include "wx/mac/window.h"
e64df9bc
DE
1678#elif defined(__WXCOCOA__)
1679 #ifdef __WXUNIVERSAL__
1680 #define wxWindowNative wxWindowCocoa
1681 #else // !wxUniv
1682 #define wxWindowCocoa wxWindow
e64df9bc
DE
1683 #endif // wxUniv
1684 #include "wx/cocoa/window.h"
1777b9bb 1685#elif defined(__WXPM__)
210a651b
DW
1686 #ifdef __WXUNIVERSAL__
1687 #define wxWindowNative wxWindowOS2
1688 #else // !wxUniv
1689 #define wxWindowOS2 wxWindow
210a651b 1690 #endif // wxUniv/!wxUniv
1777b9bb 1691 #include "wx/os2/window.h"
c801d85f
KB
1692#endif
1693
1e6feb95
VZ
1694// for wxUniversal, we now derive the real wxWindow from wxWindow<platform>,
1695// for the native ports we already have defined it above
1696#if defined(__WXUNIVERSAL__)
a5b3669d
VZ
1697 #ifndef wxWindowNative
1698 #error "wxWindowNative must be defined above!"
1699 #endif
1700
1e6feb95
VZ
1701 #include "wx/univ/window.h"
1702#endif // wxUniv
1703
f03fc89f
VZ
1704// ----------------------------------------------------------------------------
1705// inline functions which couldn't be declared in the class body because of
1706// forward dependencies
1707// ----------------------------------------------------------------------------
1708
bacd69f9 1709inline wxWindow *wxWindowBase::GetGrandParent() const
f03fc89f
VZ
1710{
1711 return m_parent ? m_parent->GetParent() : (wxWindow *)NULL;
1712}
1713
1714// ----------------------------------------------------------------------------
3723b7b1 1715// global functions
f03fc89f
VZ
1716// ----------------------------------------------------------------------------
1717
3723b7b1
JS
1718// Find the wxWindow at the current mouse position, also returning the mouse
1719// position.
16cba29d 1720extern WXDLLEXPORT wxWindow* wxFindWindowAtPointer(wxPoint& pt);
3723b7b1
JS
1721
1722// Get the current mouse position.
16cba29d 1723extern WXDLLEXPORT wxPoint wxGetMousePosition();
3723b7b1 1724
1e6feb95 1725// get the currently active window of this application or NULL
16cba29d 1726extern WXDLLEXPORT wxWindow *wxGetActiveWindow();
1e6feb95 1727
33b494d6
VZ
1728// get the (first) top level parent window
1729WXDLLEXPORT wxWindow* wxGetTopLevelParent(wxWindow *win);
1730
40ff126a
WS
1731#if WXWIN_COMPATIBILITY_2_6
1732 // deprecated (doesn't start with 'wx' prefix), use wxWindow::NewControlId()
1733 wxDEPRECATED( int NewControlId() );
1734 inline int NewControlId() { return wxWindowBase::NewControlId(); }
1735#endif // WXWIN_COMPATIBILITY_2_6
f03fc89f 1736
45a959a3
JS
1737#if wxUSE_ACCESSIBILITY
1738// ----------------------------------------------------------------------------
1739// accessible object for windows
1740// ----------------------------------------------------------------------------
1741
1742class WXDLLEXPORT wxWindowAccessible: public wxAccessible
1743{
1744public:
f81387bd 1745 wxWindowAccessible(wxWindow* win): wxAccessible(win) { if (win) win->SetAccessible(this); }
6fb99eb3 1746 virtual ~wxWindowAccessible() {}
45a959a3
JS
1747
1748// Overridables
1749
1750 // Can return either a child object, or an integer
1751 // representing the child element, starting from 1.
1752 virtual wxAccStatus HitTest(const wxPoint& pt, int* childId, wxAccessible** childObject);
1753
1754 // Returns the rectangle for this object (id = 0) or a child element (id > 0).
1755 virtual wxAccStatus GetLocation(wxRect& rect, int elementId);
1756
1757 // Navigates from fromId to toId/toObject.
1758 virtual wxAccStatus Navigate(wxNavDir navDir, int fromId,
1759 int* toId, wxAccessible** toObject);
1760
1761 // Gets the name of the specified object.
1762 virtual wxAccStatus GetName(int childId, wxString* name);
1763
1764 // Gets the number of children.
a37e4a07 1765 virtual wxAccStatus GetChildCount(int* childCount);
45a959a3
JS
1766
1767 // Gets the specified child (starting from 1).
1768 // If *child is NULL and return value is wxACC_OK,
1769 // this means that the child is a simple element and
1770 // not an accessible object.
1771 virtual wxAccStatus GetChild(int childId, wxAccessible** child);
1772
1773 // Gets the parent, or NULL.
1774 virtual wxAccStatus GetParent(wxAccessible** parent);
1775
1776 // Performs the default action. childId is 0 (the action for this object)
1777 // or > 0 (the action for a child).
1778 // Return wxACC_NOT_SUPPORTED if there is no default action for this
1779 // window (e.g. an edit control).
1780 virtual wxAccStatus DoDefaultAction(int childId);
1781
1782 // Gets the default action for this object (0) or > 0 (the action for a child).
1783 // Return wxACC_OK even if there is no action. actionName is the action, or the empty
1784 // string if there is no action.
1785 // The retrieved string describes the action that is performed on an object,
1786 // not what the object does as a result. For example, a toolbar button that prints
1787 // a document has a default action of "Press" rather than "Prints the current document."
1788 virtual wxAccStatus GetDefaultAction(int childId, wxString* actionName);
1789
1790 // Returns the description for this object or a child.
1791 virtual wxAccStatus GetDescription(int childId, wxString* description);
1792
1793 // Returns help text for this object or a child, similar to tooltip text.
1794 virtual wxAccStatus GetHelpText(int childId, wxString* helpText);
1795
1796 // Returns the keyboard shortcut for this object or child.
1797 // Return e.g. ALT+K
1798 virtual wxAccStatus GetKeyboardShortcut(int childId, wxString* shortcut);
1799
1800 // Returns a role constant.
1801 virtual wxAccStatus GetRole(int childId, wxAccRole* role);
1802
1803 // Returns a state constant.
1804 virtual wxAccStatus GetState(int childId, long* state);
1805
1806 // Returns a localized string representing the value for the object
1807 // or child.
1808 virtual wxAccStatus GetValue(int childId, wxString* strValue);
1809
1810 // Selects the object or child.
1811 virtual wxAccStatus Select(int childId, wxAccSelectionFlags selectFlags);
1812
1813 // Gets the window with the keyboard focus.
1814 // If childId is 0 and child is NULL, no object in
1815 // this subhierarchy has the focus.
1816 // If this object has the focus, child should be 'this'.
1817 virtual wxAccStatus GetFocus(int* childId, wxAccessible** child);
1818
ca5c6ac3 1819#if wxUSE_VARIANT
45a959a3
JS
1820 // Gets a variant representing the selected children
1821 // of this object.
1822 // Acceptable values:
d4864e97 1823 // - a null variant (IsNull() returns true)
45a959a3
JS
1824 // - a list variant (GetType() == wxT("list")
1825 // - an integer representing the selected child element,
1826 // or 0 if this object is selected (GetType() == wxT("long")
1827 // - a "void*" pointer to a wxAccessible child object
1828 virtual wxAccStatus GetSelections(wxVariant* selections);
ca5c6ac3 1829#endif // wxUSE_VARIANT
45a959a3
JS
1830};
1831
1832#endif // wxUSE_ACCESSIBILITY
1833
1834
faa49bfd 1835#endif // _WX_WINDOW_H_BASE_