// 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_
-#ifdef __GNUG__
- #pragma interface "window.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
#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 create functions
long style = 0,
const wxString& name = wxPanelNameStr);
+ virtual ~wxWindow();
+
// background pixmap support
// -------------------------
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;
// 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
// 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; }
// 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);
// event handlers
void OnSize(wxSizeEvent& event);
- void OnNcPaint(wxPaintEvent& event);
+ void OnNcPaint(wxNcPaintEvent& event);
void OnPaint(wxPaintEvent& event);
void OnErase(wxEraseEvent& event);
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 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;
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
};
#endif // _WX_UNIV_WINDOW_H_
-