+int wxNotebook::HitTest(const wxPoint& pt, long * flags) const
+{
+ int resultV = wxNOT_FOUND;
+#if TARGET_API_MAC_OSX
+ const int countPages = GetPageCount();
+
+ HIPoint hipoint= { pt.x , pt.y } ;
+ HIViewPartCode outPart = 0 ;
+ OSStatus err = HIViewGetPartHit (
+ m_peer->GetControlRef() ,
+ &hipoint ,
+ &outPart
+ );
+
+ int max = m_peer->GetMaximum() ;
+ if ( outPart == 0 && max > 0 )
+ {
+ // this is a hack, as unfortunately a hit on an already selected tab returns 0,
+ // so we have to go some extra miles to make sure we select something different
+ // and try again ..
+ int val = m_peer->GetValue() ;
+ int maxval = max ;
+ if ( max == 1 )
+ {
+ m_peer->SetMaximum( 2 ) ;
+ maxval = 2 ;
+ }
+
+ if ( val == 1 )
+ m_peer->SetValue( maxval ) ;
+ else
+ m_peer->SetValue( 1 ) ;
+
+ err = HIViewGetPartHit (
+ m_peer->GetControlRef() ,
+ &hipoint ,
+ &outPart
+ );
+
+ m_peer->SetValue( val ) ;
+ if ( max == 1 )
+ {
+ m_peer->SetMaximum( 1 ) ;
+ }
+ }
+
+ if ( outPart >= 1 && outPart <= countPages )
+ {
+ resultV = outPart ;
+ }
+#endif // TARGET_API_MAC_OSX
+
+ if (flags != NULL)
+ {
+ *flags = 0;
+
+ // we cannot differentiate better
+ if (resultV >= 1)
+ *flags |= wxNB_HITTEST_ONLABEL;
+ else
+ *flags |= wxNB_HITTEST_NOWHERE;
+ }
+ return resultV;
+}
+
+/* Added by Mark Newsam
+* When a page is added or deleted to the notebook this function updates
+* information held in the control so that it matches the order
+* the user would expect.
+*/
+void wxNotebook::MacSetupTabs()
+{
+ m_peer->SetMaximum( GetPageCount() ) ;
+
+ wxNotebookPage *page;
+ ControlTabInfoRecV1 info;
+
+ const size_t countPages = GetPageCount();
+ for(size_t ii = 0; ii < countPages; ii++)
+ {
+ page = m_pages[ii];
+ info.version = kControlTabInfoVersionOne;
+ info.iconSuiteID = 0;
+ wxMacCFStringHolder cflabel( page->GetLabel() , m_font.GetEncoding() ) ;
+ info.name = cflabel ;
+ m_peer->SetData<ControlTabInfoRecV1>( ii+1, kControlTabInfoTag, &info ) ;
+
+ if ( GetImageList() && GetPageImage(ii) >= 0 && UMAGetSystemVersion() >= 0x1020 )
+ {
+ const wxBitmap bmap = GetImageList()->GetBitmap( GetPageImage(ii ) ) ;
+ if ( bmap.Ok() )
+ {
+ ControlButtonContentInfo info ;
+
+ wxMacCreateBitmapButton( &info , bmap ) ;
+#ifdef __WXDEBUG__
+ OSStatus err =
+#endif // __WXDEBUG__
+ m_peer->SetData<ControlButtonContentInfo>( ii+1,kControlTabImageContentTag, &info );
+ wxASSERT_MSG( err == noErr , wxT("Error when setting icon on tab") ) ;
+ wxMacReleaseBitmapButton( &info ) ;
+ }
+ }
+ m_peer->SetTabEnabled( ii + 1 , true ) ;
+ }
+ Rect bounds;
+ m_peer->GetRectInWindowCoords( &bounds ) ;
+ InvalWindowRect((WindowRef)MacGetTopLevelWindowRef(), &bounds);
+}
+
+wxRect wxNotebook::GetPageRect() const
+{
+ wxSize size = GetClientSize() ;
+ return wxRect( 0 , 0 , size.x , size.y ) ;
+}