#include "wx/validate.h" // for wxDefaultValidator (always include it)
+#if wxUSE_PALETTE
+ #include "wx/dcclient.h"
+ #include "wx/palette.h"
+#endif // wxUSE_PALETTE
+
#if wxUSE_ACCEL
#include "wx/accel.h"
#endif // wxUSE_ACCEL
int maxW = -1, int maxH = -1,
int incW = -1, int incH = -1 );
- int GetMinWidth() const { return m_minWidth; }
- int GetMinHeight() const { return m_minHeight; }
+ virtual int GetMinWidth() const { return m_minWidth; }
+ virtual int GetMinHeight() const { return m_minHeight; }
int GetMaxWidth() const { return m_maxWidth; }
int GetMaxHeight() const { return m_maxHeight; }
// extra style: the less often used style bits which can't be set with
// SetWindowStyleFlag()
- void SetExtraStyle(long exStyle) { m_exStyle = exStyle; }
+ virtual void SetExtraStyle(long exStyle) { m_exStyle = exStyle; }
long GetExtraStyle() const { return m_exStyle; }
// make the window modal (all other windows unresponsive)
void PushEventHandler( wxEvtHandler *handler );
wxEvtHandler *PopEventHandler( bool deleteHandler = FALSE );
+ // find the given handler in the event handler chain and remove (but
+ // not delete) it from the event handler chain, return TRUE if it was
+ // found and FALSE otherwise (this also results in an assert failure so
+ // this function should only be called when the handler is supposed to
+ // be there)
+ bool RemoveEventHandler(wxEvtHandler *handler);
+
// validators
// ----------
// move the mouse to the specified position
virtual void WarpPointer(int x, int y) = 0;
- // start or end mouse capture
- virtual void CaptureMouse() = 0;
- virtual void ReleaseMouse() = 0;
+ // start or end mouse capture, these functions maintain the stack of
+ // windows having captured the mouse and after calling ReleaseMouse()
+ // the mouse is not released but returns to the window which had had
+ // captured it previously (if any)
+ void CaptureMouse();
+ void ReleaseMouse();
// get the window which currently captures the mouse or NULL
static wxWindow *GetCapture();
virtual void GetPositionConstraint(int *x, int *y) const ;
// sizers
- // TODO: what are they and how do they work??
void SetSizer( wxSizer *sizer );
wxSizer *GetSizer() const { return m_windowSizer; }
+
+ // Track if this window is a member of a sizer
+ void SetContainingSizer(wxSizer* sizer) { m_containingSizer = sizer; }
+ wxSizer *GetContainingSizer() const { return m_containingSizer; }
+
#endif // wxUSE_CONSTRAINTS
// backward compatibility
// platform-specific APIs
virtual WXWidget GetHandle() const = 0;
+#if wxUSE_PALETTE
+ // Store the palette used by DCs in wxWindow so that the dcs can share
+ // a palette. And we can respond to palette messages.
+ wxPalette GetPalette() const { return m_palette; }
+
+ // When palette is changed tell the DC to set the system palette to the
+ // new one.
+ void SetPalette(const wxPalette& pal);
+
+ // return true if we have a specific palette
+ bool HasCustomPalette() const { return m_hasCustomPalette; }
+
+ // return the first parent window with a custom palette or NULL
+ wxWindow *GetAncestorWithCustomPalette() const;
+#endif // wxUSE_PALETTE
+
protected:
// the window id - a number which uniquely identifies a window among
// its siblings unless it is -1
// constraints this window is involved in
wxWindowList *m_constraintsInvolvedIn;
- // top level and the parent sizers
- // TODO what's this and how does it work?)
+ // this window's sizer
wxSizer *m_windowSizer;
- wxWindowBase *m_sizerParent;
+
+ // The sizer this window is a member of, if any
+ wxSizer *m_containingSizer;
// Layout() window automatically when its size changes?
bool m_autoLayout:1;
wxString m_windowName;
bool m_themeEnabled;
+#if wxUSE_PALETTE
+ wxPalette m_palette;
+ bool m_hasCustomPalette;
+#endif // wxUSE_PALETTE
+
protected:
+
// common part of all ctors: it is not virtual because it is called from
// ctor
void InitBase();
virtual wxHitTest DoHitTest(wxCoord x, wxCoord y) const;
+ // capture/release the mouse, used by Capture/ReleaseMouse()
+ virtual void DoCaptureMouse() = 0;
+ 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;
// a toolbar that it manages itself).
virtual void AdjustForParentClientOrigin(int& x, int& y, int sizeFlags);
+
private:
+
// contains the last id generated by NewControlId
static int ms_lastControlId;
+ // the stack of windows which have captured the mouse
+ static struct WXDLLEXPORT wxWindowNext *ms_winCaptureNext;
+
DECLARE_ABSTRACT_CLASS(wxWindowBase)
DECLARE_NO_COPY_CLASS(wxWindowBase)
DECLARE_EVENT_TABLE()
#define sm_classwxWindowGTK sm_classwxWindow
#endif // wxUniv
#include "wx/gtk/window.h"
+#elif defined(__WXX11__)
+ #ifdef __WXUNIVERSAL__
+ #define wxWindowNative wxWindowX11
+ #else // !wxUniv
+ #define wxWindowX11 wxWindow
+ #define sm_classwxWindowX11 sm_classwxWindow
+ #endif // wxUniv
+ #include "wx/x11/window.h"
#elif defined(__WXMGL__)
#ifdef __WXUNIVERSAL__
#define wxWindowNative wxWindowMGL