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:
@@ -132,8 +132,17 @@ bool wxNotebook::Create(wxWindow *parent,
|
|||||||
|
|
||||||
MacPreControlCreate( parent , id , "" , pos , size ,style, wxDefaultValidator , name , &bounds , title ) ;
|
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,
|
m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , false , 0 , 0 , 1,
|
||||||
kControlTabSmallProc , (long) this ) ;
|
tabstyle , (long) this ) ;
|
||||||
|
|
||||||
MacPostControlCreate() ;
|
MacPostControlCreate() ;
|
||||||
return TRUE ;
|
return TRUE ;
|
||||||
@@ -233,7 +242,7 @@ int wxNotebook::GetPageImage(int nPage) const
|
|||||||
{
|
{
|
||||||
wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, _T("invalid notebook page") );
|
wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, _T("invalid notebook page") );
|
||||||
|
|
||||||
return 0 ;
|
return m_images[nPage];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxNotebook::SetPageImage(int nPage, int nImage)
|
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,
|
wxCHECK_MSG( m_imageList && nImage < m_imageList->GetImageCount(), FALSE,
|
||||||
_T("invalid image index in SetPageImage()") );
|
_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
|
// save the pointer to the page
|
||||||
m_pages.Insert(pPage, nPage);
|
m_pages.Insert(pPage, nPage);
|
||||||
|
|
||||||
|
m_images.Insert(imageId, nPage);
|
||||||
|
|
||||||
MacSetupTabs();
|
MacSetupTabs();
|
||||||
|
|
||||||
if ( bSelect ) {
|
if ( bSelect ) {
|
||||||
@@ -332,7 +353,8 @@ void wxNotebook::MacSetupTabs()
|
|||||||
|
|
||||||
wxNotebookPage *page;
|
wxNotebookPage *page;
|
||||||
ControlTabInfoRec info;
|
ControlTabInfoRec info;
|
||||||
Boolean enabled = true;
|
|
||||||
|
OSStatus err = noErr ;
|
||||||
for(int ii = 0; ii < GetPageCount(); ii++)
|
for(int ii = 0; ii < GetPageCount(); ii++)
|
||||||
{
|
{
|
||||||
page = m_pages[ii];
|
page = m_pages[ii];
|
||||||
@@ -346,8 +368,35 @@ void wxNotebook::MacSetupTabs()
|
|||||||
#endif
|
#endif
|
||||||
SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabInfoTag,
|
SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabInfoTag,
|
||||||
sizeof( ControlTabInfoRec) , (char*) &info ) ;
|
sizeof( ControlTabInfoRec) , (char*) &info ) ;
|
||||||
SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabEnabledFlagTag,
|
SetTabEnabled( (ControlHandle) m_macControl , ii+1 , true ) ;
|
||||||
sizeof( Boolean ), (Ptr)&enabled );
|
|
||||||
|
#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;
|
Rect bounds;
|
||||||
GetControlBounds((ControlHandle)m_macControl, &bounds);
|
GetControlBounds((ControlHandle)m_macControl, &bounds);
|
||||||
|
@@ -132,8 +132,17 @@ bool wxNotebook::Create(wxWindow *parent,
|
|||||||
|
|
||||||
MacPreControlCreate( parent , id , "" , pos , size ,style, wxDefaultValidator , name , &bounds , title ) ;
|
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,
|
m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , false , 0 , 0 , 1,
|
||||||
kControlTabSmallProc , (long) this ) ;
|
tabstyle , (long) this ) ;
|
||||||
|
|
||||||
MacPostControlCreate() ;
|
MacPostControlCreate() ;
|
||||||
return TRUE ;
|
return TRUE ;
|
||||||
@@ -233,7 +242,7 @@ int wxNotebook::GetPageImage(int nPage) const
|
|||||||
{
|
{
|
||||||
wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, _T("invalid notebook page") );
|
wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, _T("invalid notebook page") );
|
||||||
|
|
||||||
return 0 ;
|
return m_images[nPage];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxNotebook::SetPageImage(int nPage, int nImage)
|
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,
|
wxCHECK_MSG( m_imageList && nImage < m_imageList->GetImageCount(), FALSE,
|
||||||
_T("invalid image index in SetPageImage()") );
|
_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
|
// save the pointer to the page
|
||||||
m_pages.Insert(pPage, nPage);
|
m_pages.Insert(pPage, nPage);
|
||||||
|
|
||||||
|
m_images.Insert(imageId, nPage);
|
||||||
|
|
||||||
MacSetupTabs();
|
MacSetupTabs();
|
||||||
|
|
||||||
if ( bSelect ) {
|
if ( bSelect ) {
|
||||||
@@ -332,7 +353,8 @@ void wxNotebook::MacSetupTabs()
|
|||||||
|
|
||||||
wxNotebookPage *page;
|
wxNotebookPage *page;
|
||||||
ControlTabInfoRec info;
|
ControlTabInfoRec info;
|
||||||
Boolean enabled = true;
|
|
||||||
|
OSStatus err = noErr ;
|
||||||
for(int ii = 0; ii < GetPageCount(); ii++)
|
for(int ii = 0; ii < GetPageCount(); ii++)
|
||||||
{
|
{
|
||||||
page = m_pages[ii];
|
page = m_pages[ii];
|
||||||
@@ -346,8 +368,35 @@ void wxNotebook::MacSetupTabs()
|
|||||||
#endif
|
#endif
|
||||||
SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabInfoTag,
|
SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabInfoTag,
|
||||||
sizeof( ControlTabInfoRec) , (char*) &info ) ;
|
sizeof( ControlTabInfoRec) , (char*) &info ) ;
|
||||||
SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabEnabledFlagTag,
|
SetTabEnabled( (ControlHandle) m_macControl , ii+1 , true ) ;
|
||||||
sizeof( Boolean ), (Ptr)&enabled );
|
|
||||||
|
#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;
|
Rect bounds;
|
||||||
GetControlBounds((ControlHandle)m_macControl, &bounds);
|
GetControlBounds((ControlHandle)m_macControl, &bounds);
|
||||||
|
Reference in New Issue
Block a user