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
This commit is contained in:
Vadim Zeitlin
2003-01-01 22:41:10 +00:00
parent a8dade3e27
commit e2ca995fa3
3 changed files with 25 additions and 8 deletions

View File

@@ -23,6 +23,7 @@ wxMSW:
- wxStaticBitmap doesn't stretch its bitmap any longer (like other ports) - wxStaticBitmap doesn't stretch its bitmap any longer (like other ports)
- support for accelerator keys in the owner drawn menus (Derry Bryson) - support for accelerator keys in the owner drawn menus (Derry Bryson)
- wxCheckListBox::Check() doesn't send CHECKLISTBOX_TOGGLE event any more
All: All:

View File

@@ -89,7 +89,8 @@ Destructor, destroying the list box.
\func{void}{Check}{\param{int }{item}, \param{bool}{ check = TRUE}} \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} \wxheading{Parameters}

View File

@@ -81,15 +81,18 @@ public:
// drawing functions // drawing functions
virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat); virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat);
// simple accessors // simple accessors and operations
bool IsChecked() const { return m_bChecked; } bool IsChecked() const { return m_bChecked; }
void Check(bool bCheck); void Check(bool bCheck);
void Toggle() { Check(!IsChecked()); } void Toggle() { Check(!IsChecked()); }
void SendEvent();
private: private:
bool m_bChecked; bool m_bChecked;
wxCheckListBox *m_pParent; wxCheckListBox *m_pParent;
size_t m_nIndex; size_t m_nIndex;
}; };
wxCheckListBoxItem::wxCheckListBoxItem(wxCheckListBox *pParent, size_t nIndex) wxCheckListBoxItem::wxCheckListBoxItem(wxCheckListBox *pParent, size_t nIndex)
@@ -220,7 +223,7 @@ void wxCheckListBoxItem::Check(bool check)
{ {
m_bChecked = 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 ) if ( m_pParent->GetItemIndex(this) != (int)m_nIndex )
{ {
// update it // update it
@@ -253,7 +256,11 @@ void wxCheckListBoxItem::Check(bool check)
#endif // Win32/16 #endif // Win32/16
InvalidateRect(hwndListbox, &rcUpdate, FALSE); InvalidateRect(hwndListbox, &rcUpdate, FALSE);
}
// send an "item checked" event
void wxCheckListBoxItem::SendEvent()
{
wxCommandEvent event(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, m_pParent->GetId()); wxCommandEvent event(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, m_pParent->GetId());
event.SetInt(m_nIndex); event.SetInt(m_nIndex);
event.SetEventObject(m_pParent); event.SetEventObject(m_pParent);
@@ -298,8 +305,9 @@ bool wxCheckListBox::Create(wxWindow *parent, wxWindowID id,
return wxListBox::Create(parent, id, pos, size, n, choices, return wxListBox::Create(parent, id, pos, size, n, choices,
style | wxLB_OWNERDRAW, validator, name); style | wxLB_OWNERDRAW, validator, name);
} }
// misc overloaded methods
// -----------------------
void wxCheckListBox::Delete(int N) void wxCheckListBox::Delete(int N)
{ {
@@ -442,6 +450,10 @@ void wxCheckListBox::OnKeyDown(wxKeyEvent& event)
default: default:
wxFAIL_MSG( _T("what should this key do?") ); 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 else // nothing to do
@@ -456,8 +468,11 @@ void wxCheckListBox::OnLeftClick(wxMouseEvent& event)
if ( event.GetX() <= wxOwnerDrawn::GetDefaultMarginWidth() ) { if ( event.GetX() <= wxOwnerDrawn::GetDefaultMarginWidth() ) {
int nItem = HitTest(event.GetX(), event.GetY()); int nItem = HitTest(event.GetX(), event.GetY());
if ( nItem != wxNOT_FOUND ) if ( nItem != wxNOT_FOUND ) {
GetItem(nItem)->Toggle(); wxCheckListBoxItem *item = GetItem(nItem);
item->Toggle();
item->SendEvent();
}
//else: it's not an error, just click outside of client zone //else: it's not an error, just click outside of client zone
} }
else { else {