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:
@@ -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
|
||||
|
@@ -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);
|
||||
|
@@ -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();
|
||||
|
@@ -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();
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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") );
|
||||
|
@@ -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));
|
||||
}
|
||||
|
Reference in New Issue
Block a user