common code, cleanup of measurement
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25739 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -205,58 +205,62 @@ wxNotebook::~wxNotebook()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
|
|
||||||
{
|
|
||||||
wxSize sizeTotal = sizePage;
|
|
||||||
|
|
||||||
int major,minor;
|
|
||||||
wxGetOsVersion( &major, &minor );
|
|
||||||
|
|
||||||
// Mac has large notebook borders. Aqua even more so.
|
|
||||||
|
|
||||||
if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) )
|
|
||||||
{
|
|
||||||
sizeTotal.x += 90;
|
|
||||||
|
|
||||||
if (major >= 10)
|
|
||||||
sizeTotal.y += 28;
|
|
||||||
else
|
|
||||||
sizeTotal.y += 20;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (major >= 10)
|
|
||||||
{
|
|
||||||
sizeTotal.x += 34;
|
|
||||||
sizeTotal.y += 46;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sizeTotal.x += 22;
|
|
||||||
sizeTotal.y += 44;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return sizeTotal;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxNotebook accessors
|
// wxNotebook accessors
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
void wxNotebook::SetPadding(const wxSize& padding)
|
void wxNotebook::SetPadding(const wxSize& padding)
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxNotebook::SetPadding not implemented") );
|
// unsupported by OS
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxNotebook::SetTabSize(const wxSize& sz)
|
void wxNotebook::SetTabSize(const wxSize& sz)
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxNotebook::SetTabSize not implemented") );
|
// unsupported by OS
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxNotebook::SetPageSize(const wxSize& size)
|
void wxNotebook::SetPageSize(const wxSize& size)
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxNotebook::SetPageSize not implemented") );
|
SetSize( CalcSizeFromPage( size ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
|
||||||
|
{
|
||||||
|
wxSize sizeTotal = sizePage;
|
||||||
|
sizeTotal.x += 2 * m_macHorizontalBorder + wxMacTabLeftMargin(GetWindowStyle()) +
|
||||||
|
wxMacTabRightMargin(GetWindowStyle()) ;
|
||||||
|
sizeTotal.y += 2 * m_macVerticalBorder + wxMacTabTopMargin(GetWindowStyle()) +
|
||||||
|
wxMacTabBottomMargin(GetWindowStyle()) ;
|
||||||
|
|
||||||
|
return sizeTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSize wxNotebook::DoGetBestSize() const
|
||||||
|
{
|
||||||
|
// calculate the max page size
|
||||||
|
wxSize size(0, 0);
|
||||||
|
|
||||||
|
size_t count = GetPageCount();
|
||||||
|
if ( count )
|
||||||
|
{
|
||||||
|
for ( size_t n = 0; n < count; n++ )
|
||||||
|
{
|
||||||
|
wxSize sizePage = m_pages[n]->GetSize();
|
||||||
|
|
||||||
|
if ( size.x < sizePage.x )
|
||||||
|
size.x = sizePage.x;
|
||||||
|
if ( size.y < sizePage.y )
|
||||||
|
size.y = sizePage.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // no pages
|
||||||
|
{
|
||||||
|
// use some arbitrary default size
|
||||||
|
size.x =
|
||||||
|
size.y = 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CalcSizeFromPage(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int wxNotebook::SetSelection(size_t nPage)
|
int wxNotebook::SetSelection(size_t nPage)
|
||||||
@@ -382,12 +386,8 @@ bool wxNotebook::InsertPage(size_t nPage,
|
|||||||
|
|
||||||
MacSetupTabs();
|
MacSetupTabs();
|
||||||
|
|
||||||
int h, w;
|
wxRect rect = GetPageRect() ;
|
||||||
GetSize(&w, &h);
|
pPage->SetSize(rect);
|
||||||
pPage->SetSize(wxMacTabLeftMargin(GetWindowStyle()) + m_macHorizontalBorder,
|
|
||||||
wxMacTabTopMargin(GetWindowStyle()) + m_macVerticalBorder,
|
|
||||||
w - wxMacTabLeftMargin(GetWindowStyle()) - wxMacTabRightMargin(GetWindowStyle()) - 2*m_macHorizontalBorder,
|
|
||||||
h - wxMacTabTopMargin(GetWindowStyle()) - wxMacTabBottomMargin(GetWindowStyle()) - 2*m_macVerticalBorder);
|
|
||||||
if ( pPage->GetAutoLayout() ) {
|
if ( pPage->GetAutoLayout() ) {
|
||||||
pPage->Layout();
|
pPage->Layout();
|
||||||
}
|
}
|
||||||
@@ -490,6 +490,18 @@ void wxNotebook::MacSetupTabs()
|
|||||||
InvalWindowRect((WindowRef)MacGetRootWindow(), &bounds);
|
InvalWindowRect((WindowRef)MacGetRootWindow(), &bounds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxRect wxNotebook::GetPageRect() const
|
||||||
|
{
|
||||||
|
// fit the notebook page to the tab control's display area
|
||||||
|
int w, h;
|
||||||
|
GetSize(&w, &h);
|
||||||
|
|
||||||
|
return wxRect(
|
||||||
|
wxMacTabLeftMargin(GetWindowStyle()) + m_macHorizontalBorder,
|
||||||
|
wxMacTabTopMargin(GetWindowStyle()) + m_macVerticalBorder,
|
||||||
|
w - wxMacTabLeftMargin(GetWindowStyle()) - wxMacTabRightMargin(GetWindowStyle()) - 2*m_macHorizontalBorder,
|
||||||
|
h - wxMacTabTopMargin(GetWindowStyle()) - wxMacTabBottomMargin(GetWindowStyle()) - 2*m_macVerticalBorder);
|
||||||
|
}
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxNotebook callbacks
|
// wxNotebook callbacks
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -498,25 +510,12 @@ void wxNotebook::MacSetupTabs()
|
|||||||
// time because doing it in ::Create() doesn't work (for unknown reasons)
|
// time because doing it in ::Create() doesn't work (for unknown reasons)
|
||||||
void wxNotebook::OnSize(wxSizeEvent& event)
|
void wxNotebook::OnSize(wxSizeEvent& event)
|
||||||
{
|
{
|
||||||
// emulate page change (it's esp. important to do it first time because
|
|
||||||
// otherwise our page would stay invisible)
|
|
||||||
/*
|
|
||||||
int nSel = m_nSelection;
|
|
||||||
m_nSelection = -1;
|
|
||||||
SetSelection(nSel);
|
|
||||||
*/
|
|
||||||
|
|
||||||
// fit the notebook page to the tab control's display area
|
|
||||||
int w, h;
|
|
||||||
GetSize(&w, &h);
|
|
||||||
|
|
||||||
unsigned int nCount = m_pages.Count();
|
unsigned int nCount = m_pages.Count();
|
||||||
|
wxRect rect = GetPageRect() ;
|
||||||
for ( unsigned int nPage = 0; nPage < nCount; nPage++ ) {
|
for ( unsigned int nPage = 0; nPage < nCount; nPage++ ) {
|
||||||
wxNotebookPage *pPage = m_pages[nPage];
|
wxNotebookPage *pPage = m_pages[nPage];
|
||||||
pPage->SetSize(wxMacTabLeftMargin(GetWindowStyle()) + m_macHorizontalBorder,
|
pPage->SetSize(rect);
|
||||||
wxMacTabTopMargin(GetWindowStyle()) + m_macVerticalBorder,
|
|
||||||
w - wxMacTabLeftMargin(GetWindowStyle()) - wxMacTabRightMargin(GetWindowStyle()) - 2*m_macHorizontalBorder,
|
|
||||||
h - wxMacTabTopMargin(GetWindowStyle()) - wxMacTabBottomMargin(GetWindowStyle()) - 2*m_macVerticalBorder);
|
|
||||||
if ( pPage->GetAutoLayout() ) {
|
if ( pPage->GetAutoLayout() ) {
|
||||||
pPage->Layout();
|
pPage->Layout();
|
||||||
}
|
}
|
||||||
|
@@ -205,58 +205,62 @@ wxNotebook::~wxNotebook()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
|
|
||||||
{
|
|
||||||
wxSize sizeTotal = sizePage;
|
|
||||||
|
|
||||||
int major,minor;
|
|
||||||
wxGetOsVersion( &major, &minor );
|
|
||||||
|
|
||||||
// Mac has large notebook borders. Aqua even more so.
|
|
||||||
|
|
||||||
if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) )
|
|
||||||
{
|
|
||||||
sizeTotal.x += 90;
|
|
||||||
|
|
||||||
if (major >= 10)
|
|
||||||
sizeTotal.y += 28;
|
|
||||||
else
|
|
||||||
sizeTotal.y += 20;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (major >= 10)
|
|
||||||
{
|
|
||||||
sizeTotal.x += 34;
|
|
||||||
sizeTotal.y += 46;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sizeTotal.x += 22;
|
|
||||||
sizeTotal.y += 44;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return sizeTotal;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxNotebook accessors
|
// wxNotebook accessors
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
void wxNotebook::SetPadding(const wxSize& padding)
|
void wxNotebook::SetPadding(const wxSize& padding)
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxNotebook::SetPadding not implemented") );
|
// unsupported by OS
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxNotebook::SetTabSize(const wxSize& sz)
|
void wxNotebook::SetTabSize(const wxSize& sz)
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxNotebook::SetTabSize not implemented") );
|
// unsupported by OS
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxNotebook::SetPageSize(const wxSize& size)
|
void wxNotebook::SetPageSize(const wxSize& size)
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxNotebook::SetPageSize not implemented") );
|
SetSize( CalcSizeFromPage( size ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
|
||||||
|
{
|
||||||
|
wxSize sizeTotal = sizePage;
|
||||||
|
sizeTotal.x += 2 * m_macHorizontalBorder + wxMacTabLeftMargin(GetWindowStyle()) +
|
||||||
|
wxMacTabRightMargin(GetWindowStyle()) ;
|
||||||
|
sizeTotal.y += 2 * m_macVerticalBorder + wxMacTabTopMargin(GetWindowStyle()) +
|
||||||
|
wxMacTabBottomMargin(GetWindowStyle()) ;
|
||||||
|
|
||||||
|
return sizeTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSize wxNotebook::DoGetBestSize() const
|
||||||
|
{
|
||||||
|
// calculate the max page size
|
||||||
|
wxSize size(0, 0);
|
||||||
|
|
||||||
|
size_t count = GetPageCount();
|
||||||
|
if ( count )
|
||||||
|
{
|
||||||
|
for ( size_t n = 0; n < count; n++ )
|
||||||
|
{
|
||||||
|
wxSize sizePage = m_pages[n]->GetSize();
|
||||||
|
|
||||||
|
if ( size.x < sizePage.x )
|
||||||
|
size.x = sizePage.x;
|
||||||
|
if ( size.y < sizePage.y )
|
||||||
|
size.y = sizePage.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // no pages
|
||||||
|
{
|
||||||
|
// use some arbitrary default size
|
||||||
|
size.x =
|
||||||
|
size.y = 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CalcSizeFromPage(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int wxNotebook::SetSelection(size_t nPage)
|
int wxNotebook::SetSelection(size_t nPage)
|
||||||
@@ -382,12 +386,8 @@ bool wxNotebook::InsertPage(size_t nPage,
|
|||||||
|
|
||||||
MacSetupTabs();
|
MacSetupTabs();
|
||||||
|
|
||||||
int h, w;
|
wxRect rect = GetPageRect() ;
|
||||||
GetSize(&w, &h);
|
pPage->SetSize(rect);
|
||||||
pPage->SetSize(wxMacTabLeftMargin(GetWindowStyle()) + m_macHorizontalBorder,
|
|
||||||
wxMacTabTopMargin(GetWindowStyle()) + m_macVerticalBorder,
|
|
||||||
w - wxMacTabLeftMargin(GetWindowStyle()) - wxMacTabRightMargin(GetWindowStyle()) - 2*m_macHorizontalBorder,
|
|
||||||
h - wxMacTabTopMargin(GetWindowStyle()) - wxMacTabBottomMargin(GetWindowStyle()) - 2*m_macVerticalBorder);
|
|
||||||
if ( pPage->GetAutoLayout() ) {
|
if ( pPage->GetAutoLayout() ) {
|
||||||
pPage->Layout();
|
pPage->Layout();
|
||||||
}
|
}
|
||||||
@@ -490,6 +490,18 @@ void wxNotebook::MacSetupTabs()
|
|||||||
InvalWindowRect((WindowRef)MacGetRootWindow(), &bounds);
|
InvalWindowRect((WindowRef)MacGetRootWindow(), &bounds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxRect wxNotebook::GetPageRect() const
|
||||||
|
{
|
||||||
|
// fit the notebook page to the tab control's display area
|
||||||
|
int w, h;
|
||||||
|
GetSize(&w, &h);
|
||||||
|
|
||||||
|
return wxRect(
|
||||||
|
wxMacTabLeftMargin(GetWindowStyle()) + m_macHorizontalBorder,
|
||||||
|
wxMacTabTopMargin(GetWindowStyle()) + m_macVerticalBorder,
|
||||||
|
w - wxMacTabLeftMargin(GetWindowStyle()) - wxMacTabRightMargin(GetWindowStyle()) - 2*m_macHorizontalBorder,
|
||||||
|
h - wxMacTabTopMargin(GetWindowStyle()) - wxMacTabBottomMargin(GetWindowStyle()) - 2*m_macVerticalBorder);
|
||||||
|
}
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxNotebook callbacks
|
// wxNotebook callbacks
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -498,25 +510,12 @@ void wxNotebook::MacSetupTabs()
|
|||||||
// time because doing it in ::Create() doesn't work (for unknown reasons)
|
// time because doing it in ::Create() doesn't work (for unknown reasons)
|
||||||
void wxNotebook::OnSize(wxSizeEvent& event)
|
void wxNotebook::OnSize(wxSizeEvent& event)
|
||||||
{
|
{
|
||||||
// emulate page change (it's esp. important to do it first time because
|
|
||||||
// otherwise our page would stay invisible)
|
|
||||||
/*
|
|
||||||
int nSel = m_nSelection;
|
|
||||||
m_nSelection = -1;
|
|
||||||
SetSelection(nSel);
|
|
||||||
*/
|
|
||||||
|
|
||||||
// fit the notebook page to the tab control's display area
|
|
||||||
int w, h;
|
|
||||||
GetSize(&w, &h);
|
|
||||||
|
|
||||||
unsigned int nCount = m_pages.Count();
|
unsigned int nCount = m_pages.Count();
|
||||||
|
wxRect rect = GetPageRect() ;
|
||||||
for ( unsigned int nPage = 0; nPage < nCount; nPage++ ) {
|
for ( unsigned int nPage = 0; nPage < nCount; nPage++ ) {
|
||||||
wxNotebookPage *pPage = m_pages[nPage];
|
wxNotebookPage *pPage = m_pages[nPage];
|
||||||
pPage->SetSize(wxMacTabLeftMargin(GetWindowStyle()) + m_macHorizontalBorder,
|
pPage->SetSize(rect);
|
||||||
wxMacTabTopMargin(GetWindowStyle()) + m_macVerticalBorder,
|
|
||||||
w - wxMacTabLeftMargin(GetWindowStyle()) - wxMacTabRightMargin(GetWindowStyle()) - 2*m_macHorizontalBorder,
|
|
||||||
h - wxMacTabTopMargin(GetWindowStyle()) - wxMacTabBottomMargin(GetWindowStyle()) - 2*m_macVerticalBorder);
|
|
||||||
if ( pPage->GetAutoLayout() ) {
|
if ( pPage->GetAutoLayout() ) {
|
||||||
pPage->Layout();
|
pPage->Layout();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user