]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/univ/window.h
Support using GetTextExtent() with empty string to get descent in wxOSX.
[wxWidgets.git] / include / wx / univ / window.h
index fa1aaec62a59f6da9bd561307987720b9392041d..c8b8444d8acfa746545242adf3b32bc8e57d6be0 100644 (file)
@@ -8,48 +8,27 @@
 // Created:     06.08.00
 // RCS-ID:      $Id$
 // Copyright:   (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
 // Created:     06.08.00
 // RCS-ID:      $Id$
 // Copyright:   (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_UNIV_WINDOW_H_
 #define _WX_UNIV_WINDOW_H_
 
 ///////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_UNIV_WINDOW_H_
 #define _WX_UNIV_WINDOW_H_
 
-#ifdef __GNUG__
-    #pragma interface "univwindow.h"
-#endif
-
 #include "wx/bitmap.h"      // for m_bitmapBg
 
 #include "wx/bitmap.h"      // for m_bitmapBg
 
-class WXDLLEXPORT wxControlRenderer;
-class WXDLLEXPORT wxEventLoop;
-class WXDLLEXPORT wxMenu;
-class WXDLLEXPORT wxMenuBar;
-class WXDLLEXPORT wxRenderer;
-class WXDLLEXPORT wxScrollBar;
+class WXDLLIMPEXP_FWD_CORE wxControlRenderer;
+class WXDLLIMPEXP_FWD_CORE wxEventLoop;
 
 
-// ----------------------------------------------------------------------------
-// constants
-// ----------------------------------------------------------------------------
+#if wxUSE_MENUS
+    class WXDLLIMPEXP_FWD_CORE wxMenu;
+    class WXDLLIMPEXP_FWD_CORE wxMenuBar;
+#endif // wxUSE_MENUS
 
 
-// control state flags used in wxRenderer and wxColourScheme
-enum
-{
-    wxCONTROL_DISABLED   = 0x00000001,  // control is disabled
-    wxCONTROL_FOCUSED    = 0x00000002,  // currently has keyboard focus
-    wxCONTROL_PRESSED    = 0x00000004,  // (button) is pressed
-    wxCONTROL_ISDEFAULT  = 0x00000008,  // only applies to the buttons
-    wxCONTROL_ISSUBMENU  = wxCONTROL_ISDEFAULT, // only for menu items
-    wxCONTROL_CURRENT    = 0x00000010,  // mouse is currently over the control
-    wxCONTROL_SELECTED   = 0x00000020,  // selected item in e.g. listbox
-    wxCONTROL_CHECKED    = 0x00000040,  // (check/radio button) is checked
-    wxCONTROL_CHECKABLE  = 0x00000080,  // (menu) item can be checked
-
-    wxCONTROL_FLAGS_MASK = 0x000000ff,
-
-    // this is a pseudo flag not used directly by wxRenderer but rather by some
-    // controls internally
-    wxCONTROL_DIRTY      = 0x80000000
-};
+class WXDLLIMPEXP_FWD_CORE wxRenderer;
+
+#if wxUSE_SCROLLBAR
+    class WXDLLIMPEXP_FWD_CORE wxScrollBar;
+#endif // wxUSE_SCROLLBAR
 
 #ifdef __WXX11__
 #define wxUSE_TWO_WINDOWS 1
 
 #ifdef __WXX11__
 #define wxUSE_TWO_WINDOWS 1
@@ -65,15 +44,13 @@ enum
 #define wxWindowNative wxWindowMSW
 #elif defined(__WXGTK__)
 #define wxWindowNative wxWindowGTK
 #define wxWindowNative wxWindowMSW
 #elif defined(__WXGTK__)
 #define wxWindowNative wxWindowGTK
-#elif defined(__WXMGL__)
-#define wxWindowNative wxWindowMGL
 #elif defined(__WXX11__)
 #define wxWindowNative wxWindowX11
 #elif defined(__WXMAC__)
 #define wxWindowNative wxWindowMac
 #endif
 
 #elif defined(__WXX11__)
 #define wxWindowNative wxWindowX11
 #elif defined(__WXMAC__)
 #define wxWindowNative wxWindowMac
 #endif
 
-class WXDLLEXPORT wxWindow : public wxWindowNative
+class WXDLLIMPEXP_CORE wxWindow : public wxWindowNative
 {
 public:
     // ctors and create functions
 {
 public:
     // ctors and create functions
@@ -97,6 +74,8 @@ public:
                 long style = 0,
                 const wxString& name = wxPanelNameStr);
 
                 long style = 0,
                 const wxString& name = wxPanelNameStr);
 
+    virtual ~wxWindow();
+
     // background pixmap support
     // -------------------------
 
     // background pixmap support
     // -------------------------
 
@@ -115,13 +94,13 @@ public:
                               int pos,
                               int page,
                               int range,
                               int pos,
                               int page,
                               int range,
-                              bool refresh = TRUE );
-    virtual void SetScrollPos(int orient, int pos, bool refresh = TRUE);
+                              bool refresh = true );
+    virtual void SetScrollPos(int orient, int pos, bool refresh = true);
     virtual int GetScrollPos(int orient) const;
     virtual int GetScrollThumb(int orient) const;
     virtual int GetScrollRange(int orient) const;
     virtual void ScrollWindow(int dx, int dy,
     virtual int GetScrollPos(int orient) const;
     virtual int GetScrollThumb(int orient) const;
     virtual int GetScrollRange(int orient) const;
     virtual void ScrollWindow(int dx, int dy,
-                              const wxRect* rect = (wxRect *) NULL);
+                              const wxRect* rect = NULL);
 
     // take into account the borders here
     virtual wxPoint GetClientAreaOrigin() const;
 
     // take into account the borders here
     virtual wxPoint GetClientAreaOrigin() const;
@@ -132,8 +111,6 @@ public:
     // NB: all menu related functions are implemented in menu.cpp
 
 #if wxUSE_MENUS
     // NB: all menu related functions are implemented in menu.cpp
 
 #if wxUSE_MENUS
-    virtual bool DoPopupMenu(wxMenu *menu, int x, int y);
-
     // this is wxUniv-specific private method to be used only by wxMenu
     void DismissPopupMenu();
 #endif // wxUSE_MENUS
     // this is wxUniv-specific private method to be used only by wxMenu
     void DismissPopupMenu();
 #endif // wxUSE_MENUS
@@ -150,40 +127,36 @@ public:
     // return all state flags at once (combination of wxCONTROL_XXX values)
     int GetStateFlags() const;
 
     // return all state flags at once (combination of wxCONTROL_XXX values)
     int GetStateFlags() const;
 
-    // set the "highlighted" flag and return TRUE if it changed
-    virtual bool SetCurrent(bool doit = TRUE);
+    // set the "highlighted" flag and return true if it changed
+    virtual bool SetCurrent(bool doit = true);
 
 
+#if wxUSE_SCROLLBAR
     // get the scrollbar (may be NULL) for the given orientation
     wxScrollBar *GetScrollbar(int orient) const
     {
         return orient & wxVERTICAL ? m_scrollbarVert : m_scrollbarHorz;
     }
     // get the scrollbar (may be NULL) for the given orientation
     wxScrollBar *GetScrollbar(int orient) const
     {
         return orient & wxVERTICAL ? m_scrollbarVert : m_scrollbarHorz;
     }
+#endif // wxUSE_SCROLLBAR
 
     // methods used by wxColourScheme to choose the colours for this window
     // --------------------------------------------------------------------
 
 
     // methods used by wxColourScheme to choose the colours for this window
     // --------------------------------------------------------------------
 
-    // return TRUE if this is a panel/canvas window which contains other
+    // return true if this is a panel/canvas window which contains other
     // controls only
     // controls only
-    virtual bool IsCanvasWindow() const { return FALSE; }
-
-    // return TRUE if this a container window which contains the other items:
-    // e.g, a listbox, listctrl, treectrl, ... and FALSE if it is a monolithic
-    // control (e.g. a button, checkbox, ...)
-    virtual bool IsContainerWindow() const { return FALSE; }
+    virtual bool IsCanvasWindow() const { return false; }
 
 
-    // return TRUE if this control can be highlighted when the mouse is over
+    // return true if this control can be highlighted when the mouse is over
     // it (the theme decides itself whether it is really highlighted or not)
     // it (the theme decides itself whether it is really highlighted or not)
-    virtual bool CanBeHighlighted() const { return FALSE; }
+    virtual bool CanBeHighlighted() const { return false; }
 
 
-    // return TRUE if we should use the colours/fonts returned by the
+    // return true if we should use the colours/fonts returned by the
     // corresponding GetXXX() methods instead of the default ones
     // corresponding GetXXX() methods instead of the default ones
-    bool UseBgCol() const { return m_hasBgCol; }
     bool UseFgCol() const { return m_hasFgCol; }
     bool UseFont() const { return m_hasFont; }
 
     bool UseFgCol() const { return m_hasFgCol; }
     bool UseFont() const { return m_hasFont; }
 
-    // return TRUE if this window serves as a container for the other windows
+    // return true if this window serves as a container for the other windows
     // only and doesn't get any input itself
     // only and doesn't get any input itself
-    virtual bool IsStaticBox() const { return FALSE; }
+    virtual bool IsStaticBox() const { return false; }
 
     // returns the (low level) renderer to use for drawing the control by
     // querying the current theme
 
     // returns the (low level) renderer to use for drawing the control by
     // querying the current theme
@@ -206,17 +179,32 @@ public:
 
     // the rect coordinates are, for us, in client coords, but if no rect is
     // specified, the entire window is refreshed
 
     // the rect coordinates are, for us, in client coords, but if no rect is
     // specified, the entire window is refreshed
-    virtual void Refresh(bool eraseBackground = TRUE,
+    virtual void Refresh(bool eraseBackground = true,
                          const wxRect *rect = (const wxRect *) NULL);
 
     // we refresh the window when it is dis/enabled
                          const wxRect *rect = (const wxRect *) NULL);
 
     // we refresh the window when it is dis/enabled
-    virtual bool Enable(bool enable = TRUE);
+    virtual bool Enable(bool enable = true);
+
+    // should we use the standard control colours or not?
+    virtual bool ShouldInheritColours() const { return false; }
+
+    virtual bool IsClientAreaChild(const wxWindow *child) const
+    {
+#if wxUSE_SCROLLBAR
+        if ( child == (wxWindow*)m_scrollbarHorz ||
+             child == (wxWindow*)m_scrollbarVert )
+            return false;
+#endif
+        return wxWindowNative::IsClientAreaChild(child);
+    }
 
 protected:
     // common part of all ctors
     void Init();
 
 
 protected:
     // common part of all ctors
     void Init();
 
-    // overridden base class virtuals
+#if wxUSE_MENUS
+    virtual bool DoPopupMenu(wxMenu *menu, int x, int y);
+#endif // wxUSE_MENUS
 
     // we deal with the scrollbars in these functions
     virtual void DoSetClientSize(int width, int height);
 
     // we deal with the scrollbars in these functions
     virtual void DoSetClientSize(int width, int height);
@@ -225,7 +213,7 @@ protected:
 
     // event handlers
     void OnSize(wxSizeEvent& event);
 
     // event handlers
     void OnSize(wxSizeEvent& event);
-    void OnNcPaint(wxPaintEvent& event);
+    void OnNcPaint(wxNcPaintEvent& event);
     void OnPaint(wxPaintEvent& event);
     void OnErase(wxEraseEvent& event);
 
     void OnPaint(wxPaintEvent& event);
     void OnErase(wxEraseEvent& event);
 
@@ -238,7 +226,7 @@ protected:
     void OnKeyUp(wxKeyEvent& event);
 #endif // wxUSE_MENUS
 
     void OnKeyUp(wxKeyEvent& event);
 #endif // wxUSE_MENUS
 
-    // draw the control background, return TRUE if done
+    // draw the control background, return true if done
     virtual bool DoDrawBackground(wxDC& dc);
 
     // draw the controls border
     virtual bool DoDrawBackground(wxDC& dc);
 
     // draw the controls border
@@ -247,11 +235,8 @@ protected:
     // draw the controls contents
     virtual void DoDraw(wxControlRenderer *renderer);
 
     // draw the controls contents
     virtual void DoDraw(wxControlRenderer *renderer);
 
-    // calculate the best size for the client area of the window: default
-    // implementation of DoGetBestSize() uses this method and adds the border
-    // width to the result
-    virtual wxSize DoGetBestClientSize() const;
-    virtual wxSize DoGetBestSize() const;
+    // override the base class method to return the size of the window borders
+    virtual wxSize DoGetBorderSize() const;
 
     // adjust the size of the window to take into account its borders
     wxSize AdjustSize(const wxSize& size) const;
 
     // adjust the size of the window to take into account its borders
     wxSize AdjustSize(const wxSize& size) const;
@@ -271,7 +256,7 @@ protected:
     wxBitmap  m_bitmapBg;
     int       m_alignBgBitmap;
     wxStretch m_stretchBgBitmap;
     wxBitmap  m_bitmapBg;
     int       m_alignBgBitmap;
     wxStretch m_stretchBgBitmap;
-    
+
     // old size
     wxSize m_oldSize;
 
     // old size
     wxSize m_oldSize;
 
@@ -279,14 +264,18 @@ protected:
     bool m_isCurrent:1;
 
 #ifdef __WXMSW__
     bool m_isCurrent:1;
 
 #ifdef __WXMSW__
+public:
     // override MSWWindowProc() to process WM_NCHITTEST
     // override MSWWindowProc() to process WM_NCHITTEST
-    long MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
+    WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
 #endif // __WXMSW__
 
 private:
 #endif // __WXMSW__
 
 private:
+
+#if wxUSE_SCROLLBAR
     // the window scrollbars
     wxScrollBar *m_scrollbarHorz,
                 *m_scrollbarVert;
     // the window scrollbars
     wxScrollBar *m_scrollbarHorz,
                 *m_scrollbarVert;
+#endif // wxUSE_SCROLLBAR
 
 #if wxUSE_MENUS
     // the current modal event loop for the popup menu we show or NULL
 
 #if wxUSE_MENUS
     // the current modal event loop for the popup menu we show or NULL
@@ -301,4 +290,3 @@ private:
 };
 
 #endif // _WX_UNIV_WINDOW_H_
 };
 
 #endif // _WX_UNIV_WINDOW_H_
-