// 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)
bool wxListbook::SetPageImage(size_t n, int imageId)
{
- return m_list->SetItemImage(n, imageId, imageId);
+ return m_list->SetItemImage(n, imageId);
}
// ----------------------------------------------------------------------------
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;
-
- m_list->Select(n);
- m_list->Focus(n);
+ wxWindow *page = m_pages[n];
+ page->SetSize(GetPageRect());
+ page->Show();
+
+ 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;
}
// ----------------------------------------------------------------------------
{
const int page_count = GetPageCount();
wxWindow *win = wxBookCtrl::DoRemovePage(page);
-
+
if ( win )
{
m_list->DeleteItem(page);
// force new sel valid if possible
int sel = m_selection - 1;
if (page_count == 1)
- sel = -1;
+ sel = wxNOT_FOUND;
else if ((page_count == 2) || (sel == -1))
sel = 0;
-
+
// force sel invalid if deleting current page - don't try to hide it
- m_selection = (m_selection == (int)page) ? -1 : m_selection - 1;
-
- if ((sel != -1) && (sel != m_selection))
+ m_selection = (m_selection == (int)page) ? wxNOT_FOUND : m_selection - 1;
+
+ if ((sel != wxNOT_FOUND) && (sel != m_selection))
SetSelection(sel);
}
}