X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3fcea4b10b4b47a4ae57b84552db88da8d036044..4b26b60fac70f89cf33935f78469e27536d8b614:/src/common/nbkbase.cpp diff --git a/src/common/nbkbase.cpp b/src/common/nbkbase.cpp index fa4db5f419..fcfd478e7c 100644 --- a/src/common/nbkbase.cpp +++ b/src/common/nbkbase.cpp @@ -96,49 +96,49 @@ void wxNotebookBase::AssignImageList(wxImageList* imageList) // geometry // ---------------------------------------------------------------------------- -wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage) +wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage) const { - // this was just taken from wxNotebookSizer::CalcMin() and is, of - // course, totally bogus - just like the original code was + // this is, of course, totally bogus -- but we must do something by + // default because not all ports implement this wxSize sizeTotal = sizePage; - - // Slightly less bogus, at least under Windows. - // We need to make getting tab size part of the wxWindows API. -#ifdef __WXMSW__ - wxSize tabSize(0, 0); - if (GetPageCount() > 0) - { - RECT rect; - TabCtrl_GetItemRect((HWND) GetHWND(), 0, & rect); - tabSize.x = rect.right - rect.left; - tabSize.y = rect.bottom - rect.top; - } - if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) ) - { - sizeTotal.x += tabSize.x + 7; - sizeTotal.y += 7; - } - else - { - sizeTotal.x += 7; - sizeTotal.y += tabSize.y + 7; - } -#else + if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) ) { sizeTotal.x += 90; sizeTotal.y += 10; } - else + else // tabs on top/bottom side { sizeTotal.x += 10; sizeTotal.y += 40; } -#endif 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 CalcSizeFromPage(bestSize); +} + // ---------------------------------------------------------------------------- // pages management // ----------------------------------------------------------------------------