X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/da817fa6ebbe54afe26b7536255699294abe4dfd..f2408396534cc952a5bfcd3a2cc018abe8221c78:/src/common/bookctrl.cpp diff --git a/src/common/bookctrl.cpp b/src/common/bookctrl.cpp index f22559cb98..9b7c964e24 100644 --- a/src/common/bookctrl.cpp +++ b/src/common/bookctrl.cpp @@ -60,6 +60,9 @@ void wxBookCtrlBase::Init() #else m_internalBorder = 5; #endif + + m_controlMargin = 0; + m_controlSizer = NULL; } bool @@ -144,7 +147,7 @@ wxSize wxBookCtrlBase::DoGetBestSize() const bestSize.y = childBestSize.y; } } - + if (m_fitToCurrentPage && GetCurrentPage()) bestSize = GetCurrentPage()->GetBestSize(); @@ -172,6 +175,9 @@ wxBookCtrlBase::InsertPage(size_t nPage, _T("invalid page index in wxBookCtrlBase::InsertPage()") ); m_pages.Insert(page, nPage); + if ( page ) + page->SetSize(GetPageRect()); + InvalidateBestSize(); return true; @@ -265,51 +271,64 @@ void wxBookCtrlBase::DoSize() 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 ) + // resize all pages to fit the new control size + const wxRect pageRect = GetPageRect(); + const unsigned pagesCount = m_pages.Count(); + for ( unsigned int i = 0; i < pagesCount; ++i ) { - wxWindow *page = m_pages[GetSelection()]; - wxCHECK_RET( page, _T("NULL page?") ); - page->SetSize(GetPageRect()); + wxWindow * const page = m_pages[i]; + if ( !page ) + { + wxASSERT_MSG( AllowNullPage(), + _T("Null page in a control that does not allow null pages?") ); + continue; + } + + page->SetSize(pageRect); } } void wxBookCtrlBase::OnSize(wxSizeEvent& event) { event.Skip(); - + DoSize(); }