- added wxChoicebook control
- smoother time estimation updates in wxProgressDialog (Christian Sturmlechner)
- the XRC contrib library was moved to the core
+- wx(Choice/List/Note)book controls send CHANG(ED/ING) events in SetSelection
Unix:
// set the currently selected page, return the index of the previously
// selected one (or -1 on error)
//
- // NB: this function will _not_ generate PAGE_CHANGING/ED events
+ // NB: this function will generate PAGE_CHANGING/ED events
virtual int SetSelection(size_t n) = 0;
// various wxWidgets macros
// ----------------------------------------------------------------------------
+// check that the page index is valid
+#define IS_VALID_PAGE(nPage) ((nPage) < GetPageCount())
+
+// ----------------------------------------------------------------------------
+// event table
+// ----------------------------------------------------------------------------
+
IMPLEMENT_DYNAMIC_CLASS(wxChoicebook, wxControl)
IMPLEMENT_DYNAMIC_CLASS(wxChoicebookEvent, wxNotifyEvent)
int wxChoicebook::SetSelection(size_t n)
{
- wxCHECK_MSG( n < GetPageCount(), wxNOT_FOUND,
- _T("invalid page index in wxChoicebook::SetSelection()") );
+ wxCHECK_MSG( IS_VALID_PAGE(n), wxNOT_FOUND,
+ wxT("invalid page index in wxChoicebook::SetSelection()") );
- const int selOld = m_selection;
+ const int oldSel = m_selection;
- if ( (int)n != m_selection )
+ if ( int(n) != m_selection )
{
- if ( m_selection != wxNOT_FOUND )
- m_pages[m_selection]->Hide();
- wxWindow *page = m_pages[n];
- page->SetSize(GetPageRect());
- page->Show();
+ wxChoicebookEvent event(wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, m_windowId);
+ event.SetSelection(n);
+ event.SetOldSelection(m_selection);
+ event.SetEventObject(this);
+ if ( !GetEventHandler()->ProcessEvent(event) || event.IsAllowed() )
+ {
+ if ( m_selection != wxNOT_FOUND )
+ m_pages[m_selection]->Hide();
+
+ wxWindow *page = m_pages[n];
+ page->SetSize(GetPageRect());
+ page->Show();
+
+ m_selection = n;
+ m_choice->Select(n);
- // change m_selection only now to ignore the selection change event
- m_selection = n;
- m_choice->Select(n);
+ // program allows the page change
+ event.SetEventType(wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED);
+ (void)GetEventHandler()->ProcessEvent(event);
+ }
}
- return selOld;
+ return oldSel;
}
// ----------------------------------------------------------------------------
// various wxWidgets macros
// ----------------------------------------------------------------------------
+// check that the page index is valid
+#define IS_VALID_PAGE(nPage) ((nPage) < GetPageCount())
+
+// ----------------------------------------------------------------------------
+// event table
+// ----------------------------------------------------------------------------
+
IMPLEMENT_DYNAMIC_CLASS(wxListbook, wxControl)
IMPLEMENT_DYNAMIC_CLASS(wxListbookEvent, wxNotifyEvent)
int wxListbook::SetSelection(size_t n)
{
- wxCHECK_MSG( n < GetPageCount(), wxNOT_FOUND,
- _T("invalid page index in wxListbook::SetSelection()") );
+ wxCHECK_MSG( IS_VALID_PAGE(n), wxNOT_FOUND,
+ wxT("invalid page index in wxListbook::SetSelection()") );
- const int selOld = m_selection;
+ const int oldSel = m_selection;
- if ( (int)n != m_selection )
+ if ( int(n) != m_selection )
{
- if ( m_selection != wxNOT_FOUND )
- m_pages[m_selection]->Hide();
- wxWindow *page = m_pages[n];
- page->SetSize(GetPageRect());
- page->Show();
+ wxListbookEvent event(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, m_windowId);
+ event.SetSelection(n);
+ event.SetOldSelection(m_selection);
+ event.SetEventObject(this);
+ if ( !GetEventHandler()->ProcessEvent(event) || event.IsAllowed() )
+ {
+ if ( m_selection != wxNOT_FOUND )
+ m_pages[m_selection]->Hide();
- // change m_selection only now to ignore the selection change event
- m_selection = n;
+ wxWindow *page = m_pages[n];
+ page->SetSize(GetPageRect());
+ page->Show();
- m_list->Select(n);
- m_list->Focus(n);
+ m_selection = n;
+ m_list->Select(n);
+ m_list->Focus(n);
+
+ // program allows the page change
+ event.SetEventType(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED);
+ (void)GetEventHandler()->ProcessEvent(event);
+ }
}
- return selOld;
+ return oldSel;
}
// ----------------------------------------------------------------------------