X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/22026088535d0c7dafaae15133a8d1078195a366..fe779e404706294a48d88964ecbff29e3664e485:/src/mac/carbon/notebmac.cpp diff --git a/src/mac/carbon/notebmac.cpp b/src/mac/carbon/notebmac.cpp index c95eadadcd..36a27df2eb 100644 --- a/src/mac/carbon/notebmac.cpp +++ b/src/mac/carbon/notebmac.cpp @@ -24,6 +24,7 @@ #include "wx/string.h" #include "wx/log.h" #include "wx/imaglist.h" +#include "wx/image.h" #include "wx/notebook.h" #include "wx/mac/uma.h" // ---------------------------------------------------------------------------- @@ -31,7 +32,7 @@ // ---------------------------------------------------------------------------- // check that the page index is valid -#define IS_VALID_PAGE(nPage) (((nPage) >= 0) && ((nPage) < GetPageCount())) +#define IS_VALID_PAGE(nPage) ((nPage) < GetPageCount()) // ---------------------------------------------------------------------------- @@ -202,7 +203,6 @@ bool wxNotebook::Create(wxWindow *parent, // dtor wxNotebook::~wxNotebook() { - m_macControl = NULL ; } wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const @@ -259,7 +259,7 @@ void wxNotebook::SetPageSize(const wxSize& size) wxFAIL_MSG( wxT("wxNotebook::SetPageSize not implemented") ); } -int wxNotebook::SetSelection(int nPage) +int wxNotebook::SetSelection(size_t nPage) { if( !IS_VALID_PAGE(nPage) ) return m_nSelection ; @@ -271,7 +271,7 @@ int wxNotebook::SetSelection(int nPage) return m_nSelection; } -bool wxNotebook::SetPageText(int nPage, const wxString& strText) +bool wxNotebook::SetPageText(size_t nPage, const wxString& strText) { wxASSERT( IS_VALID_PAGE(nPage) ); @@ -282,7 +282,7 @@ bool wxNotebook::SetPageText(int nPage, const wxString& strText) return true; } -wxString wxNotebook::GetPageText(int nPage) const +wxString wxNotebook::GetPageText(size_t nPage) const { wxASSERT( IS_VALID_PAGE(nPage) ); @@ -290,14 +290,14 @@ wxString wxNotebook::GetPageText(int nPage) const return page->GetLabel(); } -int wxNotebook::GetPageImage(int nPage) const +int wxNotebook::GetPageImage(size_t nPage) const { wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, _T("invalid notebook page") ); return m_images[nPage]; } -bool wxNotebook::SetPageImage(int nPage, int nImage) +bool wxNotebook::SetPageImage(size_t nPage, int nImage) { wxCHECK_MSG( IS_VALID_PAGE(nPage), FALSE, _T("invalid notebook page") ); @@ -322,7 +322,7 @@ bool wxNotebook::SetPageImage(int nPage, int nImage) // ---------------------------------------------------------------------------- // remove one page from the notebook, without deleting the window -wxNotebookPage* wxNotebook::DoRemovePage(int nPage) +wxNotebookPage* wxNotebook::DoRemovePage(size_t nPage) { wxCHECK( IS_VALID_PAGE(nPage), NULL ); wxNotebookPage* page = m_pages[nPage] ; @@ -330,7 +330,7 @@ wxNotebookPage* wxNotebook::DoRemovePage(int nPage) MacSetupTabs(); - if(m_nSelection >= GetPageCount()) { + if(m_nSelection >= (int)GetPageCount()) { m_nSelection = GetPageCount() - 1; } if(m_nSelection >= 0) { @@ -342,30 +342,25 @@ wxNotebookPage* wxNotebook::DoRemovePage(int nPage) // remove all pages bool wxNotebook::DeleteAllPages() { - // TODO: delete native widget pages - WX_CLEAR_ARRAY(m_pages) ; MacSetupTabs(); - + m_nSelection = -1 ; return TRUE; } // same as AddPage() but does it at given position -bool wxNotebook::InsertPage(int nPage, +bool wxNotebook::InsertPage(size_t nPage, wxNotebookPage *pPage, const wxString& strText, bool bSelect, int imageId) { - wxASSERT( pPage != NULL ); - wxCHECK( IS_VALID_PAGE(nPage) || nPage == GetPageCount(), FALSE ); + if ( !wxNotebookBase::InsertPage(nPage, pPage, strText, bSelect, imageId) ) + return false; pPage->SetLabel(strText); - // save the pointer to the page - m_pages.Insert(pPage, nPage); - m_images.Insert(imageId, nPage); MacSetupTabs(); @@ -376,7 +371,7 @@ bool wxNotebook::InsertPage(int nPage, else if ( m_nSelection == -1 ) { m_nSelection = 0; } - else if (m_nSelection >= nPage) { + else if ((size_t)m_nSelection >= nPage) { m_nSelection++; } // don't show pages by default (we'll need to adjust their size first) @@ -407,7 +402,8 @@ void wxNotebook::MacSetupTabs() wxNotebookPage *page; ControlTabInfoRec info; - for(int ii = 0; ii < GetPageCount(); ii++) + const size_t countPages = GetPageCount(); + for(size_t ii = 0; ii < countPages; ii++) { page = m_pages[ii]; info.version = 0; @@ -426,22 +422,32 @@ void wxNotebook::MacSetupTabs() // 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 , wxT("Error when adding bitmap") ) ; - IconRef 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 ) ; - ReleaseIconRef( iconRef ) ; - DisposeHandle( (Handle) iconFamily ) ; + wxBitmap* bmap = GetImageList()->GetBitmap( GetPageImage(ii ) ) ; + if ( bmap ) + { + wxBitmap scaledBitmap ; + if ( bmap->GetWidth() != 16 || bmap->GetHeight() != 16 ) + { + scaledBitmap = wxBitmap( bmap->ConvertToImage().Scale(16,16) ) ; + bmap = &scaledBitmap ; + } + ControlButtonContentInfo info ; + wxMacCreateBitmapButton( &info , *bmap , kControlContentPictHandle) ; + IconFamilyHandle iconFamily = (IconFamilyHandle) NewHandle(0) ; + 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 ) ; + 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 ) ; + ReleaseIconRef( iconRef ) ; + DisposeHandle( (Handle) iconFamily ) ; + } } #endif }