X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/24ce4c1875bf69d896a16c82e879544d86f8c120..c2a738e372126950e5c70f72a3e8876f1ac89bf5:/include/wx/univ/window.h diff --git a/include/wx/univ/window.h b/include/wx/univ/window.h index ba2828e06f..d5aa30e4ba 100644 --- a/include/wx/univ/window.h +++ b/include/wx/univ/window.h @@ -7,49 +7,34 @@ // Modified by: // Created: 06.08.00 // RCS-ID: $Id$ -// Copyright: (c) 2000 Vadim Zeitlin -// Licence: wxWindows license +// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #ifndef _WX_UNIV_WINDOW_H_ #define _WX_UNIV_WINDOW_H_ -#ifdef __GNUG__ - #pragma interface "univwindow.h" -#endif - #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 +#else +#define wxUSE_TWO_WINDOWS 0 +#endif // ---------------------------------------------------------------------------- // wxWindow @@ -61,12 +46,16 @@ enum #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 +class WXDLLIMPEXP_CORE wxWindow : public wxWindowNative { public: - // ctors and creatie functions + // ctors and create functions // --------------------------- wxWindow() { Init(); } @@ -87,6 +76,8 @@ public: long style = 0, const wxString& name = wxPanelNameStr); + virtual ~wxWindow(); + // background pixmap support // ------------------------- @@ -105,13 +96,13 @@ public: 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, - const wxRect* rect = (wxRect *) NULL); + const wxRect* rect = NULL); // take into account the borders here virtual wxPoint GetClientAreaOrigin() const; @@ -122,8 +113,6 @@ public: // 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 @@ -140,37 +129,37 @@ public: // 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; } +#endif // wxUSE_SCROLLBAR // 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 - 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) - 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 - bool UseBgCol() const { return m_hasBgCol; } 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; } @@ -192,29 +181,32 @@ public: // 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 - virtual bool Enable(bool enable = TRUE); + 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); + // should we use the standard control colours or not? + virtual bool ShouldInheritColours() const { return false; } - // 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(); + 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(); - // 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); @@ -223,7 +215,7 @@ protected: // event handlers void OnSize(wxSizeEvent& event); - void OnNcPaint(wxPaintEvent& event); + void OnNcPaint(wxNcPaintEvent& event); void OnPaint(wxPaintEvent& event); void OnErase(wxEraseEvent& event); @@ -236,7 +228,7 @@ protected: 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 @@ -251,6 +243,9 @@ protected: 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; @@ -270,19 +265,25 @@ protected: int m_alignBgBitmap; wxStretch m_stretchBgBitmap; - // 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 + // old size + wxSize m_oldSize; + + // is the mouse currently inside the window? + bool m_isCurrent:1; + +#ifdef __WXMSW__ +public: + // override MSWWindowProc() to process WM_NCHITTEST + WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); +#endif // __WXMSW__ private: + +#if wxUSE_SCROLLBAR // the window scrollbars wxScrollBar *m_scrollbarHorz, *m_scrollbarVert; - - // the stack of windows which have captured the mouse - static struct WXDLLEXPORT wxWindowNext *ms_winCaptureNext; +#endif // wxUSE_SCROLLBAR #if wxUSE_MENUS // the current modal event loop for the popup menu we show or NULL @@ -297,4 +298,3 @@ private: }; #endif // _WX_UNIV_WINDOW_H_ -