]> git.saurik.com Git - wxWidgets.git/commitdiff
avoid conflict between wxBookCtrlBase::DoSetSelection() and the derived classes;...
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 9 Oct 2006 21:29:12 +0000 (21:29 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 9 Oct 2006 21:29:12 +0000 (21:29 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41843 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/bookctrl.h
include/wx/choicebk.h
include/wx/listbook.h
include/wx/toolbook.h
src/common/bookctrl.cpp
src/generic/choicbkg.cpp
src/generic/listbkg.cpp
src/generic/toolbkg.cpp

index 85d769d71ae392e31ffec88662acb1cfbffe124f..8d5a2a30727d64f41b934a4ff7f1dd1a14c92ab4 100644 (file)
@@ -222,22 +222,36 @@ public:
     virtual bool HasMultiplePages() const { return true; }
 
 protected:
-    // typically, wxBookCtrl-derived classes will use DoSetSelection() function
-    // to implement SetSelection() and ChangeSelection() functions.
-    // these flags make DoSetSelection() more readable
+    // flags for DoSetSelection()
     enum
     {
         SetSelection_SendEvent = 1
     };
 
-    // if using DoSetSelection() for implementing [Set|Change]Selection,
-    // then override UpdateSelectedPage() and MakeChangedEvent()
-    virtual int DoSetSelection(size_t nPage, int flags, wxBookCtrlBaseEvent &event);
+    // set the selection to the given page, sending the events (which can
+    // possibly prevent the page change from taking place) if SendEvent flag is
+    // included
+    virtual int DoSetSelection(size_t nPage, int flags = 0);
+
+    // if the derived class uses DoSetSelection() for implementing
+    // [Set|Change]Selection, it must override UpdateSelectedPage(),
+    // CreatePageChangingEvent() and MakeChangedEvent(), but as it might not
+    // use it, these functions are not pure virtual
+
+    // called to notify the control about a new current page
     virtual void UpdateSelectedPage(size_t WXUNUSED(newsel))
         { wxFAIL_MSG(wxT("Override this function!")); }
-    virtual void MakeChangedEvent(wxBookCtrlBaseEvent &WXUNUSED(event))
+
+    // create a new "page changing" event
+    virtual wxBookCtrlBaseEvent* CreatePageChangingEvent() const
+        { wxFAIL_MSG(wxT("Override this function!")); return NULL; }
+
+    // modify the event created by CreatePageChangingEvent() to "page changed"
+    // event, usually by just calling SetEventType() on it
+    virtual void MakeChangedEvent(wxBookCtrlBaseEvent& WXUNUSED(event))
         { wxFAIL_MSG(wxT("Override this function!")); }
 
+
     // Should we accept NULL page pointers in Add/InsertPage()?
     //
     // Default is no but derived classes may override it if they can treat NULL
index cbb17693f8825ad28ebb4d80717efd427fdbc0fc..0414d0d2f02786b9b0289843c2c95072d75186d4 100644 (file)
@@ -84,18 +84,14 @@ protected:
     // get the size which the choice control should have
     virtual wxSize GetControllerSize() const;
 
-    int DoSetSelection(size_t nPage, int flags = 0);
-
     void UpdateSelectedPage(size_t newsel)
     {
         m_selection = newsel;
         GetChoiceCtrl()->Select(newsel);
     }
 
-    void MakeChangedEvent(wxBookCtrlBaseEvent &event)
-    {
-        event.SetEventType(wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED);
-    }
+    wxBookCtrlBaseEvent* CreatePageChangingEvent() const;
+    void MakeChangedEvent(wxBookCtrlBaseEvent &event);
 
     // event handlers
     void OnChoiceSelected(wxCommandEvent& event);
index b62da59d47ebe748eb41808172ccd529f22cd83b..056fc64bbc1c18da39c54b2e98202d44fb32492b 100644 (file)
@@ -85,14 +85,10 @@ protected:
     // return the page corresponding to the tab at the specified position
     virtual int HitTest(const wxPoint& pt, long *flags = NULL) const;
 
-    int DoSetSelection(size_t nPage, int flags = 0);
-
     void UpdateSelectedPage(size_t newsel);
 
-    void MakeChangedEvent(wxBookCtrlBaseEvent &event)
-    {
-        event.SetEventType(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED);
-    }
+    wxBookCtrlBaseEvent* CreatePageChangingEvent() const;
+    void MakeChangedEvent(wxBookCtrlBaseEvent &event);
 
     // event handlers
     void OnListSelected(wxListEvent& event);
index 27e3b28dba43914b9dec23825d1c7f1e12166dbe..f829b796b4c579c8fa6ef8d418c9cc23d316c2c6 100644 (file)
@@ -101,13 +101,10 @@ protected:
     void OnSize(wxSizeEvent& event);
     void OnIdle(wxIdleEvent& event);
 
-    int DoSetSelection(size_t nPage, int flags = 0);
     void UpdateSelectedPage(size_t newsel);
-    
-    void MakeChangedEvent(wxBookCtrlBaseEvent &event)
-    {
-        event.SetEventType(wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED);
-    }
+
+    wxBookCtrlBaseEvent* CreatePageChangingEvent() const;
+    void MakeChangedEvent(wxBookCtrlBaseEvent &event);
 
     // the currently selected page or wxNOT_FOUND if none
     int m_selection;
index d194cc20a9ccee7da88a2fd2b711b5fa8d4f9113..db698594dd209817e76bc5e971b181d7d354ee8c 100644 (file)
@@ -423,7 +423,7 @@ wxSize wxBookCtrlBase::GetControllerSize() const
     return size;
 }
 
-int wxBookCtrlBase::DoSetSelection(size_t n, int flags, wxBookCtrlBaseEvent &event)
+int wxBookCtrlBase::DoSetSelection(size_t n, int flags)
 {
     wxCHECK_MSG( n < GetPageCount(), wxNOT_FOUND,
                  wxT("invalid page index in wxBookCtrlBase::DoSetSelection()") );
@@ -432,15 +432,16 @@ int wxBookCtrlBase::DoSetSelection(size_t n, int flags, wxBookCtrlBaseEvent &eve
 
     if ( oldSel != wxNOT_FOUND && n != (size_t)oldSel )
     {
+        wxBookCtrlBaseEvent *event = CreatePageChangingEvent();
         bool allowed = false;
 
         if ( flags & SetSelection_SendEvent )
         {
-            event.SetSelection(n);
-            event.SetOldSelection(oldSel);
-            event.SetEventObject(this);
+            event->SetSelection(n);
+            event->SetOldSelection(oldSel);
+            event->SetEventObject(this);
 
-            allowed = !GetEventHandler()->ProcessEvent(event) || event.IsAllowed();
+            allowed = !GetEventHandler()->ProcessEvent(*event) || event->IsAllowed();
         }
 
         if ( !(flags & SetSelection_SendEvent) || allowed)
@@ -458,10 +459,12 @@ int wxBookCtrlBase::DoSetSelection(size_t n, int flags, wxBookCtrlBaseEvent &eve
             if ( flags & SetSelection_SendEvent )
             {
                 // program allows the page change
-                MakeChangedEvent(event);
-                (void)GetEventHandler()->ProcessEvent(event);
+                MakeChangedEvent(*event);
+                (void)GetEventHandler()->ProcessEvent(*event);
             }
         }
+
+        delete event;
     }
 
     return oldSel;
index d74d0b575fc218ce485d1bfe802c4c27d02e7b72..7216b152bc115a61d9ef755edcea1c6adbd397e5 100644 (file)
@@ -209,10 +209,14 @@ int wxChoicebook::GetSelection() const
     return m_selection;
 }
 
-int wxChoicebook::DoSetSelection(size_t n, int flags)
+wxBookCtrlBaseEvent* wxChoicebook::CreatePageChangingEvent() const
 {
-    wxChoicebookEvent event(wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, m_windowId);
-    return wxBookCtrlBase::DoSetSelection(n, flags, event);
+    return new wxChoicebookEvent(wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, m_windowId);
+}
+
+void wxChoicebook::MakeChangedEvent(wxBookCtrlBaseEvent &event)
+{
+    event.SetEventType(wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED);
 }
 
 // ----------------------------------------------------------------------------
index 9f725353c00dd7678be1182b8e62b7473654255a..a9498bdf3cc9d1d71466dcdc53c2bb83d35d63dd 100644 (file)
@@ -274,12 +274,17 @@ int wxListbook::GetSelection() const
     return m_selection;
 }
 
-int wxListbook::DoSetSelection(size_t n, int flags)
+wxBookCtrlBaseEvent* wxListbook::CreatePageChangingEvent() const
 {
-    wxListbookEvent event(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, m_windowId);
-    return wxBookCtrlBase::DoSetSelection(n, flags, event);
+    return new wxListbookEvent(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, m_windowId);
 }
 
+void wxListbook::MakeChangedEvent(wxBookCtrlBaseEvent &event)
+{
+    event.SetEventType(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED);
+}
+
+
 // ----------------------------------------------------------------------------
 // adding/removing the pages
 // ----------------------------------------------------------------------------
index 1b8bff7284263ee911ac6ab44361e6be30b62c0c..310c29ab71d29dbc5eb4beaec420a652bc9b3a6e 100644 (file)
@@ -245,10 +245,14 @@ int wxToolbook::GetSelection() const
     return m_selection;
 }
 
-int wxToolbook::DoSetSelection(size_t n, int flags)
+wxBookCtrlBaseEvent* wxToolbook::CreatePageChangingEvent() const
 {
-    wxToolbookEvent event(wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING, m_windowId);
-    return wxBookCtrlBase::DoSetSelection(n, flags, event);
+    return new wxToolbookEvent(wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING, m_windowId);
+}
+
+void wxToolbook::MakeChangedEvent(wxBookCtrlBaseEvent &event)
+{
+    event.SetEventType(wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED);
 }
 
 void wxToolbook::UpdateSelectedPage(size_t newsel)