]> git.saurik.com Git - wxWidgets.git/commitdiff
added SendPageChanging/ChangedEvent() functions; fixed wxCocoa build broken by wxNote...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 8 Oct 2006 23:41:52 +0000 (23:41 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 8 Oct 2006 23:41:52 +0000 (23:41 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41764 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/cocoa/notebook.h
include/wx/notebook.h
src/cocoa/notebook.mm
src/common/nbkbase.cpp
src/gtk/notebook.cpp
src/mac/carbon/notebmac.cpp
src/msw/notebook.cpp
src/univ/notebook.cpp

index 97cfd33c4ce11e4144a0f4ecad863dcee6ddb29f..9ff89def2885294564ff4e85c3448cc8f7a255fb 100644 (file)
@@ -57,7 +57,6 @@ protected:
 public:
     // set the currently selected page, return the index of the previously
     // selected one (or -1 on error)
-    // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
     int SetSelection(size_t nPage);
     // get the currently selected page
     int GetSelection() const;
index 88551e2f235d77c87b0e943979b540859fdf728f..7fdb284892a7fed0cb10e0d5a1e797f4929cd70c 100644 (file)
@@ -89,6 +89,17 @@ public:
     // On platforms that support it, get the theme page background colour, else invalid colour
     virtual wxColour GetThemeBackgroundColour() const { return wxNullColour; }
 
+
+    // send wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING/ED events
+
+    // returns false if the change to nPage is vetoed by the program
+    bool SendPageChangingEvent(int nPage);
+
+    // sends the event about page change from old to new (or GetSelection() if
+    // new is -1)
+    void SendPageChangedEvent(int nPageOld, int nPageNew = -1);
+
+
 protected:
     DECLARE_NO_COPY_CLASS(wxNotebookBase)
 };
index d79c9bd8754affa99d9b271e98b6602c8d28872d..9cc3241b6569277ed0141b76d646e98c76663552 100644 (file)
@@ -261,8 +261,23 @@ bool wxNotebook::SetPageImage(size_t nPage, int nImage)
     return true;
 }
 
-
 int wxNotebook::SetSelection(size_t nPage)
+{
+    const int pageOld = GetSelection();
+
+    if ( !SendPageChangingEvent(nPage) )
+        return pageOld;
+
+    int page = ChangeSelection(nPage);
+    if ( page != wxNOT_FOUND )
+    {
+        SendPageChangedEvent(pageOld);
+    }
+
+    return page;
+}
+
+int wxNotebook::ChangeSelection(size_t nPage)
 {
     wxAutoNSAutoreleasePool pool;
     [GetNSTabView() selectTabViewItemAtIndex:nPage];
index 47011be7039af1a7933ccc82d9875f54d31ba8b1..ec391bb57febafa767cb241a8e00501c786189cd 100644 (file)
@@ -59,4 +59,26 @@ wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage) const
     return sizeTotal;
 }
 
+// ----------------------------------------------------------------------------
+// events
+// ----------------------------------------------------------------------------
+
+bool wxNotebookBase::SendPageChangingEvent(int nPage)
+{
+    wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, GetId());
+    event.SetSelection(nPage);
+    event.SetOldSelection(GetSelection());
+    event.SetEventObject(this);
+    return !GetEventHandler()->ProcessEvent(event) || event.IsAllowed();
+}
+
+void wxNotebookBase::SendPageChangedEvent(int nPageOld, int nPageNew)
+{
+    wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, GetId());
+    event.SetSelection(nPageNew == -1 ? GetSelection() : nPageNew);
+    event.SetOldSelection(nPageOld);
+    event.SetEventObject(this);
+    GetEventHandler()->ProcessEvent(event);
+}
+
 #endif // wxUSE_NOTEBOOK
index 27105979a5abb27b6f0be173151585269bf84fa9..74e3465b81e71a10f40628465494124ea7baaae8 100644 (file)
@@ -89,7 +89,7 @@ WX_DEFINE_LIST(wxGtkNotebookPagesList)
 
 extern "C" {
 static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget),
-                                              GtkNotebookPage *WXUNUSED(page),
+                                              GtkNotebookPage *WXUNUSED(gpage),
                                               guint page,
                                               wxNotebook *notebook )
 {
@@ -118,12 +118,7 @@ static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget),
     }
     else
     {
-        wxNotebookEvent eventChanging( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING,
-                                    notebook->GetId(), page, old );
-        eventChanging.SetEventObject( notebook );
-
-        if ( (notebook->GetEventHandler()->ProcessEvent(eventChanging)) &&
-            !eventChanging.IsAllowed() )
+        if ( !notebook->SendPageChangingEvent(page) )
         {
             /* program doesn't allow the page change */
             g_signal_stop_emission_by_name (notebook->m_widget,
@@ -136,10 +131,7 @@ static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget),
             // not really changed in GTK+
             notebook->m_selection = page;
 
-            wxNotebookEvent eventChanged( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,
-                                        notebook->GetId(), page, old );
-            eventChanged.SetEventObject( notebook );
-            notebook->GetEventHandler()->ProcessEvent( eventChanged );
+            notebook->SendPageChangedEvent(old);
         }
     }
 
index 3406606bb8be9972d1dbeae8e3652a18b3e2a2d7..6daf1bd791f5964852ef26a4ab303f1afb110416 100644 (file)
@@ -168,19 +168,14 @@ int wxNotebook::DoSetSelection(size_t nPage, int flags)
     {
         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) )
             {
                 // vetoed by program
                 return m_nSelection;
             }
             //else: program allows the page change
 
-            event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED);
-            (void)GetEventHandler()->ProcessEvent(event);
+            SendPageChangedEvent(m_nSelection, nPage);
         }
 
         ChangePage(m_nSelection, nPage);
index 1efd29f383ef3da22ece0dde65d8e3d37fa8f166..7bab57b95907308aeb4c0298f076d3c592b6a571 100644 (file)
@@ -443,19 +443,14 @@ int wxNotebook::SetSelection(size_t nPage)
 {
     wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") );
 
-    if ( int(nPage) != m_nSelection )
+    if ( m_nSelection == wxNOT_FOUND || nPage != (size_t)m_nSelection )
     {
-        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);
+            SendPageChangedEvent(m_nSelection, nPage);
 
-           TabCtrl_SetCurSel(GetHwnd(), nPage);
+            TabCtrl_SetCurSel(GetHwnd(), nPage);
         }
     }
 
index 7ec0981b86a6793e037006f45099fea248baac56..ebe2c8bb583db6278a2b54759df17e616df62727 100644 (file)
@@ -243,14 +243,9 @@ int wxNotebook::DoSetSelection(size_t nPage, int flags)
         return m_sel;
     }
 
-    wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId);
-    if (flags & SetSelection_SendEvent)
+    if ( flags & SetSelection_SendEvent )
     {
-        // event handling
-        event.SetSelection(nPage);
-        event.SetOldSelection(m_sel);
-        event.SetEventObject(this);
-        if ( GetEventHandler()->ProcessEvent(event) && !event.IsAllowed() )
+        if ( !SendPageChangingEvent(nPage) )
         {
             // program doesn't allow the page change
             return m_sel;
@@ -300,11 +295,10 @@ int wxNotebook::DoSetSelection(size_t nPage, int flags)
         m_pages[m_sel]->Show();
     }
 
-    if (flags & SetSelection_SendEvent)
+    if ( flags & SetSelection_SendEvent )
     {
         // event handling
-        event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED);
-        GetEventHandler()->ProcessEvent(event);
+        SendPageChangedEvent(selOld);
     }
 
     return selOld;