Applied [ 745533 ] implemented wxNotebook::DoGetBestSize

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20802 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2003-06-01 13:13:03 +00:00
parent 4611305399
commit 2ce7af354a
9 changed files with 59 additions and 30 deletions

View File

@@ -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;