]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/window.h
Initial commit of wxAUI
[wxWidgets.git] / include / wx / window.h
index ffa36e365e95ea7207207264ac85739721e834e9..abdd96aa052d28129e04f7089fa3422b820471e6 100644 (file)
@@ -5,17 +5,13 @@
 // Modified by: Ron Lee
 // Created:     01/02/97
 // RCS-ID:      $Id$
-// Copyright:   (c) wxWidgets team
+// Copyright:   (c) Vadim Zeitlin
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_WINDOW_H_BASE_
 #define _WX_WINDOW_H_BASE_
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma interface "windowbase.h"
-#endif
-
 // ----------------------------------------------------------------------------
 // headers which we must include here
 // ----------------------------------------------------------------------------
@@ -48,9 +44,9 @@
 // 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
@@ -116,7 +112,8 @@ WX_DECLARE_LIST_3(wxWindow, wxWindowBase, wxWindowList, wxWindowListNode, class
 // global variables
 // ----------------------------------------------------------------------------
 
-WXDLLEXPORT_DATA(extern wxWindowList) wxTopLevelWindows;
+extern WXDLLEXPORT_DATA(wxWindowList) wxTopLevelWindows;
+extern WXDLLIMPEXP_DATA_CORE(wxList) wxPendingDelete;
 
 // ----------------------------------------------------------------------------
 // wxWindowBase is the base class for all GUI controls/widgets, this is the public
@@ -172,19 +169,11 @@ public:
     // window attributes
     // -----------------
 
-        // NB: in future versions of wxWidgets Set/GetTitle() will only work
-        //     with the top level windows (such as dialogs and frames) and
-        //     Set/GetLabel() only with the other ones (i.e. all controls).
-
-        // the title (or label, see below) of the window: the text which the
-        // window shows
-    virtual void SetTitle( const wxString& WXUNUSED(title) ) {}
-    virtual wxString GetTitle() const { return wxEmptyString; }
-
         // label is just the same as the title (but for, e.g., buttons it
-        // makes more sense to speak about labels)
-    virtual void SetLabel(const wxString& label) { SetTitle(label); }
-    virtual wxString GetLabel() const { return GetTitle(); }
+        // makes more sense to speak about labels), title access
+        // is available from wxTLW classes only (frames, dialogs)
+    virtual void SetLabel(const wxString& label) = 0;
+    virtual wxString GetLabel() const = 0;
 
         // the window name is used for ressource setting in X, it is not the
         // same as the window title/label
@@ -234,6 +223,8 @@ public:
     void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING)
         { Move(pt.x, pt.y, flags); }
 
+    void SetPosition(const wxPoint& pt) { Move(pt); }
+
         // Z-order
     virtual void Raise() = 0;
     virtual void Lower() = 0;
@@ -248,18 +239,30 @@ public:
     void SetClientSize(const wxRect& rect)
         { SetClientSize( rect.width, rect.height ); }
 
-        // get the window position and/or size (pointers may be NULL)
+        // get the window position (pointers may be NULL): notice that it is in
+        // client coordinates for child windows and screen coordinates for the
+        // top level ones, use GetScreenPosition() if you need screen
+        // coordinates for all kinds of windows
     void GetPosition( int *x, int *y ) const { DoGetPosition(x, y); }
     wxPoint GetPosition() const
     {
-        int w, h;
-        DoGetPosition(&w, &h);
+        int x, y;
+        DoGetPosition(&x, &y);
 
-        return wxPoint(w, h);
+        return wxPoint(x, y);
     }
 
-    void SetPosition( const wxPoint& pt ) { Move( pt ) ; }
+        // get the window position in screen coordinates
+    void GetScreenPosition(int *x, int *y) const { DoGetScreenPosition(x, y); }
+    wxPoint GetScreenPosition() const
+    {
+        int x, y;
+        DoGetScreenPosition(&x, &y);
+
+        return wxPoint(x, y);
+    }
 
+        // get the window size (pointers may be NULL)
     void GetSize( int *w, int *h ) const { DoGetSize(w, h); }
     wxSize GetSize() const
     {
@@ -268,22 +271,32 @@ public:
         return wxSize(w, h);
     }
 
+    void GetClientSize( int *w, int *h ) const { DoGetClientSize(w, h); }
+    wxSize GetClientSize() const
+    {
+        int w, h;
+        DoGetClientSize(&w, &h);
+
+        return wxSize(w, h);
+    }
+
+        // get the position and size at once
     wxRect GetRect() const
     {
         int x, y, w, h;
-        GetPosition(& x, & y);
-        GetSize(& w, & h);
+        GetPosition(&x, &y);
+        GetSize(&w, &h);
 
         return wxRect(x, y, w, h);
     }
 
-    void GetClientSize( int *w, int *h ) const { DoGetClientSize(w, h); }
-    wxSize GetClientSize() const
+    wxRect GetScreenRect() const
     {
-        int w, h;
-        DoGetClientSize(& w, & h);
+        int x, y, w, h;
+        GetScreenPosition(&x, &y);
+        GetSize(&w, &h);
 
-        return wxSize(w, h);
+        return wxRect(x, y, w, h);
     }
 
         // get the origin of the client area of the window relative to the
@@ -344,15 +357,11 @@ public:
         // the generic centre function - centers the window on parent by`
         // default or on screen if it doesn't have parent or
         // wxCENTER_ON_SCREEN flag is given
-    void Centre( int direction = wxBOTH );
-    void Center( int direction = wxBOTH ) { Centre(direction); }
-
-        // centre on screen (only works for top level windows)
-    void CentreOnScreen(int dir = wxBOTH) { Centre(dir | wxCENTER_ON_SCREEN); }
-    void CenterOnScreen(int dir = wxBOTH) { CentreOnScreen(dir); }
+    void Centre(int dir = wxBOTH) { DoCentre(dir); }
+    void Center(int dir = wxBOTH) { DoCentre(dir); }
 
         // centre with respect to the the parent window
-    void CentreOnParent(int dir = wxBOTH) { Centre(dir | wxCENTER_FRAME); }
+    void CentreOnParent(int dir = wxBOTH) { DoCentre(dir); }
     void CenterOnParent(int dir = wxBOTH) { CentreOnParent(dir); }
 
         // set window size to wrap around its children
@@ -424,10 +433,10 @@ public:
 
         // 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)
@@ -452,8 +461,8 @@ public:
     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)
@@ -482,14 +491,6 @@ public:
     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
     // ---------------------------
@@ -570,8 +571,8 @@ public:
 
         // 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 );
@@ -692,7 +693,10 @@ public:
                           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() { }
@@ -756,13 +760,14 @@ public:
             m_inheritBgCol = false;
     }
     wxColour GetBackgroundColour() const;
-
-    // if the window shouldn't inherit its colour from the parent, override
-    // this function to return true
-    //
-    // this is currently only used by wxMSW and wxUniv but should be useful for
-    // the other ports too
-    virtual bool ProvidesBackground() const { return false; }
+    bool InheritsBackgroundColour() const
+    {
+        return m_inheritBgCol;
+    }
+    bool UseBgCol() const
+    {
+        return m_hasBgCol;
+    }
 
     virtual bool SetForegroundColour(const wxColour& colour);
     void SetOwnForegroundColour(const wxColour& colour)
@@ -777,6 +782,11 @@ public:
     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;
@@ -919,6 +929,10 @@ public:
     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
@@ -963,7 +977,7 @@ public:
     void DeleteRelatedConstraints();
     void ResetConstraints();
 
-        // these methods may be overriden for special layout algorithms
+        // these methods may be overridden for special layout algorithms
     virtual void SetConstraintSizes(bool recurse = true);
     virtual bool LayoutPhase1(int *noChanges);
     virtual bool LayoutPhase2(int *noChanges);
@@ -1258,15 +1272,24 @@ protected:
     virtual void DoReleaseMouse() = 0;
 
     // retrieve the position/size of the window
-    virtual void DoGetPosition( int *x, int *y ) const = 0;
-    virtual void DoGetSize( int *width, int *height ) const = 0;
-    virtual void DoGetClientSize( int *width, int *height ) const = 0;
+    virtual void DoGetPosition(int *x, int *y) const = 0;
+    virtual void DoGetScreenPosition(int *x, int *y) const;
+    virtual void DoGetSize(int *width, int *height) const = 0;
+    virtual void DoGetClientSize(int *width, int *height) const = 0;
 
     // get the size which best suits the window: for a control, it would be
     // the minimal size which doesn't truncate the control, for a panel - the
     // same size as it would have after a call to Fit()
     virtual wxSize DoGetBestSize() const;
 
+    // called from DoGetBestSize() to convert best virtual size (returned by
+    // the window sizer) to the best size for the window itself; this is
+    // overridden at wxScrolledWindow level to clump down virtual size to real
+    virtual wxSize GetWindowSizeForVirtualSize(const wxSize& size) const
+    {
+        return size;
+    }
+
     // this is the virtual function to be overriden in any derived class which
     // wants to change how SetSize() or Move() works - it is called by all
     // versions of these functions in the base class
@@ -1283,6 +1306,11 @@ protected:
     // arrange themselves inside the given rectangle
     virtual void DoMoveWindow(int x, int y, int width, int height) = 0;
 
+    // centre the window in the specified direction on parent, note that
+    // wxCENTRE_ON_SCREEN shouldn't be specified here, it only makes sense for
+    // TLWs
+    virtual void DoCentre(int dir);
+
 #if wxUSE_TOOLTIPS
     virtual void DoSetToolTip( wxToolTip *tip );
 #endif // wxUSE_TOOLTIPS
@@ -1333,13 +1361,20 @@ private:
     #include "wx/msw/window.h"
 #elif defined(__WXMOTIF__)
     #include "wx/motif/window.h"
-#elif defined(__WXGTK__)
+#elif defined(__WXGTK20__)
     #ifdef __WXUNIVERSAL__
         #define wxWindowNative wxWindowGTK
     #else // !wxUniv
         #define wxWindowGTK wxWindow
     #endif // wxUniv
     #include "wx/gtk/window.h"
+#elif defined(__WXGTK__)
+    #ifdef __WXUNIVERSAL__
+        #define wxWindowNative wxWindowGTK
+    #else // !wxUniv
+        #define wxWindowGTK wxWindow
+    #endif // wxUniv
+    #include "wx/gtk1/window.h"
 #elif defined(__WXX11__)
     #ifdef __WXUNIVERSAL__
         #define wxWindowNative wxWindowX11
@@ -1403,19 +1438,22 @@ inline wxWindow *wxWindowBase::GetGrandParent() const
 
 // 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);
 
-// deprecated (doesn't start with 'wx' prefix), use wxWindow::NewControlId()
-inline int NewControlId() { return wxWindowBase::NewControlId(); }
+#if WXWIN_COMPATIBILITY_2_6
+    // deprecated (doesn't start with 'wx' prefix), use wxWindow::NewControlId()
+    wxDEPRECATED( int NewControlId() );
+    inline int NewControlId() { return wxWindowBase::NewControlId(); }
+#endif // WXWIN_COMPATIBILITY_2_6
 
 #if wxUSE_ACCESSIBILITY
 // ----------------------------------------------------------------------------
@@ -1513,6 +1551,4 @@ public:
 #endif // wxUSE_ACCESSIBILITY
 
 
-#endif
-    // _WX_WINDOW_H_BASE_
-
+#endif // _WX_WINDOW_H_BASE_