picture support on tabs

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17563 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2002-10-17 20:38:38 +00:00
parent e22babff50
commit a1bc5f4446
2 changed files with 110 additions and 12 deletions

View File

@@ -132,8 +132,17 @@ bool wxNotebook::Create(wxWindow *parent,
MacPreControlCreate( parent , id , "" , pos , size ,style, wxDefaultValidator , name , &bounds , title ) ;
int tabstyle = kControlTabSmallNorthProc ;
if ( HasFlag(wxNB_LEFT) )
tabstyle = kControlTabSmallWestProc ;
else if ( HasFlag( wxNB_RIGHT ) )
tabstyle = kControlTabSmallEastProc ;
else if ( HasFlag( wxNB_BOTTOM ) )
tabstyle = kControlTabSmallSouthProc ;
m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , false , 0 , 0 , 1,
kControlTabSmallProc , (long) this ) ;
tabstyle , (long) this ) ;
MacPostControlCreate() ;
return TRUE ;
@@ -233,7 +242,7 @@ int wxNotebook::GetPageImage(int nPage) const
{
wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, _T("invalid notebook page") );
return 0 ;
return m_images[nPage];
}
bool wxNotebook::SetPageImage(int nPage, int nImage)
@@ -243,7 +252,17 @@ bool wxNotebook::SetPageImage(int nPage, int nImage)
wxCHECK_MSG( m_imageList && nImage < m_imageList->GetImageCount(), FALSE,
_T("invalid image index in SetPageImage()") );
return FALSE;
if ( nImage != m_images[nPage] )
{
// if the item didn't have an icon before or, on the contrary, did have
// it but has lost it now, its size will change - but if the icon just
// changes, it won't
m_images[nPage] = nImage;
MacSetupTabs() ;
}
return TRUE;
}
// ----------------------------------------------------------------------------
@@ -295,6 +314,8 @@ bool wxNotebook::InsertPage(int nPage,
// save the pointer to the page
m_pages.Insert(pPage, nPage);
m_images.Insert(imageId, nPage);
MacSetupTabs();
if ( bSelect ) {
@@ -332,7 +353,8 @@ void wxNotebook::MacSetupTabs()
wxNotebookPage *page;
ControlTabInfoRec info;
Boolean enabled = true;
OSStatus err = noErr ;
for(int ii = 0; ii < GetPageCount(); ii++)
{
page = m_pages[ii];
@@ -346,8 +368,35 @@ void wxNotebook::MacSetupTabs()
#endif
SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabInfoTag,
sizeof( ControlTabInfoRec) , (char*) &info ) ;
SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabEnabledFlagTag,
sizeof( Boolean ), (Ptr)&enabled );
SetTabEnabled( (ControlHandle) m_macControl , ii+1 , true ) ;
#if TARGET_CARBON
if ( GetImageList() && GetPageImage(ii) >= 0 )
{
// tab controls only support very specific types of images, therefore we are doing an odyssee
// accross the icon worlds (even Apple DTS did not find a shorter path)
// in order not to pollute the icon registry we put every icon into (OSType) 1 and immediately
// 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
ControlButtonContentInfo info ;
wxMacCreateBitmapButton( &info , *GetImageList()->GetBitmap( GetPageImage(ii ) ) , kControlContentPictHandle) ;
IconFamilyHandle iconFamily = (IconFamilyHandle) NewHandle(0) ;
OSErr err = SetIconFamilyData( iconFamily, 'PICT' , (Handle) info.u.picture ) ;
wxASSERT_MSG( err == noErr , "Error when adding bitmap" ) ;
IconRef iconRef ;
err = RegisterIconRefFromIconFamily( 'WXNG' , (OSType) 1 , iconFamily, &iconRef ) ;
wxASSERT_MSG( err == noErr , "Error when adding bitmap" ) ;
info.contentType = kControlContentIconRef ;
info.u.iconRef = iconRef ;
SetControlData( (ControlHandle) m_macControl, ii+1,kControlTabImageContentTag,
sizeof( info ), (Ptr)&info );
// we ignore the error, since if there is no support for icons on tabs, the data cannot be set
UnregisterIconRef( 'WXNG' , (OSType) 1 ) ;
ReleaseIconRef( iconRef ) ;
DisposeHandle( (Handle) iconFamily ) ;
}
#endif
}
Rect bounds;
GetControlBounds((ControlHandle)m_macControl, &bounds);

View File

@@ -132,8 +132,17 @@ bool wxNotebook::Create(wxWindow *parent,
MacPreControlCreate( parent , id , "" , pos , size ,style, wxDefaultValidator , name , &bounds , title ) ;
int tabstyle = kControlTabSmallNorthProc ;
if ( HasFlag(wxNB_LEFT) )
tabstyle = kControlTabSmallWestProc ;
else if ( HasFlag( wxNB_RIGHT ) )
tabstyle = kControlTabSmallEastProc ;
else if ( HasFlag( wxNB_BOTTOM ) )
tabstyle = kControlTabSmallSouthProc ;
m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , false , 0 , 0 , 1,
kControlTabSmallProc , (long) this ) ;
tabstyle , (long) this ) ;
MacPostControlCreate() ;
return TRUE ;
@@ -233,7 +242,7 @@ int wxNotebook::GetPageImage(int nPage) const
{
wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, _T("invalid notebook page") );
return 0 ;
return m_images[nPage];
}
bool wxNotebook::SetPageImage(int nPage, int nImage)
@@ -243,7 +252,17 @@ bool wxNotebook::SetPageImage(int nPage, int nImage)
wxCHECK_MSG( m_imageList && nImage < m_imageList->GetImageCount(), FALSE,
_T("invalid image index in SetPageImage()") );
return FALSE;
if ( nImage != m_images[nPage] )
{
// if the item didn't have an icon before or, on the contrary, did have
// it but has lost it now, its size will change - but if the icon just
// changes, it won't
m_images[nPage] = nImage;
MacSetupTabs() ;
}
return TRUE;
}
// ----------------------------------------------------------------------------
@@ -295,6 +314,8 @@ bool wxNotebook::InsertPage(int nPage,
// save the pointer to the page
m_pages.Insert(pPage, nPage);
m_images.Insert(imageId, nPage);
MacSetupTabs();
if ( bSelect ) {
@@ -332,7 +353,8 @@ void wxNotebook::MacSetupTabs()
wxNotebookPage *page;
ControlTabInfoRec info;
Boolean enabled = true;
OSStatus err = noErr ;
for(int ii = 0; ii < GetPageCount(); ii++)
{
page = m_pages[ii];
@@ -346,8 +368,35 @@ void wxNotebook::MacSetupTabs()
#endif
SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabInfoTag,
sizeof( ControlTabInfoRec) , (char*) &info ) ;
SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabEnabledFlagTag,
sizeof( Boolean ), (Ptr)&enabled );
SetTabEnabled( (ControlHandle) m_macControl , ii+1 , true ) ;
#if TARGET_CARBON
if ( GetImageList() && GetPageImage(ii) >= 0 )
{
// tab controls only support very specific types of images, therefore we are doing an odyssee
// accross the icon worlds (even Apple DTS did not find a shorter path)
// in order not to pollute the icon registry we put every icon into (OSType) 1 and immediately
// 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
ControlButtonContentInfo info ;
wxMacCreateBitmapButton( &info , *GetImageList()->GetBitmap( GetPageImage(ii ) ) , kControlContentPictHandle) ;
IconFamilyHandle iconFamily = (IconFamilyHandle) NewHandle(0) ;
OSErr err = SetIconFamilyData( iconFamily, 'PICT' , (Handle) info.u.picture ) ;
wxASSERT_MSG( err == noErr , "Error when adding bitmap" ) ;
IconRef iconRef ;
err = RegisterIconRefFromIconFamily( 'WXNG' , (OSType) 1 , iconFamily, &iconRef ) ;
wxASSERT_MSG( err == noErr , "Error when adding bitmap" ) ;
info.contentType = kControlContentIconRef ;
info.u.iconRef = iconRef ;
SetControlData( (ControlHandle) m_macControl, ii+1,kControlTabImageContentTag,
sizeof( info ), (Ptr)&info );
// we ignore the error, since if there is no support for icons on tabs, the data cannot be set
UnregisterIconRef( 'WXNG' , (OSType) 1 ) ;
ReleaseIconRef( iconRef ) ;
DisposeHandle( (Handle) iconFamily ) ;
}
#endif
}
Rect bounds;
GetControlBounds((ControlHandle)m_macControl, &bounds);