X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3417c2cd3d5cb05451270b5a09fe2355406158a3..5ef9f903666c6d4be2b5120d8d531cb3b41fd8c1:/include/wx/window.h diff --git a/include/wx/window.h b/include/wx/window.h index cc2212738b..f78da2dbfc 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -28,6 +28,7 @@ #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 @@ -120,6 +121,7 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, + #if wxUSE_VALIDATORS const wxValidator& validator = wxDefaultValidator, #endif // wxUSE_VALIDATORS @@ -262,6 +264,18 @@ public: return wxSize(w, h); } + // 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; + } + // centre with respect to the the parent window void Centre( int direction = wxBOTH ); void Center( int direction = wxBOTH ) { Centre(direction); } @@ -276,6 +290,11 @@ public: 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 // ------------ @@ -332,7 +351,7 @@ public: 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; } @@ -738,6 +757,26 @@ 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 // --------------------------- @@ -759,6 +798,11 @@ protected: 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 @@ -831,6 +875,8 @@ inline wxWindow *wxWindowBase::GetGrandParent() const // ---------------------------------------------------------------------------- WXDLLEXPORT extern wxWindow* wxGetActiveWindow(); + +// deprecated (doesn't start with 'wx' prefix), use wxWindow::NewControlId() inline WXDLLEXPORT int NewControlId() { return wxWindowBase::NewControlId(); } #endif