fixed deleting pages from the notebook
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 2 Jul 2001 19:37:51 +0000 (19:37 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 2 Jul 2001 19:37:51 +0000 (19:37 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10794 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/notebook.h
src/common/nbkbase.cpp
src/gtk/notebook.cpp
src/gtk1/notebook.cpp
src/msw/notebook.cpp

index ac8e96546692eb883bad8a10b082cb2e436fb1d2..0a05ec91203e4cf2dac383f7d6df50c6d5d76806 100644 (file)
@@ -155,7 +155,7 @@ public:
 
 protected:
     // remove the page and return a pointer to it
-    virtual wxNotebookPage *DoRemovePage(int page) = 0;
+    virtual wxNotebookPage *DoRemovePage(int page);
 
     // common part of all ctors
     void Init();
index da418151d9a71990b14436105d7ea7e27fc5b33a..aabd7476ddc97bc898c47386cf79b724424fec71 100644 (file)
@@ -113,6 +113,17 @@ bool wxNotebookBase::DeletePage(int nPage)
     return TRUE;
 }
 
+wxNotebookPage *wxNotebookBase::DoRemovePage(int nPage)
+{
+    wxCHECK_MSG( nPage >= 0 && (size_t)nPage < m_pages.GetCount(), NULL,
+                 _T("invalid page index in wxNotebookBase::DoRemovePage()") );
+
+    wxNotebookPage *pageRemoved = m_pages[nPage];
+    m_pages.Remove(nPage);
+
+    return pageRemoved;
+}
+
 int wxNotebookBase::GetNextPage(bool forward) const
 {
     int nPage;
index 1754454371b2c04db7a3f1fb2b51e7d6b4f377b3..7976e5cd15174dd4951c03e2d0c1f0c3368e8e23 100644 (file)
@@ -522,14 +522,11 @@ bool wxNotebook::DeleteAllPages()
 
     wxASSERT_MSG( GetPageCount() == 0, _T("all pages must have been deleted") );
 
-    return TRUE;
+    return wxNotebookBase::DeleteAllPages();
 }
 
 bool wxNotebook::DeletePage( int page )
 {
-    wxGtkNotebookPage* nb_page = GetNotebookPage(page);
-    wxCHECK_MSG( nb_page, FALSE, _T("invalid page in wxNotebook::DeletePage") );
-
     // GTK sets GtkNotebook.cur_page to NULL before sending the switch page
     // event so we have to store the selection internally
     if ( m_selection == -1 )
@@ -542,25 +539,23 @@ bool wxNotebook::DeletePage( int page )
         }
     }
 
-    m_pagesData.DeleteObject( nb_page );
-
+    // it will call our DoRemovePage() to do the real work
     return wxNotebookBase::DeletePage(page);
 }
 
 wxNotebookPage *wxNotebook::DoRemovePage( int page )
 {
-    wxGtkNotebookPage* nb_page = GetNotebookPage(page);
-
-    wxCHECK_MSG( nb_page, NULL, _T("wxNotebook::RemovePage: invalid page") );
+    wxNotebookPage *client = wxNotebookBase::DoRemovePage(page);
+    if ( !client )
+        return NULL;
 
-    wxNotebookPage *client = GetPage(page);
     gtk_widget_ref( client->m_widget );
     gtk_widget_unrealize( client->m_widget );
     gtk_widget_unparent( client->m_widget );
 
     gtk_notebook_remove_page( GTK_NOTEBOOK(m_widget), page );
 
-    m_pagesData.DeleteObject( nb_page );
+    m_pagesData.DeleteObject(GetNotebookPage(page));
 
     return client;
 }
index 1754454371b2c04db7a3f1fb2b51e7d6b4f377b3..7976e5cd15174dd4951c03e2d0c1f0c3368e8e23 100644 (file)
@@ -522,14 +522,11 @@ bool wxNotebook::DeleteAllPages()
 
     wxASSERT_MSG( GetPageCount() == 0, _T("all pages must have been deleted") );
 
-    return TRUE;
+    return wxNotebookBase::DeleteAllPages();
 }
 
 bool wxNotebook::DeletePage( int page )
 {
-    wxGtkNotebookPage* nb_page = GetNotebookPage(page);
-    wxCHECK_MSG( nb_page, FALSE, _T("invalid page in wxNotebook::DeletePage") );
-
     // GTK sets GtkNotebook.cur_page to NULL before sending the switch page
     // event so we have to store the selection internally
     if ( m_selection == -1 )
@@ -542,25 +539,23 @@ bool wxNotebook::DeletePage( int page )
         }
     }
 
-    m_pagesData.DeleteObject( nb_page );
-
+    // it will call our DoRemovePage() to do the real work
     return wxNotebookBase::DeletePage(page);
 }
 
 wxNotebookPage *wxNotebook::DoRemovePage( int page )
 {
-    wxGtkNotebookPage* nb_page = GetNotebookPage(page);
-
-    wxCHECK_MSG( nb_page, NULL, _T("wxNotebook::RemovePage: invalid page") );
+    wxNotebookPage *client = wxNotebookBase::DoRemovePage(page);
+    if ( !client )
+        return NULL;
 
-    wxNotebookPage *client = GetPage(page);
     gtk_widget_ref( client->m_widget );
     gtk_widget_unrealize( client->m_widget );
     gtk_widget_unparent( client->m_widget );
 
     gtk_notebook_remove_page( GTK_NOTEBOOK(m_widget), page );
 
-    m_pagesData.DeleteObject( nb_page );
+    m_pagesData.DeleteObject(GetNotebookPage(page));
 
     return client;
 }
index 707a2f1db4a94f8ce2605ca9599b08633d8f3437..c6c7066c5b35a06a2ed316c3d0943657d61d1f8a 100644 (file)
@@ -342,13 +342,12 @@ bool wxNotebook::DeletePage(int nPage)
 // remove one page from the notebook, without deleting
 wxNotebookPage *wxNotebook::DoRemovePage(int nPage)
 {
-  wxCHECK_MSG( IS_VALID_PAGE(nPage), NULL, wxT("notebook page out of range") );
+  wxNotebookPage *pageRemoved = wxNotebookBase::DoRemovePage(nPage);
+  if ( !pageRemoved )
+      return NULL;
 
   TabCtrl_DeleteItem(m_hwnd, nPage);
 
-  wxNotebookPage *pageRemoved = m_pages[nPage];
-  m_pages.Remove(nPage);
-
   if ( m_pages.IsEmpty() )
     m_nSelection = -1;
   else