X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/34c3ffca5b9a22a972ae0296c8713f8ff1956566..f90566f5c386e6e5d80deecad9052ec53a0394ba:/src/common/wincmn.cpp?ds=sidebyside diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index f738746d00..5922d27f4a 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -174,6 +174,12 @@ void wxWindowBase::InitBase() m_hasCustomPalette = FALSE; #endif // wxUSE_PALETTE + m_virtualSize = wxDefaultSize; + m_minVirtualWidth = -1; + m_minVirtualHeight = -1; + m_maxVirtualWidth = -1; + m_maxVirtualHeight = -1; + // Whether we're using the current theme for this window (wxGTK only for now) m_themeEnabled = FALSE; } @@ -522,6 +528,40 @@ void wxWindowBase::SetSizeHints(int minW, int minH, m_maxHeight = maxH; } +void wxWindowBase::SetVirtualSizeHints( int minW, int minH, + int maxW, int maxH ) +{ + m_minVirtualWidth = minW; + m_maxVirtualWidth = maxW; + m_minVirtualHeight = minH; + m_maxVirtualHeight = maxH; + + SetVirtualSize( GetClientSize() ); +} + +void wxWindowBase::DoSetVirtualSize( int x, int y ) +{ + if( m_minVirtualWidth != -1 && m_minVirtualWidth > x ) x = m_minVirtualWidth; + if( m_maxVirtualWidth != -1 && m_maxVirtualWidth < x ) x = m_maxVirtualWidth; + if( m_minVirtualHeight != -1 && m_minVirtualHeight > y ) y = m_minVirtualHeight; + if( m_maxVirtualHeight != -1 && m_maxVirtualHeight < y ) y = m_maxVirtualHeight; + + m_virtualSize.SetWidth( x ); + m_virtualSize.SetHeight( y ); +} + +wxSize wxWindowBase::DoGetVirtualSize() const +{ + wxSize s( GetClientSize() ); + + if( m_virtualSize.GetWidth() != -1 ) + s.SetWidth( m_virtualSize.GetWidth() ); + if( m_virtualSize.GetHeight() != -1 ) + s.SetHeight( m_virtualSize.GetHeight() ); + + return s; +} + // ---------------------------------------------------------------------------- // show/hide/enable/disable the window // ---------------------------------------------------------------------------- @@ -1185,11 +1225,19 @@ void wxWindowBase::DeleteRelatedConstraints() } #endif -void wxWindowBase::SetSizer(wxSizer *sizer) +void wxWindowBase::SetSizer(wxSizer *sizer, bool deleteOld) { - if (m_windowSizer) delete m_windowSizer; + if (m_windowSizer && deleteOld) delete m_windowSizer; m_windowSizer = sizer; + + SetAutoLayout( sizer != 0 ); +} + +void wxWindowBase::SetSizerAndFit(wxSizer *sizer, bool deleteOld) +{ + SetSizer( sizer, deleteOld ); + sizer->SetSizeHints( (wxWindow*) this ); } bool wxWindowBase::Layout() @@ -1198,8 +1246,7 @@ bool wxWindowBase::Layout() if ( GetSizer() ) { int w, h; - GetClientSize(&w, &h); - + GetVirtualSize(&w, &h); GetSizer()->SetDimension( 0, 0, w, h ); } #if wxUSE_CONSTRAINTS @@ -1748,4 +1795,15 @@ void wxWindowBase::ReleaseMouse() GetCapture()); } -// vi:sts=4:sw=4:et +// ---------------------------------------------------------------------------- +// global functions +// ---------------------------------------------------------------------------- + +wxWindow* wxGetTopLevelParent(wxWindow *win) +{ + while ( win && !win->IsTopLevel() ) + win = win->GetParent(); + + return win; +} +