wxSize wxTreebook::CalcSizeFromPage(const wxSize& sizePage) const { const wxSize sizeTree = GetControllerSize(); wxSize size = sizePage; size.x += sizeTree.x; return size; }
wxSize wxChoicebook::CalcSizeFromPage(const wxSize& sizePage) const { // we need to add the size of the choice control and the border between const wxSize sizeChoice = GetControllerSize(); wxSize size = sizePage; if ( IsVertical() ) { size.y += sizeChoice.y + GetInternalBorder(); } else // left/right aligned { size.x += sizeChoice.x + GetInternalBorder(); } return size; }
wxSize wxBookCtrlBase::CalcSizeFromPage(const wxSize& sizePage) const { // Add the size of the controller and the border between if it's shown. if ( !m_bookctrl || !m_bookctrl->IsShown() ) return sizePage; // Notice that the controller size is its current size while we really want // to have its best size. So we only take into account its size in the // direction in which we should add it but not in the other one, where the // controller size is determined by the size of wxBookCtrl itself. const wxSize sizeController = GetControllerSize(); wxSize size = sizePage; if ( IsVertical() ) size.y += sizeController.y + GetInternalBorder(); else // left/right aligned size.x += sizeController.x + GetInternalBorder(); return size; }
wxSize wxBookCtrlBase::CalcSizeFromPage(const wxSize& sizePage) const { // we need to add the size of the choice control and the border between const wxSize sizeController = GetControllerSize(); wxSize size = sizePage; if ( IsVertical() ) { if ( sizeController.x > sizePage.x ) size.x = sizeController.x; size.y += sizeController.y + GetInternalBorder(); } else // left/right aligned { size.x += sizeController.x + GetInternalBorder(); if ( sizeController.y > sizePage.y ) size.y = sizeController.y; } return size; }
wxRect wxBookCtrlBase::GetPageRect() const { const wxSize size = GetControllerSize(); wxPoint pt; wxRect rectPage(pt, GetClientSize()); switch ( GetWindowStyle() & wxBK_ALIGN_MASK ) { default: wxFAIL_MSG( wxT("unexpected alignment") ); // fall through case wxBK_TOP: rectPage.y = size.y + GetInternalBorder(); // fall through case wxBK_BOTTOM: rectPage.height -= size.y + GetInternalBorder(); if (rectPage.height < 0) rectPage.height = 0; break; case wxBK_LEFT: rectPage.x = size.x + GetInternalBorder(); // fall through case wxBK_RIGHT: rectPage.width -= size.x + GetInternalBorder(); if (rectPage.width < 0) rectPage.width = 0; break; } return rectPage; }
wxSize wxBookCtrlBase::CalcSizeFromPage(const wxSize& sizePage) const { // Add the size of the controller and the border between if it's shown. if ( !m_bookctrl || !m_bookctrl->IsShown() ) return sizePage; const wxSize sizeController = GetControllerSize(); wxSize size = sizePage; if ( IsVertical() ) { if ( sizeController.x > sizePage.x ) size.x = sizeController.x; size.y += sizeController.y + GetInternalBorder(); } else // left/right aligned { size.x += sizeController.x + GetInternalBorder(); if ( sizeController.y > sizePage.y ) size.y = sizeController.y; } return size; }
// Lay out controls void wxBookCtrlBase::DoSize() { if ( !m_bookctrl ) { // we're not fully created yet or OnSize() should be hidden by derived class return; } if (GetSizer()) Layout(); else { // 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 ); // if this changes the visibility of the scrollbars the best size changes, relayout in this case wxSize sizeCtrl2 = GetControllerSize(); if ( sizeCtrl != sizeCtrl2 ) { wxSize sizeBorder2 = m_bookctrl->GetSize() - m_bookctrl->GetClientSize(); m_bookctrl->SetClientSize( sizeCtrl2.x - sizeBorder2.x, sizeCtrl2.y - sizeBorder2.y ); } const wxSize sizeNew = m_bookctrl->GetSize(); wxPoint posCtrl; switch ( GetWindowStyle() & wxBK_ALIGN_MASK ) { default: wxFAIL_MSG( wxT("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; } if ( m_bookctrl->GetPosition() != posCtrl ) m_bookctrl->Move(posCtrl); } // resize all pages to fit the new control size const wxRect pageRect = GetPageRect(); const unsigned pagesCount = m_pages.GetCount(); for ( unsigned int i = 0; i < pagesCount; ++i ) { wxWindow * const page = m_pages[i]; if ( !page ) { wxASSERT_MSG( AllowNullPage(), wxT("Null page in a control that does not allow null pages?") ); continue; } page->SetSize(pageRect); } }