diff --git a/include/wx/notebook.h b/include/wx/notebook.h index d6881976dc..4213cc0753 100644 --- a/include/wx/notebook.h +++ b/include/wx/notebook.h @@ -161,6 +161,10 @@ public: } protected: + // calculate the best size of the notebook as the max of the best sizes of + // its pages + virtual wxSize DoGetBestSize() const; + // remove the page and return a pointer to it virtual wxNotebookPage *DoRemovePage(int page); diff --git a/src/common/nbkbase.cpp b/src/common/nbkbase.cpp index fa4db5f419..07b9a52c46 100644 --- a/src/common/nbkbase.cpp +++ b/src/common/nbkbase.cpp @@ -139,6 +139,29 @@ wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage) return sizeTotal; } +wxSize wxNotebookBase::DoGetBestSize() const +{ + wxSize bestSize; + + // iterate over all pages, get the largest width and height + const size_t nCount = m_pages.Count(); + for ( size_t nPage = 0; nPage < nCount; nPage++ ) + { + wxNotebookPage *pPage = m_pages[nPage]; + wxSize childBestSize(pPage->GetBestSize()); + + if ( childBestSize.x > bestSize.x ) + bestSize.x = childBestSize.x; + + if ( childBestSize.y > bestSize.y ) + bestSize.y = childBestSize.y; + } + + // convert display area to window area, adding the size neccessary for the + // tabs + return wxConstCast(this, wxNotebookBase)->CalcSizeFromPage(bestSize); +} + // ---------------------------------------------------------------------------- // pages management // ----------------------------------------------------------------------------