#include "wx/font.h" // so we can't do without them
#include "wx/colour.h"
#include "wx/region.h"
+#include "wx/utils.h"
-#if wxUSE_VALIDATORS
- #include "wx/validate.h" // defines wxDefaultValidator
-#endif // wxUSE_VALIDATORS
+#include "wx/validate.h" // for wxDefaultValidator (always include it)
#if wxUSE_ACCEL
#include "wx/accel.h"
// (pseudo)template list classes
// ----------------------------------------------------------------------------
-WX_DECLARE_LIST_3(wxWindow, wxWindowBase, wxWindowList, wxWindowListNode);
+WX_DECLARE_LIST_3(wxWindow, wxWindowBase, wxWindowList, wxWindowListNode, class WXDLLEXPORT);
// ----------------------------------------------------------------------------
// global variables
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
-#if wxUSE_VALIDATORS
const wxValidator& validator = wxDefaultValidator,
-#endif // wxUSE_VALIDATORS
const wxString& name = wxPanelNameStr);
virtual ~wxWindowBase();
return wxSize(w, h);
}
- // centre with respect to the the parent window
+ // get the size best suited for the window (in fact, minimal
+ // acceptable size using which it will still look "nice")
+ wxSize GetBestSize() const { return DoGetBestSize(); }
+ void GetBestSize(int *w, int *h) const
+ {
+ wxSize s = DoGetBestSize();
+ if ( w )
+ *w = s.x;
+ if ( h )
+ *h = s.y;
+ }
+
+ // the generic centre function - centers the window on parent by
+ // default or on screen if it doesn't have parent or
+ // wxCENTER_ON_SCREEN flag is given
void Centre( int direction = wxBOTH );
void Center( int direction = wxBOTH ) { Centre(direction); }
- void CentreOnParent( int dir = wxBOTH ) { Centre(dir | wxCENTER_FRAME); }
- void CenterOnParent( int dir = wxBOTH ) { Centre(dir | wxCENTER_FRAME); }
+
+ // centre on screen (only works for top level windows)
+ void CentreOnScreen(int dir = wxBOTH) { Centre(dir | wxCENTER_ON_SCREEN); }
+ void CenterOnScreen(int dir = wxBOTH) { CentreOnScreen(dir); }
+
+ // centre with respect to the the parent window
+ void CentreOnParent(int dir = wxBOTH) { Centre(dir | wxCENTER_FRAME); }
+ void CenterOnParent(int dir = wxBOTH) { CentreOnParent(dir); }
// set window size to wrap around its children
virtual void Fit();
int maxW = -1, int maxH = -1,
int incW = -1, int incH = -1 );
+ int GetMinWidth() const { return m_minWidth; }
+ int GetMinHeight() const { return m_minHeight; }
+ int GetMaxWidth() const { return m_maxWidth; }
+ int GetMaxHeight() const { return m_maxHeight; }
+
// window state
// ------------
long GetWindowStyle() const { return GetWindowStyleFlag(); }
bool HasFlag(int flag) const { return (m_windowStyle & flag) != 0; }
+ virtual bool IsRetained() const { return HasFlag(wxRETAINED); }
- virtual bool IsRetained() const
- { return (m_windowStyle & wxRETAINED) != 0; }
+ // extra style: the less often used style bits which can't be set with
+ // SetWindowStyleFlag()
+ void SetExtraStyle(long exStyle) { m_exStyle = exStyle; }
+ long GetExtraStyle() const { return m_exStyle; }
// make the window modal (all other windows unresponsive)
virtual void MakeModal(bool modal = TRUE);
inline wxWindow *GetGrandParent() const;
// is this window a top level one?
- bool IsTopLevel() const;
+ virtual bool IsTopLevel() const;
// it doesn't really change parent, use ReParent() instead
void SetParent( wxWindowBase *parent ) { m_parent = (wxWindow *)parent; }
virtual void SetConstraintSizes(bool recurse = TRUE);
virtual bool LayoutPhase1(int *noChanges);
virtual bool LayoutPhase2(int *noChanges);
- virtual bool DoPhase(int);
+ virtual bool DoPhase(int phase);
// these methods are virtual but normally won't be overridden
virtual void SetSizeConstraint(int x, int y, int w, int h);
// event handlers
void OnSysColourChanged( wxSysColourChangedEvent& event );
void OnInitDialog( wxInitDialogEvent &event );
+ void OnMiddleClick( wxMouseEvent& event );
// get the haqndle of the window for the underlying window system: this
// is only used for wxWin itself or for user code which wants to call
bool m_isBeingDeleted:1;
// window attributes
- long m_windowStyle;
+ long m_windowStyle,
+ m_exStyle;
wxString m_windowName;
protected:
static int WidthDefault(int w) { return w == -1 ? 20 : w; }
static int HeightDefault(int h) { return h == -1 ? 20 : h; }
+ // sets the size to be size but take width and/or height from
+ // DoGetBestSize() if width/height of size is -1
+ //
+ // NB: when calling this function from the ctor, the DoGetBestSize() of
+ // the class with the same name as the ctor, not the real (most
+ // derived) one - but this is what we usually want
+ void SetSizeOrDefault(const wxSize& size = wxDefaultSize)
+ {
+ if ( size.x == -1 || size.y == -1 )
+ {
+ wxSize sizeDef = GetBestSize();
+ SetSize( size.x == -1 ? sizeDef.x : size.x,
+ size.y == -1 ? sizeDef.y : size.y);
+ }
+ else
+ {
+ SetSize(size);
+ }
+ }
+
// more pure virtual functions
// ---------------------------
virtual void DoGetSize( int *width, int *height ) const = 0;
virtual void DoGetClientSize( int *width, int *height ) const = 0;
+ // get the size which best suits the window: for a control, it would be
+ // the minimal size which doesn't truncate the control, for a panel - the
+ // same size as it would have after a call to Fit()
+ virtual wxSize DoGetBestSize() const;
+
// this is the virtual function to be overriden in any derived class which
// wants to change how SetSize() or Move() works - it is called by all
// versions of these functions in the base class
// same as DoSetSize() for the client size
virtual void DoSetClientSize(int width, int height) = 0;
+ // move the window to the specified location and resize it: this is called
+ // from both DoSetSize() and DoSetClientSize() and would usually just
+ // reposition this window except for composite controls which will want to
+ // arrange themselves inside the given rectangle
+ virtual void DoMoveWindow(int x, int y, int width, int height) = 0;
+
#if wxUSE_TOOLTIPS
virtual void DoSetToolTip( wxToolTip *tip );
#endif // wxUSE_TOOLTIPS
// ----------------------------------------------------------------------------
WXDLLEXPORT extern wxWindow* wxGetActiveWindow();
+
+// deprecated (doesn't start with 'wx' prefix), use wxWindow::NewControlId()
inline WXDLLEXPORT int NewControlId() { return wxWindowBase::NewControlId(); }
#endif