made wxListbook events more consistent with wxNotebook ones (patch 1001271)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29165 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2004-09-16 22:14:34 +00:00
parent 627b2b2a0d
commit 33ebfc3b9b
3 changed files with 45 additions and 37 deletions

View File

@@ -116,10 +116,6 @@ public:
protected:
virtual wxWindow *DoRemovePage(size_t page);
private:
// common part of all constructors
void Init();
// get the size which the list control should have
wxSize GetListSize() const;
@@ -130,7 +126,6 @@ private:
void OnSize(wxSizeEvent& event);
void OnListSelected(wxListEvent& event);
// the list control we use for showing the pages index
wxListView *m_list;
@@ -142,6 +137,9 @@ private:
// the currently selected page or wxNOT_FOUND if none
int m_selection;
private:
// common part of all constructors
void Init();
DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS_NO_COPY(wxListbook)

View File

@@ -506,7 +506,7 @@ void MyFrame::OnNotebook(wxNotebookEvent& event)
if (eventType == wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED)
{
str = wxT("Notebook changed");
str = wxT("Changed");
}
else if (eventType == wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING)
{
@@ -528,13 +528,14 @@ void MyFrame::OnNotebook(wxNotebookEvent& event)
}
str = wxT("Notebook changing");
str = wxT("Changing");
}
static int s_numNotebookEvents = 0;
wxLogMessage(wxT("Notebook event #%d: %s (%d)"),
s_numNotebookEvents++, str.c_str(), eventType);
wxLogMessage(wxT("Notebook event #%d: %s (%d) Sel %d, OldSel %d"),
s_numNotebookEvents++, str.c_str(), eventType,
event.GetSelection(), event.GetOldSelection());
#if wxUSE_LOG
m_text->SetInsertionPointEnd();

View File

@@ -262,23 +262,13 @@ void wxListbook::OnSize(wxSizeEvent& event)
}
#endif // wxUSE_LINE_IN_LISTBOOK
// we should always have some selection if possible
if ( m_selection == wxNOT_FOUND && GetPageCount() )
{
SetSelection(0);
}
if ( m_selection != wxNOT_FOUND )
// resize the currently shown page
if (m_selection != wxNOT_FOUND )
{
wxWindow *page = m_pages[m_selection];
wxCHECK_RET( page, _T("NULL page in wxListbook?") );
page->SetSize(GetPageRect());
if ( !page->IsShown() )
{
page->Show();
}
}
}
wxSize wxListbook::CalcSizeFromPage(const wxSize& sizePage) const
@@ -353,22 +343,26 @@ int wxListbook::SetSelection(size_t n)
wxCHECK_MSG( n < GetPageCount(), wxNOT_FOUND,
_T("invalid page index in wxListbook::SetSelection()") );
int selOld = m_selection;
const int selOld = m_selection;
if ( (int)n != m_selection )
{
m_list->Select(n);
m_list->Focus(n);
if ( m_selection != wxNOT_FOUND )
m_pages[m_selection]->Hide();
wxWindow *page = m_pages[n];
page->SetSize(GetPageRect());
page->Show();
// change m_selection only now, otherwise OnListSelected() would ignore
// the selection change event
// change m_selection only now to ignore the selection change event
m_selection = n;
m_list->Select(n);
m_list->Focus(n);
}
return selOld;
}
// ----------------------------------------------------------------------------
// adding/removing the pages
// ----------------------------------------------------------------------------
@@ -385,10 +379,10 @@ wxListbook::InsertPage(size_t n,
m_list->InsertItem(n, text, imageId);
if ( bSelect )
// we should always have some selection if possible
if ( bSelect || (m_selection == wxNOT_FOUND) )
{
m_list->Select(n);
m_list->Focus(n);
SetSelection(n);
}
else // don't select this page
{
@@ -402,10 +396,28 @@ wxListbook::InsertPage(size_t n,
wxWindow *wxListbook::DoRemovePage(size_t page)
{
const int page_count = GetPageCount();
wxWindow *win = wxBookCtrl::DoRemovePage(page);
if ( win )
{
m_list->DeleteItem(page);
if (m_selection >= (int)page)
{
// force new sel valid if possible
int sel = m_selection - 1;
if (page_count == 1)
sel = -1;
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))
SetSelection(sel);
}
}
return win;
@@ -425,6 +437,7 @@ bool wxListbook::DeleteAllPages()
void wxListbook::OnListSelected(wxListEvent& eventList)
{
const int selNew = eventList.GetIndex();
const int selOld = m_selection;
if ( selNew == m_selection )
{
@@ -439,7 +452,7 @@ void wxListbook::OnListSelected(wxListEvent& eventList)
eventIng.SetEventObject(this);
eventIng.SetSelection(selNew);
eventIng.SetOldSelection(m_selection);
eventIng.SetOldSelection(selOld);
if ( GetEventHandler()->ProcessEvent(eventIng) && !eventIng.IsAllowed() )
{
m_list->Select(m_selection);
@@ -447,17 +460,13 @@ void wxListbook::OnListSelected(wxListEvent& eventList)
}
// change allowed: do change the page and notify the user about it
if ( m_selection != wxNOT_FOUND )
m_pages[m_selection]->Hide();
wxWindow *page = m_pages[m_selection = selNew];
page->SetSize(GetPageRect());
page->Show();
SetSelection(selNew);
wxListbookEvent eventEd(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED, GetId());
eventEd.SetEventObject(this);
eventEd.SetSelection(selNew);
eventEd.SetOldSelection(m_selection);
eventEd.SetOldSelection(selOld);
(void)GetEventHandler()->ProcessEvent(eventEd);
}