// mode, or inset. I think edge to edge conforms better to the other ports,
// and inset mode is better accomplished with space around the wxNotebook rather
// than within it. --Robin
-#define wxMAC_EDGE_TO_EDGE 1
+
+// CS : had to switch off tight spacing due to 10.3 problems
+#define wxMAC_EDGE_TO_EDGE 0
static inline int wxMacTabMargin(long nbStyle, long side)
{
{
}
-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
// ----------------------------------------------------------------------------
void wxNotebook::SetPadding(const wxSize& padding)
{
- wxFAIL_MSG( wxT("wxNotebook::SetPadding not implemented") );
+ // unsupported by OS
}
void wxNotebook::SetTabSize(const wxSize& sz)
{
- wxFAIL_MSG( wxT("wxNotebook::SetTabSize not implemented") );
+ // unsupported by OS
}
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)
MacSetupTabs();
- int h, w;
- GetSize(&w, &h);
- 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);
+ wxRect rect = GetPageRect() ;
+ pPage->SetSize(rect);
if ( pPage->GetAutoLayout() ) {
pPage->Layout();
}
// afterwards Unregister it (IconRef is ref counted, so it will stay on the tab even if we
// unregister it) in case this will ever lead to having the same icon everywhere add some kind
// of static counter
- wxBitmap* bmap = GetImageList()->GetBitmap( GetPageImage(ii ) ) ;
+ const wxBitmap* bmap = GetImageList()->GetBitmap( GetPageImage(ii ) ) ;
if ( bmap )
{
wxBitmap scaledBitmap ;
OSErr err = SetIconFamilyData( iconFamily, 'PICT' , (Handle) info.u.picture ) ;
wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ;
IconRef iconRef ;
- err = RegisterIconRefFromIconFamily( 'WXNG' , (OSType) 1 , iconFamily, &iconRef ) ;
+ err = RegisterIconRefFromIconFamily( 'WXNG' , (OSType) 1, iconFamily, &iconRef ) ;
wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ;
info.contentType = kControlContentIconRef ;
info.u.iconRef = iconRef ;
SetControlData( (ControlHandle) m_macControl, ii+1,kControlTabImageContentTag,
sizeof( info ), (Ptr)&info );
wxASSERT_MSG( err == noErr , wxT("Error when setting icon on tab") ) ;
- UnregisterIconRef( 'WXNG' , (OSType) 1 ) ;
+ if ( UMAGetSystemVersion() < 0x1030 )
+ {
+ UnregisterIconRef( 'WXNG' , (OSType) 1 ) ;
+ }
+
ReleaseIconRef( iconRef ) ;
DisposeHandle( (Handle) iconFamily ) ;
}
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
// ----------------------------------------------------------------------------
// time because doing it in ::Create() doesn't work (for unknown reasons)
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();
+ wxRect rect = GetPageRect() ;
for ( unsigned int nPage = 0; nPage < nCount; nPage++ ) {
wxNotebookPage *pPage = m_pages[nPage];
- 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);
+ pPage->SetSize(rect);
if ( pPage->GetAutoLayout() ) {
pPage->Layout();
}