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
// 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);
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
// ----------
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();
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();
// 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;
sizeTotal.x += 10;
sizeTotal.y += 40;
}
-#endif
return sizeTotal;
}
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;
m_macControl = NULL ;
}
-wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage)
+wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
{
wxSize sizeTotal = sizePage;
m_macControl = NULL ;
}
-wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage)
+wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
{
wxSize sizeTotal = sizePage;
::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") );
SetClientSize(GetSizeForPage(size));
}
-wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage)
+wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
{
return AdjustSize(GetSizeForPage(sizePage));
}