]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/notebmac.cpp
Fit modeless preferences dialog to its contents too.
[wxWidgets.git] / src / osx / carbon / notebmac.cpp
index 9840b549f4db41da993e02395d78da1d5ed0707c..fe2412e02323cbd0fa2755cf4e21bbe668aff43f 100644 (file)
 // check that the page index is valid
 #define IS_VALID_PAGE(nPage) ((nPage) < GetPageCount())
 
+class wxCarbonTabView : public wxMacControl
+{
+public:
+    wxCarbonTabView( wxWindowMac* peer ) : wxMacControl(peer )
+    {
+    }
+    
+    // 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 SetupTabs( const wxNotebook& notebook)
+    {
+        const size_t countPages = notebook.GetPageCount();
+        SetMaximum( countPages ) ;
+        
+        wxNotebookPage *page;
+        ControlTabInfoRecV1 info;
+        
+        for (size_t ii = 0; ii < countPages; ii++)
+        {
+            page = (wxNotebookPage*) notebook.GetPage(ii);
+            info.version = kControlTabInfoVersionOne;
+            info.iconSuiteID = 0;
+            wxCFStringRef cflabel( page->GetLabel(), page->GetFont().GetEncoding() ) ;
+            info.name = cflabel ;
+            SetData<ControlTabInfoRecV1>( ii + 1, kControlTabInfoTag, &info ) ;
+            
+            if ( notebook.GetImageList() && notebook.GetPageImage(ii) >= 0 )
+            {
+                const wxBitmap bmap = notebook.GetImageList()->GetBitmap( notebook.GetPageImage( ii ) ) ;
+                if ( bmap.IsOk() )
+                {
+                    ControlButtonContentInfo info ;
+                    
+                    wxMacCreateBitmapButton( &info, bmap ) ;
+                    
+                    OSStatus err = SetData<ControlButtonContentInfo>( ii + 1, kControlTabImageContentTag, &info );
+                    if ( err != noErr )
+                    {
+                        wxFAIL_MSG("Error when setting icon on tab");
+                    }
+                    
+                    wxMacReleaseBitmapButton( &info ) ;
+                }
+            }
+            SetTabEnabled( ii + 1, true ) ;
+        }
+    }
+    
+    int TabHitTest(const wxPoint & pt, long* flags)
+    {
+        int resultV = wxNOT_FOUND;
+        
+        wxNotebook *notebookpeer = wxDynamicCast( GetWXPeer() , wxNotebook );
+        if ( NULL == notebookpeer )
+            return wxNOT_FOUND;
+        
+        const int countPages = notebookpeer->GetPageCount();
+        
+        // we have to convert from Client to Window relative coordinates
+        wxPoint adjustedPt = pt + GetWXPeer()->GetClientAreaOrigin();
+        // and now to HIView native ones
+        adjustedPt.x -= GetWXPeer()->MacGetLeftBorderSize() ;
+        adjustedPt.y -= GetWXPeer()->MacGetTopBorderSize() ;
+        
+        HIPoint hipoint= { adjustedPt.x , adjustedPt.y } ;
+        HIViewPartCode outPart = 0 ;
+        OSStatus err = HIViewGetPartHit( GetControlRef(), &hipoint, &outPart );
+        
+        int max = 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 = GetValue() ;
+            int maxval = max ;
+            if ( max == 1 )
+            {
+                SetMaximum( 2 ) ;
+                maxval = 2 ;
+            }
+            
+            if ( val == 1 )
+                SetValue( maxval ) ;
+            else
+                SetValue( 1 ) ;
+            
+            err = HIViewGetPartHit( GetControlRef(), &hipoint, &outPart );
+            
+            SetValue( val ) ;
+            if ( max == 1 )
+                SetMaximum( 1 ) ;
+        }
+        
+        if ( outPart >= 1 && outPart <= countPages )
+            resultV = outPart - 1 ;
+        
+        if (flags != NULL)
+        {
+            *flags = 0;
+            
+            // we cannot differentiate better
+            if (resultV >= 0)
+                *flags |= wxBK_HITTEST_ONLABEL;
+            else
+                *flags |= wxBK_HITTEST_NOWHERE;
+        }
+        
+        return resultV;
+        
+    }
+    
+};
+
 wxWidgetImplType* wxWidgetImpl::CreateTabView( wxWindowMac* wxpeer,
                                     wxWindowMac* parent,
                                     wxWindowID WXUNUSED(id),
@@ -69,7 +186,8 @@ wxWidgetImplType* wxWidgetImpl::CreateTabView( wxWindowMac* wxpeer,
             break;
     }
 
-    wxMacControl* peer = new wxMacControl( wxpeer );
+    wxMacControl* peer = new wxCarbonTabView( wxpeer );
+    
     OSStatus err = CreateTabsControl(
         MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds,
         tabsize, tabstyle, 0, NULL, peer->GetControlRefAddr() );
@@ -78,114 +196,4 @@ wxWidgetImplType* wxWidgetImpl::CreateTabView( wxWindowMac* wxpeer,
     return peer;
 }
 
-
-
-
-
-/*
-int wxNotebook::HitTest(const wxPoint& pt, long * flags) const
-{
-    int resultV = wxNOT_FOUND;
-
-    const int countPages = GetPageCount();
-
-    // we have to convert from Client to Window relative coordinates
-    wxPoint adjustedPt = pt + GetClientAreaOrigin();
-    // and now to HIView native ones
-    adjustedPt.x -= MacGetLeftBorderSize() ;
-    adjustedPt.y -= MacGetTopBorderSize() ;
-
-    HIPoint hipoint= { adjustedPt.x , adjustedPt.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 - 1 ;
-
-    if (flags != NULL)
-    {
-        *flags = 0;
-
-        // we cannot differentiate better
-        if (resultV >= 0)
-            *flags |= wxBK_HITTEST_ONLABEL;
-        else
-            *flags |= wxBK_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 wxMacControl::SetupTabs( const wxNotebook& notebook)
-{
-    const size_t countPages = notebook.GetPageCount();
-    SetMaximum( countPages ) ;
-
-    wxNotebookPage *page;
-    ControlTabInfoRecV1 info;
-
-    for (size_t ii = 0; ii < countPages; ii++)
-    {
-        page = (wxNotebookPage*) notebook.GetPage(ii);
-        info.version = kControlTabInfoVersionOne;
-        info.iconSuiteID = 0;
-        wxCFStringRef cflabel( page->GetLabel(), page->GetFont().GetEncoding() ) ;
-        info.name = cflabel ;
-        SetData<ControlTabInfoRecV1>( ii + 1, kControlTabInfoTag, &info ) ;
-
-        if ( notebook.GetImageList() && notebook.GetPageImage(ii) >= 0 )
-        {
-            const wxBitmap bmap = notebook.GetImageList()->GetBitmap( notebook.GetPageImage( ii ) ) ;
-            if ( bmap.Ok() )
-            {
-                ControlButtonContentInfo info ;
-
-                wxMacCreateBitmapButton( &info, bmap ) ;
-
-                OSStatus err = SetData<ControlButtonContentInfo>( ii + 1, kControlTabImageContentTag, &info );
-                if ( err != noErr )
-                {
-                    wxFAIL_MSG("Error when setting icon on tab");
-                }
-
-                wxMacReleaseBitmapButton( &info ) ;
-            }
-        }
-        SetTabEnabled( ii + 1, true ) ;
-    }
-}
-
 #endif