]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/notebook.cpp
*** empty log message ***
[wxWidgets.git] / src / msw / notebook.cpp
index f16fa88b610298004b54d12418c3214a88811c09..d94b86b315c4bdcdcf1730434e5f44631476255f 100644 (file)
@@ -185,7 +185,7 @@ int wxNotebook::GetRowCount() const
 
 int wxNotebook::SetSelection(int nPage)
 {
 
 int wxNotebook::SetSelection(int nPage)
 {
-  wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, "notebook page out of range" );
+  wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, _T("notebook page out of range") );
 
   ChangePage(m_nSelection, nPage);
 
 
   ChangePage(m_nSelection, nPage);
 
@@ -204,20 +204,20 @@ void wxNotebook::AdvanceSelection(bool bForward)
 
 bool wxNotebook::SetPageText(int nPage, const wxString& strText)
 {
 
 bool wxNotebook::SetPageText(int nPage, const wxString& strText)
 {
-  wxCHECK_MSG( IS_VALID_PAGE(nPage), FALSE, "notebook page out of range" );
+  wxCHECK_MSG( IS_VALID_PAGE(nPage), FALSE, _T("notebook page out of range") );
 
   TC_ITEM tcItem;
   tcItem.mask = TCIF_TEXT;
 
   TC_ITEM tcItem;
   tcItem.mask = TCIF_TEXT;
-  tcItem.pszText = (char *)strText.c_str();
+  tcItem.pszText = (wxChar *)strText.c_str();
 
   return TabCtrl_SetItem(m_hwnd, nPage, &tcItem) != 0;
 }
 
 wxString wxNotebook::GetPageText(int nPage) const
 {
 
   return TabCtrl_SetItem(m_hwnd, nPage, &tcItem) != 0;
 }
 
 wxString wxNotebook::GetPageText(int nPage) const
 {
-  wxCHECK_MSG( IS_VALID_PAGE(nPage), "", "notebook page out of range" );
+  wxCHECK_MSG( IS_VALID_PAGE(nPage), _T(""), _T("notebook page out of range") );
 
 
-  char buf[256];
+  wxChar buf[256];
   TC_ITEM tcItem;
   tcItem.mask = TCIF_TEXT;
   tcItem.pszText = buf;
   TC_ITEM tcItem;
   tcItem.mask = TCIF_TEXT;
   tcItem.pszText = buf;
@@ -232,7 +232,7 @@ wxString wxNotebook::GetPageText(int nPage) const
 
 int wxNotebook::GetPageImage(int nPage) const
 {
 
 int wxNotebook::GetPageImage(int nPage) const
 {
-  wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, "notebook page out of range" );
+  wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, _T("notebook page out of range") );
 
   TC_ITEM tcItem;
   tcItem.mask = TCIF_IMAGE;
 
   TC_ITEM tcItem;
   tcItem.mask = TCIF_IMAGE;
@@ -242,7 +242,7 @@ int wxNotebook::GetPageImage(int nPage) const
 
 bool wxNotebook::SetPageImage(int nPage, int nImage)
 {
 
 bool wxNotebook::SetPageImage(int nPage, int nImage)
 {
-  wxCHECK_MSG( IS_VALID_PAGE(nPage), FALSE, "notebook page out of range" );
+  wxCHECK_MSG( IS_VALID_PAGE(nPage), FALSE, _T("notebook page out of range") );
 
   TC_ITEM tcItem;
   tcItem.mask = TCIF_IMAGE;
 
   TC_ITEM tcItem;
   tcItem.mask = TCIF_IMAGE;
@@ -272,20 +272,31 @@ void wxNotebook::SetTabSize(const wxSize& sz)
 // remove one page from the notebook
 bool wxNotebook::DeletePage(int nPage)
 {
 // remove one page from the notebook
 bool wxNotebook::DeletePage(int nPage)
 {
-  wxCHECK_MSG( IS_VALID_PAGE(nPage), FALSE, "notebook page out of range" );
+  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);
 
 
   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;
 }
 
 // remove one page from the notebook, without deleting
 bool wxNotebook::RemovePage(int nPage)
 {
   return TRUE;
 }
 
 // remove one page from the notebook, without deleting
 bool wxNotebook::RemovePage(int nPage)
 {
-  wxCHECK_MSG( IS_VALID_PAGE(nPage), FALSE, "notebook page out of range" );
+  wxCHECK_MSG( IS_VALID_PAGE(nPage), FALSE, _T("notebook page out of range") );
 
   TabCtrl_DeleteItem(m_hwnd, nPage);
 
 
   TabCtrl_DeleteItem(m_hwnd, nPage);
 
@@ -343,13 +354,13 @@ bool wxNotebook::InsertPage(int nPage,
   if (!strText.IsEmpty())
   {
     tcItem.mask    |= TCIF_TEXT;
   if (!strText.IsEmpty())
   {
     tcItem.mask    |= TCIF_TEXT;
-    tcItem.pszText = (char *)strText.c_str();
+    tcItem.pszText = (wxChar *)strText.c_str();
   }
   else
   }
   else
-    tcItem.pszText = (char *) NULL;
+    tcItem.pszText = (wxChar *) NULL;
 
   if ( TabCtrl_InsertItem(m_hwnd, nPage, &tcItem) == -1 ) {
 
   if ( TabCtrl_InsertItem(m_hwnd, nPage, &tcItem) == -1 ) {
-    wxLogError("Can't create the notebook page '%s'.", strText.c_str());
+    wxLogError(_T("Can't create the notebook page '%s'."), strText.c_str());
     return FALSE;
   }
 
     return FALSE;
   }
 
@@ -370,6 +381,11 @@ bool wxNotebook::InsertPage(int nPage,
   // this updates internal flag too - otherwise it will get out of sync
   pPage->Show(FALSE);
 
   // 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;
 }
 
   return TRUE;
 }