X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2ddb4d13585d5235556119fb1937273da9e433a3..daebb84bff054d3833baca58a5dc506de56c64a1:/src/common/bookctrl.cpp diff --git a/src/common/bookctrl.cpp b/src/common/bookctrl.cpp index 2431b05ac5..b61570f183 100644 --- a/src/common/bookctrl.cpp +++ b/src/common/bookctrl.cpp @@ -53,12 +53,16 @@ void wxBookCtrlBase::Init() m_bookctrl = NULL; m_imageList = NULL; m_ownsImageList = false; + m_fitToCurrentPage = false; #if defined(__WXWINCE__) m_internalBorder = 1; #else m_internalBorder = 5; #endif + + m_controlMargin = 0; + m_controlSizer = NULL; } bool @@ -143,6 +147,9 @@ wxSize wxBookCtrlBase::DoGetBestSize() const bestSize.y = childBestSize.y; } } + + if (m_fitToCurrentPage && GetCurrentPage()) + bestSize = GetCurrentPage()->GetBestSize(); // convert display area to window area, adding the size necessary for the // tabs @@ -252,48 +259,52 @@ wxRect wxBookCtrlBase::GetPageRect() const return rectPage; } -void wxBookCtrlBase::OnSize(wxSizeEvent& event) +// Lay out controls +void wxBookCtrlBase::DoSize() { - event.Skip(); - if ( !m_bookctrl ) { // we're not fully created yet or OnSize() should be hidden by derived class return; } - - // resize controller and the page area to fit inside our new size - const wxSize sizeClient( GetClientSize() ), - sizeBorder( m_bookctrl->GetSize() - m_bookctrl->GetClientSize() ), - sizeCtrl( GetControllerSize() ); - - m_bookctrl->SetClientSize( sizeCtrl.x - sizeBorder.x, sizeCtrl.y - sizeBorder.y ); - - const wxSize sizeNew = m_bookctrl->GetSize(); - wxPoint posCtrl; - switch ( GetWindowStyle() & wxBK_ALIGN_MASK ) + + if (GetSizer()) + Layout(); + else { - default: - wxFAIL_MSG( _T("unexpected alignment") ); - // fall through + // resize controller and the page area to fit inside our new size + const wxSize sizeClient( GetClientSize() ), + sizeBorder( m_bookctrl->GetSize() - m_bookctrl->GetClientSize() ), + sizeCtrl( GetControllerSize() ); - case wxBK_TOP: - case wxBK_LEFT: - // posCtrl is already ok - break; + m_bookctrl->SetClientSize( sizeCtrl.x - sizeBorder.x, sizeCtrl.y - sizeBorder.y ); - case wxBK_BOTTOM: - posCtrl.y = sizeClient.y - sizeNew.y; - break; + const wxSize sizeNew = m_bookctrl->GetSize(); + wxPoint posCtrl; + switch ( GetWindowStyle() & wxBK_ALIGN_MASK ) + { + default: + wxFAIL_MSG( _T("unexpected alignment") ); + // fall through + + case wxBK_TOP: + case wxBK_LEFT: + // posCtrl is already ok + break; + + case wxBK_BOTTOM: + posCtrl.y = sizeClient.y - sizeNew.y; + break; + + case wxBK_RIGHT: + posCtrl.x = sizeClient.x - sizeNew.x; + break; + } - case wxBK_RIGHT: - posCtrl.x = sizeClient.x - sizeNew.x; - break; + if ( m_bookctrl->GetPosition() != posCtrl ) + m_bookctrl->Move(posCtrl); } - if ( m_bookctrl->GetPosition() != posCtrl ) - m_bookctrl->Move(posCtrl); - // resize the currently shown page if (GetSelection() != wxNOT_FOUND ) { @@ -303,6 +314,13 @@ void wxBookCtrlBase::OnSize(wxSizeEvent& event) } } +void wxBookCtrlBase::OnSize(wxSizeEvent& event) +{ + event.Skip(); + + DoSize(); +} + wxSize wxBookCtrlBase::GetControllerSize() const { if(!m_bookctrl)