]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/univ/window.h
compilation fixes (apparently, gcc <3.4 didn't validate code in templates that were...
[wxWidgets.git] / include / wx / univ / window.h
index 39949a871fbdbb372edc77e248c0ea6c1862032a..b352f7ff07e97f5ee47261792f5deb62ad8f9319 100644 (file)
@@ -8,13 +8,13 @@
 // 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__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
     #pragma interface "univwindow.h"
 #endif
 
     #pragma interface "univwindow.h"
 #endif
 
@@ -27,29 +27,11 @@ class WXDLLEXPORT wxMenuBar;
 class WXDLLEXPORT wxRenderer;
 class WXDLLEXPORT wxScrollBar;
 
 class WXDLLEXPORT wxRenderer;
 class WXDLLEXPORT wxScrollBar;
 
-// ----------------------------------------------------------------------------
-// constants
-// ----------------------------------------------------------------------------
-
-// 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
-};
+#ifdef __WXX11__
+#define wxUSE_TWO_WINDOWS 1
+#else
+#define wxUSE_TWO_WINDOWS 0
+#endif
 
 // ----------------------------------------------------------------------------
 // wxWindow
 
 // ----------------------------------------------------------------------------
 // wxWindow
@@ -61,6 +43,10 @@ enum
 #define wxWindowNative wxWindowGTK
 #elif defined(__WXMGL__)
 #define wxWindowNative wxWindowMGL
 #define wxWindowNative wxWindowGTK
 #elif defined(__WXMGL__)
 #define wxWindowNative wxWindowMGL
+#elif defined(__WXX11__)
+#define wxWindowNative wxWindowX11
+#elif defined(__WXMAC__)
+#define wxWindowNative wxWindowMac
 #endif
 
 class WXDLLEXPORT wxWindow : public wxWindowNative
 #endif
 
 class WXDLLEXPORT wxWindow : public wxWindowNative
@@ -156,10 +142,15 @@ public:
     // controls only
     virtual bool IsCanvasWindow() const { return FALSE; }
 
     // 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; }
+    // 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; }
+    
+    // to be used with function above: transparent windows get
+    // their background from parents that return TRUE here,
+    // so this is mostly for wxPanel, wxTopLevelWindow etc.
+    virtual bool ProvidesBackground() const { return FALSE; }
 
     // 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)
 
     // 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)
@@ -171,6 +162,10 @@ public:
     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
+    // only and doesn't get any input itself
+    virtual bool IsStaticBox() const { return FALSE; }
+
     // returns the (low level) renderer to use for drawing the control by
     // querying the current theme
     wxRenderer *GetRenderer() const { return m_renderer; }
     // returns the (low level) renderer to use for drawing the control by
     // querying the current theme
     wxRenderer *GetRenderer() const { return m_renderer; }
@@ -186,7 +181,7 @@ public:
 
     // erase part of the control
     virtual void EraseBackground(wxDC& dc, const wxRect& rect);
 
     // erase part of the control
     virtual void EraseBackground(wxDC& dc, const wxRect& rect);
-
+    
     // overridden base class methods
     // -----------------------------
 
     // overridden base class methods
     // -----------------------------
 
@@ -198,17 +193,8 @@ public:
     // we refresh the window when it is dis/enabled
     virtual bool Enable(bool enable = TRUE);
 
     // we refresh the window when it is dis/enabled
     virtual bool Enable(bool enable = TRUE);
 
-    // remember that the font/colour was changed
-    virtual bool SetBackgroundColour(const wxColour& colour);
-    virtual bool SetForegroundColour(const wxColour& colour);
-    virtual bool SetFont(const wxFont& font);
-
-    // our Capture/ReleaseMouse() maintains the stack of windows which had
-    // captured the mouse and when ReleaseMouse() is called, the mouse freed
-    // only if the stack is empty, otherwise it is captured back by the window
-    // on top of the stack
-    virtual void CaptureMouse();
-    virtual void ReleaseMouse();
+    // should we use the standard control colours or not?
+    virtual bool ShouldInheritColours() const { return false; }
 
 protected:
     // common part of all ctors
 
 protected:
     // common part of all ctors
@@ -223,7 +209,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);
 
@@ -264,26 +250,28 @@ protected:
 
     // the renderer we use
     wxRenderer *m_renderer;
 
     // the renderer we use
     wxRenderer *m_renderer;
-
+    
     // background bitmap info
     wxBitmap  m_bitmapBg;
     int       m_alignBgBitmap;
     wxStretch m_stretchBgBitmap;
     // background bitmap info
     wxBitmap  m_bitmapBg;
     int       m_alignBgBitmap;
     wxStretch m_stretchBgBitmap;
+    
+    // old size
+    wxSize m_oldSize;
+
+    // is the mouse currently inside the window?
+    bool m_isCurrent:1;
 
 
-    // more flags
-    bool m_isCurrent:1; // is the mouse currently inside the window?
-    bool m_hasBgCol:1;  // was the bg colour explicitly changed by user?
-    bool m_hasFgCol:1;  //         fg
-    bool m_hasFont:1;   //         font
+#ifdef __WXMSW__
+    // override MSWWindowProc() to process WM_NCHITTEST
+    WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
+#endif // __WXMSW__
 
 private:
     // the window scrollbars
     wxScrollBar *m_scrollbarHorz,
                 *m_scrollbarVert;
 
 
 private:
     // the window scrollbars
     wxScrollBar *m_scrollbarHorz,
                 *m_scrollbarVert;
 
-    // the stack of windows which have captured the mouse
-    static struct WXDLLEXPORT wxWindowNext *ms_winCaptureNext;
-
 #if wxUSE_MENUS
     // the current modal event loop for the popup menu we show or NULL
     static wxEventLoop *ms_evtLoopPopup;
 #if wxUSE_MENUS
     // the current modal event loop for the popup menu we show or NULL
     static wxEventLoop *ms_evtLoopPopup;