#ifndef __TWIN32__
#ifdef __GNUWIN32__
+#ifndef wxUSE_NORLANDER_HEADERS
#include "wx/msw/gnuwin32/extra.h"
#endif
#endif
+#endif
-#if !defined(__GNUWIN32__) || defined(__TWIN32__)
+#if !defined(__GNUWIN32__) || defined(__TWIN32__) || defined(wxUSE_NORLANDER_HEADERS)
#include <commctrl.h>
#endif
const wxString& name)
{
// base init
- CreateBase(parent, id, pos, size, style, name);
+ if ( !CreateBase(parent, id, pos, size, style, wxDefaultValidator, name) )
+ return FALSE;
// colors and font
m_backgroundColour = wxColour(GetSysColor(COLOR_BTNFACE));
{
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;
}
// 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;
}
{
// 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();