]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/checklst.cpp
bug fix for vista in multi-selection tree
[wxWidgets.git] / src / univ / checklst.cpp
index a69725f51065a78a0877eab2f11de8f9999b63fb..3a85960386ce2bd2e27bfcb9cb1434d0cee08109 100644 (file)
 
 #if wxUSE_CHECKLISTBOX
 
 
 #if wxUSE_CHECKLISTBOX
 
+#include "wx/checklst.h"
+
 #ifndef WX_PRECOMP
     #include "wx/log.h"
 #ifndef WX_PRECOMP
     #include "wx/log.h"
-
     #include "wx/dcclient.h"
     #include "wx/dcclient.h"
-    #include "wx/checklst.h"
     #include "wx/validate.h"
 #endif
 
     #include "wx/validate.h"
 #endif
 
 #include "wx/univ/inphand.h"
 #include "wx/univ/theme.h"
 
 #include "wx/univ/inphand.h"
 #include "wx/univ/theme.h"
 
+// ----------------------------------------------------------------------------
+// wxStdCheckListBoxInputHandler
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxStdCheckListboxInputHandler : public wxStdInputHandler
+{
+public:
+    wxStdCheckListboxInputHandler(wxInputHandler *inphand);
+
+    virtual bool HandleKey(wxInputConsumer *consumer,
+                           const wxKeyEvent& event,
+                           bool pressed);
+    virtual bool HandleMouse(wxInputConsumer *consumer,
+                             const wxMouseEvent& event);
+};
+
 // ============================================================================
 // implementation of wxCheckListBox
 // ============================================================================
 // ============================================================================
 // implementation of wxCheckListBox
 // ============================================================================
@@ -130,46 +146,16 @@ void wxCheckListBox::Check(unsigned int item, bool check)
 // methods forwarded to wxListBox
 // ----------------------------------------------------------------------------
 
 // methods forwarded to wxListBox
 // ----------------------------------------------------------------------------
 
-void wxCheckListBox::Delete(unsigned int n)
+void wxCheckListBox::DoDeleteOneItem(unsigned int n)
 {
 {
-    wxCHECK_RET( IsValid(n), _T("invalid index in wxListBox::Delete") );
-
-    wxListBox::Delete(n);
+    wxListBox::DoDeleteOneItem(n);
 
     m_checks.RemoveAt(n);
 }
 
 
     m_checks.RemoveAt(n);
 }
 
-int wxCheckListBox::DoAppend(const wxString& item)
+void wxCheckListBox::OnItemInserted(unsigned int pos)
 {
 {
-    int pos = wxListBox::DoAppend(item);
-
-    // the item is initially unchecked
     m_checks.Insert(false, pos);
     m_checks.Insert(false, pos);
-
-    return pos;
-}
-
-void wxCheckListBox::DoInsertItems(const wxArrayString& items, unsigned int pos)
-{
-    wxListBox::DoInsertItems(items, pos);
-
-    unsigned int count = items.GetCount();
-    for ( unsigned int n = 0; n < count; n++ )
-    {
-        m_checks.Insert(false, pos + n);
-    }
-}
-
-void wxCheckListBox::DoSetItems(const wxArrayString& items, void **clientData)
-{
-    // call it first as it does DoClear()
-    wxListBox::DoSetItems(items, clientData);
-
-    unsigned int count = items.GetCount();
-    for ( unsigned int n = 0; n < count; n++ )
-    {
-        m_checks.Add(false);
-    }
 }
 
 void wxCheckListBox::DoClear()
 }
 
 void wxCheckListBox::DoClear()
@@ -226,13 +212,21 @@ bool wxCheckListBox::PerformAction(const wxControlAction& action,
     return true;
 }
 
     return true;
 }
 
+/* static */
+wxInputHandler *wxCheckListBox::GetStdInputHandler(wxInputHandler *handlerDef)
+{
+    static wxStdCheckListboxInputHandler s_handler(handlerDef);
+
+    return &s_handler;
+}
+
 // ----------------------------------------------------------------------------
 // wxStdCheckListboxInputHandler
 // ----------------------------------------------------------------------------
 
 wxStdCheckListboxInputHandler::
 wxStdCheckListboxInputHandler(wxInputHandler *inphand)
 // ----------------------------------------------------------------------------
 // wxStdCheckListboxInputHandler
 // ----------------------------------------------------------------------------
 
 wxStdCheckListboxInputHandler::
 wxStdCheckListboxInputHandler(wxInputHandler *inphand)
-    : wxStdListboxInputHandler(inphand)
+    : wxStdInputHandler(wxListBox::GetStdInputHandler(inphand))
 {
 }
 
 {
 }
 
@@ -243,7 +237,7 @@ bool wxStdCheckListboxInputHandler::HandleKey(wxInputConsumer *consumer,
     if ( pressed && (event.GetKeyCode() == WXK_SPACE) )
         consumer->PerformAction(wxACTION_CHECKLISTBOX_TOGGLE);
 
     if ( pressed && (event.GetKeyCode() == WXK_SPACE) )
         consumer->PerformAction(wxACTION_CHECKLISTBOX_TOGGLE);
 
-    return wxStdListboxInputHandler::HandleKey(consumer, event, pressed);
+    return wxStdInputHandler::HandleKey(consumer, event, pressed);
 }
 
 bool wxStdCheckListboxInputHandler::HandleMouse(wxInputConsumer *consumer,
 }
 
 bool wxStdCheckListboxInputHandler::HandleMouse(wxInputConsumer *consumer,
@@ -273,7 +267,7 @@ bool wxStdCheckListboxInputHandler::HandleMouse(wxInputConsumer *consumer,
         }
     }
 
         }
     }
 
-    return wxStdListboxInputHandler::HandleMouse(consumer, event);
+    return wxStdInputHandler::HandleMouse(consumer, event);
 }
 
 #endif // wxUSE_CHECKLISTBOX
 }
 
 #endif // wxUSE_CHECKLISTBOX