]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/notebook.cpp
More asserts (well, checks) without _T()
[wxWidgets.git] / src / msw / notebook.cpp
index d6c5fc5234928a1857e22c93b29aa1ab0cb03071..6c0c06db8e00a67410b1a8f2c99d0250674a89db 100644 (file)
@@ -274,11 +274,22 @@ bool wxNotebook::DeletePage(int nPage)
 {
   wxCHECK_MSG( IS_VALID_PAGE(nPage), FALSE, _T("notebook page out of range") );
 
+  if ( m_nSelection == nPage ) {
+      // advance selection backwards - the page being deleted shouldn't be left
+      // selected
+      AdvanceSelection(FALSE);
+  }
+
   TabCtrl_DeleteItem(m_hwnd, nPage);
 
   delete m_aPages[nPage];
   m_aPages.Remove(nPage);
 
+  if ( m_aPages.IsEmpty() ) {
+      // no selection if the notebook became empty
+      m_nSelection = -1;
+  }
+
   return TRUE;
 }
 
@@ -370,6 +381,11 @@ bool wxNotebook::InsertPage(int nPage,
   // this updates internal flag too - otherwise it will get out of sync
   pPage->Show(FALSE);
 
+  // FIXME this is ugly, I'm breaking my own rules... but needed to get display
+  //       right (why?)
+  wxSizeEvent event;
+  OnSize(event);
+
   return TRUE;
 }
 
@@ -408,7 +424,23 @@ void wxNotebook::OnSelChange(wxNotebookEvent& event)
 {
   // is it our tab control?
   if ( event.GetEventObject() == this )
-    ChangePage(event.GetOldSelection(), event.GetSelection());
+  {
+      // don't call ChangePage() here because it will generate redundant
+      // notification events
+      int sel = event.GetOldSelection();
+      if ( sel != -1 )
+        m_aPages[sel]->Show(FALSE);
+      
+      sel = event.GetSelection();
+      if ( sel != -1 )
+      {
+        wxNotebookPage *pPage = m_aPages[sel];
+        pPage->Show(TRUE);
+        pPage->SetFocus();
+      }
+      
+      m_nSelection = sel;
+  }
 
   // we want to give others a chance to process this message as well
   event.Skip();