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);
|
virtual void SetTabSize(const wxSize& sz);
|
||||||
|
|
||||||
// calculate size for wxNotebookSizer
|
// calculate size for wxNotebookSizer
|
||||||
wxSize CalcSizeFromPage(const wxSize& sizePage);
|
wxSize CalcSizeFromPage(const wxSize& sizePage) const;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// get number of pages in the dialog
|
// get number of pages in the dialog
|
||||||
|
@@ -103,6 +103,9 @@ public:
|
|||||||
// style.
|
// style.
|
||||||
void SetTabSize(const wxSize& sz);
|
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
|
// callbacks
|
||||||
// ---------
|
// ---------
|
||||||
void OnSize(wxSizeEvent& event);
|
void OnSize(wxSizeEvent& event);
|
||||||
|
@@ -107,7 +107,7 @@ public:
|
|||||||
virtual void SetTabSize(const wxSize& sz) = 0;
|
virtual void SetTabSize(const wxSize& sz) = 0;
|
||||||
|
|
||||||
// calculate the size of the notebook from the size of its page
|
// 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
|
// operations
|
||||||
// ----------
|
// ----------
|
||||||
@@ -155,6 +155,8 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
// remove the page and return a pointer to it
|
// remove the page and return a pointer to it
|
||||||
virtual wxNotebookPage *DoRemovePage(int page);
|
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
|
// common part of all ctors
|
||||||
void Init();
|
void Init();
|
||||||
|
@@ -78,7 +78,7 @@ public:
|
|||||||
virtual void SetPadding(const wxSize& padding);
|
virtual void SetPadding(const wxSize& padding);
|
||||||
virtual void SetTabSize(const wxSize& sz);
|
virtual void SetTabSize(const wxSize& sz);
|
||||||
|
|
||||||
virtual wxSize CalcSizeFromPage(const wxSize& sizePage);
|
virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
|
||||||
|
|
||||||
virtual bool DeleteAllPages();
|
virtual bool DeleteAllPages();
|
||||||
|
|
||||||
|
@@ -96,34 +96,17 @@ void wxNotebookBase::AssignImageList(wxImageList* imageList)
|
|||||||
// geometry
|
// geometry
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage)
|
wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage) const
|
||||||
{
|
{
|
||||||
// this was just taken from wxNotebookSizer::CalcMin() and is, of
|
// this was just taken from wxNotebookSizer::CalcMin() and is, of
|
||||||
// course, totally bogus - just like the original code was
|
// course, totally bogus - just like the original code was
|
||||||
wxSize sizeTotal = sizePage;
|
wxSize sizeTotal = sizePage;
|
||||||
|
|
||||||
// Slightly less bogus, at least under Windows.
|
// changed hajokirchhoff -- May, 31st, 2003
|
||||||
// We need to make getting tab size part of the wxWindows API.
|
// moved the __WXMSW__ portion to wxNotebook::CalcSizeFromPage in src/msw/notebook.cpp
|
||||||
#ifdef __WXMSW__
|
// where it really belongs.
|
||||||
wxSize tabSize(0, 0);
|
// Question: Shouldn't we make wxNotebookBase::CalcSizeFromPage a pure virtual class.
|
||||||
if (GetPageCount() > 0)
|
// I'd like this better than this "totally bogus" code here.
|
||||||
{
|
|
||||||
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
|
|
||||||
if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) )
|
if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) )
|
||||||
{
|
{
|
||||||
sizeTotal.x += 90;
|
sizeTotal.x += 90;
|
||||||
@@ -134,7 +117,6 @@ wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage)
|
|||||||
sizeTotal.x += 10;
|
sizeTotal.x += 10;
|
||||||
sizeTotal.y += 40;
|
sizeTotal.y += 40;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return sizeTotal;
|
return sizeTotal;
|
||||||
}
|
}
|
||||||
@@ -165,6 +147,21 @@ wxNotebookPage *wxNotebookBase::DoRemovePage(int nPage)
|
|||||||
return pageRemoved;
|
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 wxNotebookBase::GetNextPage(bool forward) const
|
||||||
{
|
{
|
||||||
int nPage;
|
int nPage;
|
||||||
|
@@ -202,7 +202,7 @@ wxNotebook::~wxNotebook()
|
|||||||
m_macControl = NULL ;
|
m_macControl = NULL ;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage)
|
wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
|
||||||
{
|
{
|
||||||
wxSize sizeTotal = sizePage;
|
wxSize sizeTotal = sizePage;
|
||||||
|
|
||||||
|
@@ -202,7 +202,7 @@ wxNotebook::~wxNotebook()
|
|||||||
m_macControl = NULL ;
|
m_macControl = NULL ;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage)
|
wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
|
||||||
{
|
{
|
||||||
wxSize sizeTotal = sizePage;
|
wxSize sizeTotal = sizePage;
|
||||||
|
|
||||||
|
@@ -311,6 +311,33 @@ void wxNotebook::SetTabSize(const wxSize& sz)
|
|||||||
::SendMessage(GetHwnd(), TCM_SETITEMSIZE, 0, MAKELPARAM(sz.x, sz.y));
|
::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)
|
void wxNotebook::AdjustPageSize(wxNotebookPage *page)
|
||||||
{
|
{
|
||||||
wxCHECK_RET( page, _T("NULL page in wxNotebook::AdjustPageSize") );
|
wxCHECK_RET( page, _T("NULL page in wxNotebook::AdjustPageSize") );
|
||||||
|
@@ -962,7 +962,7 @@ void wxNotebook::SetPageSize(const wxSize& size)
|
|||||||
SetClientSize(GetSizeForPage(size));
|
SetClientSize(GetSizeForPage(size));
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage)
|
wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
|
||||||
{
|
{
|
||||||
return AdjustSize(GetSizeForPage(sizePage));
|
return AdjustSize(GetSizeForPage(sizePage));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user