class wxCheckListBoxItem : public wxOwnerDrawn
{
-friend class wxCheckListBox;
+friend class WXDLLEXPORT wxCheckListBox;
public:
// ctor
wxCheckListBoxItem(wxCheckListBox *pParent, size_t nIndex);
// 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:
+
+ DECLARE_NO_COPY_CLASS(wxCheckListBoxItem)
bool m_bChecked;
wxCheckListBox *m_pParent;
- size_t m_nIndex;
+ size_t m_nIndex;
};
wxCheckListBoxItem::wxCheckListBoxItem(wxCheckListBox *pParent, size_t nIndex)
- : wxOwnerDrawn("", TRUE) // checkable
+ : wxOwnerDrawn(wxEmptyString, TRUE) // checkable
{
m_bChecked = FALSE;
m_pParent = pParent;
{
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
#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);
long style, const wxValidator& val,
const wxString& name)
{
- Create(parent, id, pos, size, nStrings, choices,
- style | wxLB_OWNERDRAW, val, name);
+ Create(parent, id, pos, size, nStrings, choices, style, val, name);
}
+bool wxCheckListBox::Create(wxWindow *parent, wxWindowID id,
+ const wxPoint& pos, const wxSize& size,
+ int n, const wxString choices[],
+ long style,
+ const wxValidator& validator, const wxString& name)
+{
+ return wxListBox::Create(parent, id, pos, size, n, choices,
+ style | wxLB_OWNERDRAW, validator, name);
+}
+
+// misc overloaded methods
+// -----------------------
+
void wxCheckListBox::Delete(int N)
{
wxCHECK_RET( N >= 0 && N < m_noItems,
// --------------------
// create a check list box item
-wxOwnerDrawn *wxCheckListBox::CreateItem(size_t nIndex)
+wxOwnerDrawn *wxCheckListBox::CreateLboxItem(size_t nIndex)
{
wxCheckListBoxItem *pItem = new wxCheckListBoxItem(this, nIndex);
return pItem;
Clear
} oper;
- switch ( event.KeyCode() )
+ switch ( event.GetKeyCode() )
{
case WXK_SPACE:
oper = Toggle;
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
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 {