+ int maxW = wxDefaultCoord, int maxH = wxDefaultCoord,
+ int incW = wxDefaultCoord, int incH = wxDefaultCoord )
+ { DoSetSizeHints(minW, minH, maxW, maxH, incW, incH); }
+
+ void SetSizeHints( const wxSize& minSize,
+ const wxSize& maxSize=wxDefaultSize,
+ const wxSize& incSize=wxDefaultSize)
+ { DoSetSizeHints(minSize.x, minSize.y, maxSize.x, maxSize.y, incSize.x, incSize.y); }
+
+
+#if WXWIN_COMPATIBILITY_2_8
+ // these are useless and do nothing since wxWidgets 2.9
+ wxDEPRECATED( virtual void SetVirtualSizeHints( int minW, int minH,
+ int maxW = wxDefaultCoord, int maxH = wxDefaultCoord ) );
+ wxDEPRECATED( void SetVirtualSizeHints( const wxSize& minSize,
+ const wxSize& maxSize=wxDefaultSize) );
+#endif // WXWIN_COMPATIBILITY_2_8
+
+
+ // Call these to override what GetBestSize() returns. This
+ // method is only virtual because it is overridden in wxTLW
+ // as a different API for SetSizeHints().
+ virtual void SetMinSize(const wxSize& minSize);
+ virtual void SetMaxSize(const wxSize& maxSize);
+
+ // Like Set*Size, but for client, not window, size
+ virtual void SetMinClientSize(const wxSize& size)
+ { SetMinSize(ClientToWindowSize(size)); }
+ virtual void SetMaxClientSize(const wxSize& size)
+ { SetMaxSize(ClientToWindowSize(size)); }
+
+ // Override these methods to impose restrictions on min/max size.
+ // The easier way is to call SetMinSize() and SetMaxSize() which
+ // will have the same effect. Doing both is non-sense.
+ virtual wxSize GetMinSize() const { return wxSize(m_minWidth, m_minHeight); }
+ virtual wxSize GetMaxSize() const { return wxSize(m_maxWidth, m_maxHeight); }
+
+ // Like Get*Size, but for client, not window, size
+ virtual wxSize GetMinClientSize() const
+ { return WindowToClientSize(GetMinSize()); }
+ virtual wxSize GetMaxClientSize() const
+ { return WindowToClientSize(GetMaxSize()); }
+
+ // Get the min and max values one by one
+ int GetMinWidth() const { return GetMinSize().x; }
+ int GetMinHeight() const { return GetMinSize().y; }
+ int GetMaxWidth() const { return GetMaxSize().x; }
+ int GetMaxHeight() const { return GetMaxSize().y; }
+
+
+ // Methods for accessing the virtual size of a window. For most
+ // windows this is just the client area of the window, but for
+ // some like scrolled windows it is more or less independent of
+ // the screen window size. You may override the DoXXXVirtual
+ // methods below for classes where that is the case.
+
+ void SetVirtualSize( const wxSize &size ) { DoSetVirtualSize( size.x, size.y ); }
+ void SetVirtualSize( int x, int y ) { DoSetVirtualSize( x, y ); }
+
+ wxSize GetVirtualSize() const { return DoGetVirtualSize(); }
+ void GetVirtualSize( int *x, int *y ) const
+ {
+ wxSize s( DoGetVirtualSize() );
+
+ if( x )
+ *x = s.GetWidth();
+ if( y )
+ *y = s.GetHeight();
+ }
+
+ // Override these methods for windows that have a virtual size
+ // independent of their client size. eg. the virtual area of a
+ // wxScrolledWindow.
+
+ virtual void DoSetVirtualSize( int x, int y );
+ virtual wxSize DoGetVirtualSize() const;
+
+ // Return the largest of ClientSize and BestSize (as determined
+ // by a sizer, interior children, or other means)
+
+ virtual wxSize GetBestVirtualSize() const
+ {
+ wxSize client( GetClientSize() );
+ wxSize best( GetBestSize() );
+
+ return wxSize( wxMax( client.x, best.x ), wxMax( client.y, best.y ) );
+ }
+
+ // returns the magnification of the content of this window
+ // eg 2.0 for a window on a retina screen
+ virtual double GetContentScaleFactor() const
+ { return 1.0; }
+
+ // return the size of the left/right and top/bottom borders in x and y
+ // components of the result respectively
+ virtual wxSize GetWindowBorderSize() const;
+
+ // wxSizer and friends use this to give a chance to a component to recalc
+ // its min size once one of the final size components is known. Override
+ // this function when that is useful (such as for wxStaticText which can
+ // stretch over several lines). Parameter availableOtherDir
+ // tells the item how much more space there is available in the opposite
+ // direction (-1 if unknown).
+ virtual bool
+ InformFirstDirection(int direction, int size, int availableOtherDir);
+
+ // sends a size event to the window using its current size -- this has an
+ // effect of refreshing the window layout
+ //
+ // by default the event is sent, i.e. processed immediately, but if flags
+ // value includes wxSEND_EVENT_POST then it's posted, i.e. only schedule
+ // for later processing
+ virtual void SendSizeEvent(int flags = 0);
+
+ // this is a safe wrapper for GetParent()->SendSizeEvent(): it checks that
+ // we have a parent window and it's not in process of being deleted
+ //
+ // this is used by controls such as tool/status bars changes to which must
+ // also result in parent re-layout
+ void SendSizeEventToParent(int flags = 0);
+
+ // this is a more readable synonym for SendSizeEvent(wxSEND_EVENT_POST)
+ void PostSizeEvent() { SendSizeEvent(wxSEND_EVENT_POST); }
+
+ // this is the same as SendSizeEventToParent() but using PostSizeEvent()
+ void PostSizeEventToParent() { SendSizeEventToParent(wxSEND_EVENT_POST); }
+
+ // These functions should be used before repositioning the children of
+ // this window to reduce flicker or, in MSW case, even avoid display
+ // corruption in some situations (so they're more than just optimization).
+ //
+ // EndRepositioningChildren() should be called if and only if
+ // BeginRepositioningChildren() returns true. To ensure that this is always
+ // done automatically, use ChildrenRepositioningGuard class below.
+ virtual bool BeginRepositioningChildren() { return false; }
+ virtual void EndRepositioningChildren() { }
+
+ // A simple helper which ensures that EndRepositioningChildren() is called
+ // from its dtor if and only if calling BeginRepositioningChildren() from
+ // the ctor returned true.
+ class ChildrenRepositioningGuard
+ {
+ public:
+ // Notice that window can be NULL here, for convenience. In this case
+ // this class simply doesn't do anything.
+ wxEXPLICIT ChildrenRepositioningGuard(wxWindowBase* win)
+ : m_win(win),
+ m_callEnd(win && win->BeginRepositioningChildren())
+ {
+ }
+
+ ~ChildrenRepositioningGuard()
+ {
+ if ( m_callEnd )
+ m_win->EndRepositioningChildren();
+ }
+
+ private:
+ wxWindowBase* const m_win;
+ const bool m_callEnd;