From: Vadim Zeitlin Date: Wed, 1 Jan 2003 22:41:10 +0000 (+0000) Subject: don't send CHECKLISTBOX_TOGGLE event when Check() is called (closes bug 651140) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/e2ca995fa32c9195e547b1e0967e9b17ea890a55?ds=inline don't send CHECKLISTBOX_TOGGLE event when Check() is called (closes bug 651140) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18491 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index af9579572a..feb0423315 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -23,6 +23,7 @@ wxMSW: - wxStaticBitmap doesn't stretch its bitmap any longer (like other ports) - support for accelerator keys in the owner drawn menus (Derry Bryson) +- wxCheckListBox::Check() doesn't send CHECKLISTBOX_TOGGLE event any more All: diff --git a/docs/latex/wx/checklst.tex b/docs/latex/wx/checklst.tex index cf9dba3c67..a66f7c944d 100644 --- a/docs/latex/wx/checklst.tex +++ b/docs/latex/wx/checklst.tex @@ -89,7 +89,8 @@ Destructor, destroying the list box. \func{void}{Check}{\param{int }{item}, \param{bool}{ check = TRUE}} -Checks the given item. +Checks the given item. Note that calling this method doesn't result in +wxEVT\_COMMAND\_CHECKLISTBOX\_TOGGLE being emitted. \wxheading{Parameters} diff --git a/src/msw/checklst.cpp b/src/msw/checklst.cpp index 42ffa063a1..9c688afc3b 100644 --- a/src/msw/checklst.cpp +++ b/src/msw/checklst.cpp @@ -81,15 +81,18 @@ public: // drawing functions virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat); - // simple accessors - bool IsChecked() const { return m_bChecked; } + // simple accessors and operations + bool IsChecked() const { return m_bChecked; } + void Check(bool bCheck); void Toggle() { Check(!IsChecked()); } + void SendEvent(); + private: bool m_bChecked; wxCheckListBox *m_pParent; - size_t m_nIndex; + size_t m_nIndex; }; wxCheckListBoxItem::wxCheckListBoxItem(wxCheckListBox *pParent, size_t nIndex) @@ -220,7 +223,7 @@ void wxCheckListBoxItem::Check(bool check) { m_bChecked = check; - // index may be chanegd because new items were added/deleted + // index may be changed because new items were added/deleted if ( m_pParent->GetItemIndex(this) != (int)m_nIndex ) { // update it @@ -253,7 +256,11 @@ void wxCheckListBoxItem::Check(bool check) #endif // Win32/16 InvalidateRect(hwndListbox, &rcUpdate, FALSE); +} +// send an "item checked" event +void wxCheckListBoxItem::SendEvent() +{ wxCommandEvent event(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, m_pParent->GetId()); event.SetInt(m_nIndex); event.SetEventObject(m_pParent); @@ -298,8 +305,9 @@ bool wxCheckListBox::Create(wxWindow *parent, wxWindowID id, return wxListBox::Create(parent, id, pos, size, n, choices, style | wxLB_OWNERDRAW, validator, name); } - +// misc overloaded methods +// ----------------------- void wxCheckListBox::Delete(int N) { @@ -442,6 +450,10 @@ void wxCheckListBox::OnKeyDown(wxKeyEvent& event) default: wxFAIL_MSG( _T("what should this key do?") ); } + + // we should send an event as this has been done by the user and + // not by the program + item->SendEvent(); } } else // nothing to do @@ -456,8 +468,11 @@ void wxCheckListBox::OnLeftClick(wxMouseEvent& event) if ( event.GetX() <= wxOwnerDrawn::GetDefaultMarginWidth() ) { int nItem = HitTest(event.GetX(), event.GetY()); - if ( nItem != wxNOT_FOUND ) - GetItem(nItem)->Toggle(); + if ( nItem != wxNOT_FOUND ) { + wxCheckListBoxItem *item = GetItem(nItem); + item->Toggle(); + item->SendEvent(); + } //else: it's not an error, just click outside of client zone } else {