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

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

View File

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

View File

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

View File

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

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;

View File

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

View File

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

View File

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

View File

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