From 2ce7af354a12de8cf0d80d27f6958c6ccd95f766 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Sun, 1 Jun 2003 13:13:03 +0000 Subject: [PATCH] Applied [ 745533 ] implemented wxNotebook::DoGetBestSize git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20802 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/mac/notebook.h | 2 +- include/wx/msw/notebook.h | 3 +++ include/wx/notebook.h | 4 +++- include/wx/univ/notebook.h | 2 +- src/common/nbkbase.cpp | 45 +++++++++++++++++-------------------- src/mac/carbon/notebmac.cpp | 2 +- src/mac/notebmac.cpp | 2 +- src/msw/notebook.cpp | 27 ++++++++++++++++++++++ src/univ/notebook.cpp | 2 +- 9 files changed, 59 insertions(+), 30 deletions(-) diff --git a/include/wx/mac/notebook.h b/include/wx/mac/notebook.h index 332dba4918..80569fc244 100644 --- a/include/wx/mac/notebook.h +++ b/include/wx/mac/notebook.h @@ -85,7 +85,7 @@ public: virtual void SetTabSize(const wxSize& sz); // calculate size for wxNotebookSizer - wxSize CalcSizeFromPage(const wxSize& sizePage); + wxSize CalcSizeFromPage(const wxSize& sizePage) const; /* // get number of pages in the dialog diff --git a/include/wx/msw/notebook.h b/include/wx/msw/notebook.h index 6a44b36be9..a2e6f84183 100644 --- a/include/wx/msw/notebook.h +++ b/include/wx/msw/notebook.h @@ -103,6 +103,9 @@ public: // style. void SetTabSize(const wxSize& sz); + // calculate the size of the notebook from the size of its page + virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; + // callbacks // --------- void OnSize(wxSizeEvent& event); diff --git a/include/wx/notebook.h b/include/wx/notebook.h index 8c18691b7c..54ad1df040 100644 --- a/include/wx/notebook.h +++ b/include/wx/notebook.h @@ -107,7 +107,7 @@ public: virtual void SetTabSize(const wxSize& sz) = 0; // calculate the size of the notebook from the size of its page - virtual wxSize CalcSizeFromPage(const wxSize& sizePage); + virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; // operations // ---------- @@ -155,6 +155,8 @@ public: protected: // remove the page and return a pointer to it virtual wxNotebookPage *DoRemovePage(int page); + // return the minimum size large enough to display the largest page entirely + virtual wxSize DoGetBestSize() const; // common part of all ctors void Init(); diff --git a/include/wx/univ/notebook.h b/include/wx/univ/notebook.h index 3e29d78106..e5742ddc0f 100644 --- a/include/wx/univ/notebook.h +++ b/include/wx/univ/notebook.h @@ -78,7 +78,7 @@ public: virtual void SetPadding(const wxSize& padding); virtual void SetTabSize(const wxSize& sz); - virtual wxSize CalcSizeFromPage(const wxSize& sizePage); + virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; virtual bool DeleteAllPages(); diff --git a/src/common/nbkbase.cpp b/src/common/nbkbase.cpp index fa4db5f419..4b95397039 100644 --- a/src/common/nbkbase.cpp +++ b/src/common/nbkbase.cpp @@ -96,34 +96,17 @@ 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 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 + // changed hajokirchhoff -- May, 31st, 2003 + // moved the __WXMSW__ portion to wxNotebook::CalcSizeFromPage in src/msw/notebook.cpp + // where it really belongs. + // Question: Shouldn't we make wxNotebookBase::CalcSizeFromPage a pure virtual class. + // I'd like this better than this "totally bogus" code here. if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) ) { sizeTotal.x += 90; @@ -134,7 +117,6 @@ wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage) sizeTotal.x += 10; sizeTotal.y += 40; } -#endif return sizeTotal; } @@ -165,6 +147,21 @@ wxNotebookPage *wxNotebookBase::DoRemovePage(int nPage) return pageRemoved; } +wxSize wxNotebookBase::DoGetBestSize() const +{ + wxSize bestSize(0,0); + size_t nCount = m_pages.Count(); + // iterate over all pages, get the largest width and height + for ( size_t nPage = 0; nPage < nCount; nPage++ ) { + wxNotebookPage *pPage = m_pages[nPage]; + wxSize childBestSize(pPage->GetBestSize()); + bestSize.SetWidth(max(childBestSize.GetWidth(), bestSize.GetWidth())); + bestSize.SetHeight(max(childBestSize.GetHeight(), bestSize.GetHeight())); + } + // convert display area to window area, adding the size neccessary for the tab control itself + return CalcSizeFromPage(bestSize); +} + int wxNotebookBase::GetNextPage(bool forward) const { int nPage; diff --git a/src/mac/carbon/notebmac.cpp b/src/mac/carbon/notebmac.cpp index 2f60ca89c5..e620bc017b 100644 --- a/src/mac/carbon/notebmac.cpp +++ b/src/mac/carbon/notebmac.cpp @@ -202,7 +202,7 @@ wxNotebook::~wxNotebook() m_macControl = NULL ; } -wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) +wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const { wxSize sizeTotal = sizePage; diff --git a/src/mac/notebmac.cpp b/src/mac/notebmac.cpp index 2f60ca89c5..e620bc017b 100644 --- a/src/mac/notebmac.cpp +++ b/src/mac/notebmac.cpp @@ -202,7 +202,7 @@ wxNotebook::~wxNotebook() m_macControl = NULL ; } -wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) +wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const { wxSize sizeTotal = sizePage; diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index 1a5c80b40d..7c3ceddae1 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -311,6 +311,33 @@ void wxNotebook::SetTabSize(const wxSize& sz) ::SendMessage(GetHwnd(), TCM_SETITEMSIZE, 0, MAKELPARAM(sz.x, sz.y)); } +wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const +{ + wxSize sizeTotal = sizePage; + + // We need to make getting tab size part of the wxWindows API. + 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; + } + + return sizeTotal; +} + void wxNotebook::AdjustPageSize(wxNotebookPage *page) { wxCHECK_RET( page, _T("NULL page in wxNotebook::AdjustPageSize") ); diff --git a/src/univ/notebook.cpp b/src/univ/notebook.cpp index da6d4b486f..c1d4f7fdc0 100644 --- a/src/univ/notebook.cpp +++ b/src/univ/notebook.cpp @@ -962,7 +962,7 @@ void wxNotebook::SetPageSize(const wxSize& size) SetClientSize(GetSizeForPage(size)); } -wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) +wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const { return AdjustSize(GetSizeForPage(sizePage)); } -- 2.49.0