// Modified by: Ron Lee
// Created: 01/02/97
// RCS-ID: $Id$
-// Copyright: (c) wxWidgets team
+// Copyright: (c) Vadim Zeitlin
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// compiled in - it should only be used when building real wxFoo
#ifdef __WXUNIVERSAL__
#define wxUSE_MENUS_NATIVE 0
-#else // __WXMSW__
+#else // !__WXUNIVERSAL__
#define wxUSE_MENUS_NATIVE wxUSE_MENUS
-#endif // __WXUNIVERSAL__/__WXMSW__
+#endif // __WXUNIVERSAL__/!__WXUNIVERSAL__
// ----------------------------------------------------------------------------
// forward declarations
wxWINDOW_VARIANT_MAX
};
+#if wxUSE_SYSTEM_OPTIONS
+ #define wxWINDOW_DEFAULT_VARIANT wxT("window-default-variant")
+#endif
+
// ----------------------------------------------------------------------------
// (pseudo)template list classes
// ----------------------------------------------------------------------------
// global variables
// ----------------------------------------------------------------------------
-WXDLLEXPORT_DATA(extern wxWindowList) wxTopLevelWindows;
+extern WXDLLEXPORT_DATA(wxWindowList) wxTopLevelWindows;
// ----------------------------------------------------------------------------
// wxWindowBase is the base class for all GUI controls/widgets, this is the public
// reset the cached best size value so it will be recalculated the
// next time it is needed.
- void InvalidateBestSize() { m_bestSizeCache = wxDefaultSize; }
+ void InvalidateBestSize();
void CacheBestSize(const wxSize& size) const
{ wxConstCast(this, wxWindowBase)->m_bestSizeCache = size; }
// set min/max size of the window
virtual void SetSizeHints( int minW, int minH,
int maxW = wxDefaultCoord, int maxH = wxDefaultCoord,
- int incW = wxDefaultCoord, int incH = wxDefaultCoord );
+ int incW = wxDefaultCoord, int incH = wxDefaultCoord )
+ {
+ DoSetSizeHints(minW, minH, maxW, maxH, incW, incH);
+ }
+
void SetSizeHints( const wxSize& minSize,
const wxSize& maxSize=wxDefaultSize,
const wxSize& incSize=wxDefaultSize)
{
- SetSizeHints(minSize.x, minSize.y,
- maxSize.x, maxSize.y,
- incSize.x, incSize.y);
+ DoSetSizeHints(minSize.x, minSize.y,
+ maxSize.x, maxSize.y,
+ incSize.x, incSize.y);
}
+ virtual void DoSetSizeHints(int minW, int minH,
+ int maxW = wxDefaultCoord, int maxH = wxDefaultCoord,
+ int incW = wxDefaultCoord, int incH = wxDefaultCoord );
+
virtual void SetVirtualSizeHints( int minW, int minH,
int maxW = wxDefaultCoord, int maxH = wxDefaultCoord );
void SetVirtualSizeHints( const wxSize& minSize,
// Override these methods for windows that have a virtual size
// independent of their client size. eg. the virtual area of a
- // wxScrolledWindow. Default is to alias VirtualSize to ClientSize.
+ // wxScrolledWindow.
virtual void DoSetVirtualSize( int x, int y );
- virtual wxSize DoGetVirtualSize() const; // { return m_virtualSize; }
+ virtual wxSize DoGetVirtualSize() const;
// Return the largest of ClientSize and BestSize (as determined
// by a sizer, interior children, or other means)
virtual bool Enable( bool enable = true );
bool Disable() { return Enable(false); }
- bool IsShown() const { return m_isShown; }
- bool IsEnabled() const { return m_isEnabled; }
+ virtual bool IsShown() const { return m_isShown; }
+ virtual bool IsEnabled() const { return m_isEnabled; }
// get/set window style (setting style won't update the window and so
// is only useful for internal usage)
virtual void SetThemeEnabled(bool enableTheme) { m_themeEnabled = enableTheme; }
virtual bool GetThemeEnabled() const { return m_themeEnabled; }
- // Returns true if this class should have the background colour
- // changed to match the parent window's theme. For example when a
- // page is added to a notebook it and its children may need to have
- // the colours adjusted depending on the current theme settings, but
- // not all windows/controls can do this without looking wrong.
- virtual void ApplyParentThemeBackground(const wxColour& WXUNUSED(bg))
- { /* do nothing */ }
-
// focus and keyboard handling
// ---------------------------
virtual void SetFocusFromKbd() { SetFocus(); }
// return the window which currently has the focus or NULL
- static wxWindow *FindFocus() /* = 0: implement in derived classes */;
+ static wxWindow *FindFocus();
+
+ static wxWindow *DoFindFocus() /* = 0: implement in derived classes */;
// can this window have focus?
virtual bool AcceptsFocus() const { return IsShown() && IsEnabled(); }
// find window among the descendants of this one either by id or by
// name (return NULL if not found)
- wxWindow *FindWindow( long winid );
- wxWindow *FindWindow( const wxString& name );
+ wxWindow *FindWindow(long winid) const;
+ wxWindow *FindWindow(const wxString& name) const;
// Find a window among any window (all return NULL if not found)
static wxWindow *FindWindowById( long winid, const wxWindow *parent = NULL );
const wxRect *rect = (const wxRect *) NULL ) = 0;
// a less awkward wrapper for Refresh
- void RefreshRect(const wxRect& rect) { Refresh(true, &rect); }
+ void RefreshRect(const wxRect& rect, bool eraseBackground = true)
+ {
+ Refresh(eraseBackground, &rect);
+ }
// repaint all invalid areas of the window immediately
virtual void Update() { }
m_inheritBgCol = false;
}
wxColour GetBackgroundColour() const;
+ bool InheritsBackgroundColour() const
+ {
+ return m_inheritBgCol;
+ }
+ bool UseBgCol() const
+ {
+ return m_hasBgCol;
+ }
virtual bool SetForegroundColour(const wxColour& colour);
void SetOwnForegroundColour(const wxColour& colour)
virtual bool SetBackgroundStyle(wxBackgroundStyle style) { m_backgroundStyle = style; return true; }
virtual wxBackgroundStyle GetBackgroundStyle() const { return m_backgroundStyle; }
+ // returns true if the control has "transparent" areas such as a
+ // wxStaticText and wxCheckBox and the background should be adapted
+ // from a parent window
+ virtual bool HasTransparentBackground() { return false; }
+
// set/retrieve the font for the window (SetFont() returns true if the
// font really changed)
virtual bool SetFont(const wxFont& font) = 0;
void SetHelpTextForId(const wxString& text);
// get the help string associated with this window (may be empty)
wxString GetHelpText() const;
+#else
+ // silently ignore SetHelpText() calls
+ void SetHelpText(const wxString& WXUNUSED(text)) { }
+ void SetHelpTextForId(const wxString& WXUNUSED(text)) { }
#endif // wxUSE_HELP
// tooltips
// is only used for wxWin itself or for user code which wants to call
// platform-specific APIs
virtual WXWidget GetHandle() const = 0;
+ // associate the window with a new native handle
+ virtual void AssociateHandle(WXWidget WXUNUSED(handle)) { }
+ // dissociate the current native handle from the window
+ virtual void DissociateHandle() { }
#if wxUSE_PALETTE
// Store the palette used by DCs in wxWindow so that the dcs can share
// behaviour in the most common case
virtual bool ShouldInheritColours() const { return false; }
+ // Reserved for future use
+ virtual void ReservedWindowFunc1() {}
+ virtual void ReservedWindowFunc2() {}
+ virtual void ReservedWindowFunc3() {}
+ virtual void ReservedWindowFunc4() {}
+ virtual void ReservedWindowFunc5() {}
+ virtual void ReservedWindowFunc6() {}
+ virtual void ReservedWindowFunc7() {}
+ virtual void ReservedWindowFunc8() {}
+ virtual void ReservedWindowFunc9() {}
+
protected:
// event handling specific to wxWindow
virtual bool TryValidator(wxEvent& event);
// Send the wxWindowDestroyEvent
void SendDestroyEvent();
+ // returns the main window of composite control; this is the window
+ // that FindFocus returns if the focus is in one of composite control's
+ // windows
+ virtual wxWindow *GetMainWindowOfCompositeControl()
+ { return (wxWindow*)this; }
+
// the window id - a number which uniquely identifies a window among
// its siblings unless it is wxID_ANY
wxWindowID m_windowId;
void SetBestSize(const wxSize& size) { SetBestFittingSize(size); }
// set the initial window size if none is given (i.e. at least one of the
- // components of the size passed to ctor/Create() is -1)
+ // components of the size passed to ctor/Create() is wxDefaultCoord)
//
// normally just calls SetBestSize() for controls, but can be overridden
// not to do it for the controls which have to do some additional
// implements the window variants
virtual void DoSetWindowVariant( wxWindowVariant variant ) ;
+ // Reserved for future use
+ void* m_windowReserved;
+
private:
// contains the last id generated by NewControlId
static int ms_lastControlId;
// ----------------------------------------------------------------------------
// include the declaration of the platform-specific class
-#if defined(__WXMSW__)
+#if defined(__WXPALMOS__)
+ #ifdef __WXUNIVERSAL__
+ #define wxWindowNative wxWindowPalm
+ #else // !wxUniv
+ #define wxWindowPalm wxWindow
+ #endif // wxUniv/!wxUniv
+ #include "wx/palmos/window.h"
+#elif defined(__WXMSW__)
#ifdef __WXUNIVERSAL__
#define wxWindowNative wxWindowMSW
#else // !wxUniv
// Find the wxWindow at the current mouse position, also returning the mouse
// position.
-WXDLLEXPORT extern wxWindow* wxFindWindowAtPointer(wxPoint& pt);
+extern WXDLLEXPORT wxWindow* wxFindWindowAtPointer(wxPoint& pt);
// Get the current mouse position.
-WXDLLEXPORT extern wxPoint wxGetMousePosition();
+extern WXDLLEXPORT wxPoint wxGetMousePosition();
// get the currently active window of this application or NULL
-WXDLLEXPORT extern wxWindow *wxGetActiveWindow();
+extern WXDLLEXPORT wxWindow *wxGetActiveWindow();
// get the (first) top level parent window
WXDLLEXPORT wxWindow* wxGetTopLevelParent(wxWindow *win);
{
public:
wxWindowAccessible(wxWindow* win): wxAccessible(win) { if (win) win->SetAccessible(this); }
- virtual ~wxWindowAccessible() {};
+ virtual ~wxWindowAccessible() {}
// Overridables