]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/notebmac.cpp
Performance optimization
[wxWidgets.git] / src / mac / carbon / notebmac.cpp
index 9d90682bc0e0edda80008210f817d75217da8110..925e652b43eda6335a8d9a6dc4d2af8e8fc81f71 100644 (file)
@@ -34,7 +34,7 @@
 DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED)
 DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING)
 
-BEGIN_EVENT_TABLE(wxNotebook, wxControl)
+BEGIN_EVENT_TABLE(wxNotebook, wxBookCtrlBase)
     EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, wxNotebook::OnSelChange)
 
     EVT_SIZE(wxNotebook::OnSize)
@@ -42,7 +42,7 @@ BEGIN_EVENT_TABLE(wxNotebook, wxControl)
     EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey)
 END_EVENT_TABLE()
 
-IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxControl)
+IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxBookCtrlBase)
 IMPLEMENT_DYNAMIC_CLASS(wxNotebookEvent, wxCommandEvent)
 
 
@@ -105,10 +105,7 @@ bool wxNotebook::Create( wxWindow *parent,
     switch (GetWindowVariant())
     {
         case wxWINDOW_VARIANT_MINI:
-            if ( UMAGetSystemVersion() >= 0x1030 )
-                tabsize = 3 ;
-            else
-                tabsize = kControlSizeSmall;
+            tabsize = 3 ;
             break;
 
         case wxWINDOW_VARIANT_SMALL:
@@ -140,12 +137,12 @@ wxNotebook::~wxNotebook()
 // wxNotebook accessors
 // ----------------------------------------------------------------------------
 
-void wxNotebook::SetPadding(const wxSize& padding)
+void wxNotebook::SetPadding(const wxSize& WXUNUSED(padding))
 {
     // unsupported by OS
 }
 
-void wxNotebook::SetTabSize(const wxSize& sz)
+void wxNotebook::SetTabSize(const wxSize& WXUNUSED(sz))
 {
     // unsupported by OS
 }
@@ -160,28 +157,28 @@ wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
     return DoGetSizeFromClientSize( sizePage );
 }
 
-int wxNotebook::DoSetSelection(size_t nPage, int flags = 0)
+int wxNotebook::DoSetSelection(size_t nPage, int flags)
 {
     wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("DoSetSelection: invalid notebook page") );
 
-    if ( int(nPage) != m_nSelection )
+    if ( m_nSelection == wxNOT_FOUND || nPage != (size_t)m_nSelection )
     {
-        if (flags & SetSelection_SendEvent)
+        if ( flags & SetSelection_SendEvent )
         {
-            wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId);
-            event.SetSelection(nPage);
-            event.SetOldSelection(m_nSelection);
-            event.SetEventObject(this);
-            if ( !GetEventHandler()->ProcessEvent(event) || event.IsAllowed() )
+            if ( !SendPageChangingEvent(nPage) )
             {
-                // program allows the page change
-                event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED);
-                (void)GetEventHandler()->ProcessEvent(event);
-
-                ChangePage(m_nSelection, nPage);
+                // vetoed by program
+                return m_nSelection;
             }
+            //else: program allows the page change
+
+            SendPageChangedEvent(m_nSelection, nPage);
         }
 
+        ChangePage(m_nSelection, nPage);
+    }
+    //else: no change
+
     return m_nSelection;
 }
 
@@ -190,7 +187,7 @@ bool wxNotebook::SetPageText(size_t nPage, const wxString& strText)
     wxCHECK_MSG( IS_VALID_PAGE(nPage), false, wxT("SetPageText: invalid notebook page") );
 
     wxNotebookPage *page = m_pages[nPage];
-    page->SetLabel(strText);
+    page->SetLabel(wxStripMenuCodes(strText));
     MacSetupTabs();
 
     return true;
@@ -228,11 +225,6 @@ bool wxNotebook::SetPageImage(size_t nPage, int nImage)
 
         MacSetupTabs() ;
     }
-        else
-        {
-            ChangePage(m_nSelection, nPage);
-        }
-    }
 
     return true;
 }
@@ -289,7 +281,7 @@ bool wxNotebook::InsertPage(size_t nPage,
     // don't show pages by default (we'll need to adjust their size first)
     pPage->Show( false ) ;
 
-    pPage->SetLabel( strText );
+    pPage->SetLabel( wxStripMenuCodes(strText) );
 
     m_images.Insert( imageId, nPage );
 
@@ -334,7 +326,6 @@ int wxNotebook::HitTest(const wxPoint& pt, long * flags) const
 {
     int resultV = wxNOT_FOUND;
 
-#if TARGET_API_MAC_OSX
     const int countPages = GetPageCount();
 
     // we have to convert from Client to Window relative coordinates
@@ -375,7 +366,6 @@ int wxNotebook::HitTest(const wxPoint& pt, long * flags) const
 
     if ( outPart >= 1 && outPart <= countPages )
         resultV = outPart - 1 ;
-#endif // TARGET_API_MAC_OSX
 
     if (flags != NULL)
     {
@@ -409,11 +399,11 @@ void wxNotebook::MacSetupTabs()
         page = m_pages[ii];
         info.version = kControlTabInfoVersionOne;
         info.iconSuiteID = 0;
-        wxMacCFStringHolder cflabel( page->GetLabel(), m_font.GetEncoding() ) ;
+        wxCFStringRef cflabel( page->GetLabel(), m_font.GetEncoding() ) ;
         info.name = cflabel ;
         m_peer->SetData<ControlTabInfoRecV1>( ii + 1, kControlTabInfoTag, &info ) ;
 
-        if ( GetImageList() && GetPageImage(ii) >= 0 && UMAGetSystemVersion() >= 0x1020 )
+        if ( GetImageList() && GetPageImage(ii) >= 0 )
         {
             const wxBitmap bmap = GetImageList()->GetBitmap( GetPageImage( ii ) ) ;
             if ( bmap.Ok() )
@@ -432,9 +422,7 @@ void wxNotebook::MacSetupTabs()
         m_peer->SetTabEnabled( ii + 1, true ) ;
     }
 
-    Rect bounds;
-    m_peer->GetRectInWindowCoords( &bounds ) ;
-    InvalWindowRect( (WindowRef)MacGetTopLevelWindowRef(), &bounds );
+    Refresh();
 }
 
 wxRect wxNotebook::GetPageRect() const
@@ -521,7 +509,7 @@ void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event)
                 event.SetEventObject( this );
 
                 wxWindow *page = m_pages[m_nSelection];
-                if ( !page->GetEventHandler()->ProcessEvent( event ) )
+                if ( !page->HandleWindowEvent( event ) )
                 {
                     page->SetFocus();
                 }
@@ -539,7 +527,7 @@ void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event)
             if ( parent )
             {
                 event.SetCurrentFocus( this );
-                parent->GetEventHandler()->ProcessEvent( event );
+                parent->HandleWindowEvent( event );
             }
         }
     }
@@ -566,7 +554,7 @@ bool wxNotebook::DoPhase(int WXUNUSED(nPhase))
 
 #endif // wxUSE_CONSTRAINTS
 
-void wxNotebook::Command(wxCommandEvent& event)
+void wxNotebook::Command(wxCommandEvent& WXUNUSED(event))
 {
     wxFAIL_MSG(wxT("wxNotebook::Command not implemented"));
 }
@@ -606,7 +594,7 @@ wxInt32 wxNotebook::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTR
             wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId,
             newSel , m_nSelection );
         changing.SetEventObject( this );
-        GetEventHandler()->ProcessEvent( changing );
+        HandleWindowEvent( changing );
 
         if ( changing.IsAllowed() )
         {
@@ -614,7 +602,7 @@ wxInt32 wxNotebook::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTR
                 wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId,
                 newSel, m_nSelection );
             event.SetEventObject( this );
-            GetEventHandler()->ProcessEvent( event );
+            HandleWindowEvent( event );
         }
         else
         {