X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d0a84b63384ca1c1d8d20581fb56abbd1d826617..f31bbefd1070af6162b9deeda9d4e528efbc1b31:/src/generic/listbkg.cpp?ds=inline diff --git a/src/generic/listbkg.cpp b/src/generic/listbkg.cpp index c29bf85131..eae7c13d3c 100644 --- a/src/generic/listbkg.cpp +++ b/src/generic/listbkg.cpp @@ -54,11 +54,10 @@ IMPLEMENT_DYNAMIC_CLASS(wxListbookEvent, wxNotifyEvent) const wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING = wxNewEventType(); const wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED = wxNewEventType(); #endif -const int wxID_LISTBOOKLISTVIEW = wxNewId(); BEGIN_EVENT_TABLE(wxListbook, wxBookCtrlBase) EVT_SIZE(wxListbook::OnSize) - EVT_LIST_ITEM_SELECTED(wxID_LISTBOOKLISTVIEW, wxListbook::OnListSelected) + EVT_LIST_ITEM_SELECTED(wxID_ANY, wxListbook::OnListSelected) END_EVENT_TABLE() // ============================================================================ @@ -103,7 +102,7 @@ wxListbook::Create(wxWindow *parent, m_bookctrl = new wxListView ( this, - wxID_LISTBOOKLISTVIEW, + wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_ICON | wxLC_SINGLE_SEL | @@ -166,14 +165,14 @@ int wxListbook::HitTest(const wxPoint& pt, long *flags) const int pagePos = wxNOT_FOUND; if ( flags ) - *flags = wxNB_HITTEST_NOWHERE; + *flags = wxBK_HITTEST_NOWHERE; // convert from listbook control coordinates to list control coordinates const wxListView * const list = GetListView(); const wxPoint listPt = list->ScreenToClient(ClientToScreen(pt)); // is the point inside list control? - if ( wxRect(list->GetSize()).Inside(listPt) ) + if ( wxRect(list->GetSize()).Contains(listPt) ) { int flagsList; pagePos = list->HitTest(listPt, flagsList); @@ -185,16 +184,16 @@ int wxListbook::HitTest(const wxPoint& pt, long *flags) const if ( flagsList & (wxLIST_HITTEST_ONITEMICON | wxLIST_HITTEST_ONITEMSTATEICON ) ) - *flags |= wxNB_HITTEST_ONICON; + *flags |= wxBK_HITTEST_ONICON; if ( flagsList & wxLIST_HITTEST_ONITEMLABEL ) - *flags |= wxNB_HITTEST_ONLABEL; + *flags |= wxBK_HITTEST_ONLABEL; } } else // not over list control at all { - if ( flags && GetPageRect().Inside(pt) ) - *flags |= wxNB_HITTEST_ONPAGE; + if ( flags && GetPageRect().Contains(pt) ) + *flags |= wxBK_HITTEST_ONPAGE; } return pagePos; @@ -262,47 +261,29 @@ void wxListbook::SetImageList(wxImageList *imageList) // selection // ---------------------------------------------------------------------------- +void wxListbook::UpdateSelectedPage(size_t newsel) +{ + m_selection = newsel; + GetListView()->Select(newsel); + GetListView()->Focus(newsel); +} + int wxListbook::GetSelection() const { return m_selection; } -int wxListbook::SetSelection(size_t n) +wxBookCtrlBaseEvent* wxListbook::CreatePageChangingEvent() const { - wxCHECK_MSG( IS_VALID_PAGE(n), wxNOT_FOUND, - wxT("invalid page index in wxListbook::SetSelection()") ); - - const int oldSel = m_selection; - - if ( int(n) != m_selection ) - { - 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(); - - wxWindow *page = m_pages[n]; - page->SetSize(GetPageRect()); - page->Show(); - - // change m_selection now to ignore the selection change event - m_selection = n; - GetListView()->Select(n); - GetListView()->Focus(n); - - // program allows the page change - event.SetEventType(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED); - (void)GetEventHandler()->ProcessEvent(event); - } - } + return new wxListbookEvent(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, m_windowId); +} - return oldSel; +void wxListbook::MakeChangedEvent(wxBookCtrlBaseEvent &event) +{ + event.SetEventType(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED); } + // ---------------------------------------------------------------------------- // adding/removing the pages // ---------------------------------------------------------------------------- @@ -343,14 +324,12 @@ wxListbook::InsertPage(size_t n, if ( selNew != -1 ) SetSelection(selNew); - InvalidateBestSize(); - // GetListView()->InvalidateBestSize(); GetListView()->Arrange(); if (GetPageCount() == 1) { wxSizeEvent sz(GetSize(), GetId()); - ProcessEvent(sz); + GetEventHandler()->ProcessEvent(sz); } return true; } @@ -384,7 +363,7 @@ wxWindow *wxListbook::DoRemovePage(size_t page) if (GetPageCount() == 0) { wxSizeEvent sz(GetSize(), GetId()); - ProcessEvent(sz); + GetEventHandler()->ProcessEvent(sz); } } @@ -401,7 +380,7 @@ bool wxListbook::DeleteAllPages() m_selection = -1; wxSizeEvent sz(GetSize(), GetId()); - ProcessEvent(sz); + GetEventHandler()->ProcessEvent(sz); return true; } @@ -412,6 +391,12 @@ bool wxListbook::DeleteAllPages() void wxListbook::OnListSelected(wxListEvent& eventList) { + if ( eventList.GetEventObject() != m_bookctrl ) + { + eventList.Skip(); + return; + } + const int selNew = eventList.GetIndex(); if ( selNew == m_selection )