#if wxUSE_NOTEBOOK
-#include "wx/notebook.h"
+#include "wx/notebook.h"
#ifndef WX_PRECOMP
- #include "wx/string.h"
- #include "wx/dc.h"
- #include "wx/log.h"
- #include "wx/event.h"
- #include "wx/app.h"
- #include "wx/dcclient.h"
- #include "wx/dcmemory.h"
- #include "wx/control.h"
+ #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
+ #include "wx/string.h"
+ #include "wx/dc.h"
+ #include "wx/log.h"
+ #include "wx/event.h"
+ #include "wx/app.h"
+ #include "wx/dcclient.h"
+ #include "wx/dcmemory.h"
+ #include "wx/control.h"
#endif // WX_PRECOMP
-#include "wx/imaglist.h"
-#include "wx/sysopt.h"
+#include "wx/imaglist.h"
+#include "wx/sysopt.h"
-#include "wx/msw/private.h"
+#include "wx/msw/private.h"
-#include <windowsx.h>
+#include <windowsx.h>
#include "wx/msw/winundef.h"
-// include <commctrl.h> "properly"
-#include "wx/msw/wrapcctl.h"
-
#if wxUSE_UXTHEME
#include "wx/msw/uxtheme.h"
#endif
return m_nSelection;
}
+void wxNotebook::UpdateSelection(size_t newsel)
+{
+ if ( m_nSelection != -1 )
+ m_pages[m_nSelection]->Show(false);
+
+ if ( newsel != -1 )
+ {
+ wxNotebookPage *pPage = m_pages[newsel];
+ pPage->Show(true);
+ }
+
+ // Changing the page should give the focus to it but, as per bug report
+ // http://sf.net/tracker/index.php?func=detail&aid=1150659&group_id=9863&atid=109863,
+ // we should not set the focus to it directly since it erroneously
+ // selects radio buttons and breaks keyboard handling for a notebook's
+ // scroll buttons. So give focus to the notebook and not the page.
+
+ // but don't do this is the notebook is hidden
+ if ( ::IsWindowVisible(GetHwnd()) )
+ SetFocus();
+
+ m_nSelection = newsel;
+}
+
+int wxNotebook::ChangeSelection(size_t nPage)
+{
+ wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") );
+
+ if ( int(nPage) != m_nSelection )
+ {
+ TabCtrl_SetCurSel(GetHwnd(), nPage);
+
+ UpdateSelection(nPage);
+ }
+
+ return m_nSelection;
+}
+
bool wxNotebook::SetPageText(size_t nPage, const wxString& strText)
{
wxCHECK_MSG( IS_VALID_PAGE(nPage), false, wxT("notebook page out of range") );
return false;
}
+ // need to update the bg brush when the first page is added
+ // so the first panel gets the correct themed background
+ if ( m_pages.empty() )
+ {
+ UpdateBgBrush();
+ }
+
// succeeded: save the pointer to the page
m_pages.Insert(pPage, nPage);
*flags |= wxBK_HITTEST_ONICON;
if ((hitTestInfo.flags & TCHT_ONITEMLABEL) == TCHT_ONITEMLABEL)
*flags |= wxBK_HITTEST_ONLABEL;
- if ( item == wxNOT_FOUND && GetPageSize().Inside(pt) )
+ if ( item == wxNOT_FOUND && GetPageSize().Contains(pt) )
*flags |= wxBK_HITTEST_ONPAGE;
}
void wxNotebook::OnSelChange(wxNotebookEvent& event)
{
- // is it our tab control?
- if ( event.GetEventObject() == this )
- {
- int sel = event.GetOldSelection();
- if ( sel != -1 )
- m_pages[sel]->Show(false);
-
- sel = event.GetSelection();
- if ( sel != -1 )
- {
- wxNotebookPage *pPage = m_pages[sel];
- pPage->Show(true);
- }
-
- // Changing the page should give the focus to it but, as per bug report
- // http://sf.net/tracker/index.php?func=detail&aid=1150659&group_id=9863&atid=109863,
- // we should not set the focus to it directly since it erroneously
- // selects radio buttons and breaks keyboard handling for a notebook's
- // scroll buttons. So give focus to the notebook and not the page.
-
- // but don't do this is the notebook is hidden
- if ( ::IsWindowVisible(GetHwnd()) )
- SetFocus();
-
- m_nSelection = sel;
- }
+ // is it our tab control?
+ if ( event.GetEventObject() == this )
+ {
+ UpdateSelection(event.GetSelection());
+ }
- // we want to give others a chance to process this message as well
- event.Skip();
+ // we want to give others a chance to process this message as well
+ event.Skip();
}
void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event)