/////////////////////////////////////////////////////////////////////////////
-// Name: univ/checklst.cpp
+// Name: src/univ/checklst.cpp
// Purpose: wxCheckListBox implementation
// Author: Vadim Zeitlin
// Modified by:
// Created: 12.09.00
-// RCS-ID: $Id$
// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "univchecklst.h"
-#endif
-
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#if wxUSE_CHECKLISTBOX
+#include "wx/checklst.h"
+
#ifndef WX_PRECOMP
#include "wx/log.h"
-
#include "wx/dcclient.h"
- #include "wx/checklst.h"
#include "wx/validate.h"
#endif
#include "wx/univ/inphand.h"
#include "wx/univ/theme.h"
-// ============================================================================
-// implementation of wxCheckListBoxBase
-// ============================================================================
+// ----------------------------------------------------------------------------
+// wxStdCheckListBoxInputHandler
+// ----------------------------------------------------------------------------
-wxCheckListBoxBase::wxCheckListBoxBase()
+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
// ============================================================================
-IMPLEMENT_DYNAMIC_CLASS(wxCheckListBox, wxListBox)
-
// ----------------------------------------------------------------------------
// creation
// ----------------------------------------------------------------------------
-wxCheckListBox::wxCheckListBox()
+void wxCheckListBox::Init()
{
- Init();
}
wxCheckListBox::wxCheckListBox(wxWindow *parent,
wxWindowID id,
- const wxPoint& pos,
- const wxSize& size,
- int nStrings,
- const wxString *choices,
+ const wxPoint &pos,
+ const wxSize &size,
+ const wxArrayString& choices,
long style,
const wxValidator& validator,
- const wxString& name)
+ const wxString &name)
{
Init();
- Create(parent, id, pos, size, nStrings, choices, style, validator, name);
+ Create(parent, id, pos, size, choices, style, validator, name);
}
-void wxCheckListBox::Init()
+bool wxCheckListBox::Create(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint &pos,
+ const wxSize &size,
+ const wxArrayString& choices,
+ long style,
+ const wxValidator& validator,
+ const wxString &name)
{
+ wxCArrayString chs(choices);
+
+ return Create(parent, id, pos, size, chs.GetCount(), chs.GetStrings(),
+ style, validator, name);
}
bool wxCheckListBox::Create(wxWindow *parent,
{
if ( !wxListBox::Create(parent, id, pos, size,
n, choices, style, validator, name) )
- return FALSE;
+ return false;
CreateInputHandler(wxINP_HANDLER_CHECKLISTBOX);
- return TRUE;
+ return true;
}
// ----------------------------------------------------------------------------
// wxCheckListBox functions
// ----------------------------------------------------------------------------
-bool wxCheckListBox::IsChecked(size_t item) const
+bool wxCheckListBox::IsChecked(unsigned int item) const
{
- wxCHECK_MSG( item < m_checks.GetCount(), FALSE,
- _T("invalid index in wxCheckListBox::IsChecked") );
+ wxCHECK_MSG( IsValid(item), false,
+ wxT("invalid index in wxCheckListBox::IsChecked") );
return m_checks[item] != 0;
}
-void wxCheckListBox::Check(size_t item, bool check)
+void wxCheckListBox::Check(unsigned int item, bool check)
{
- wxCHECK_RET( item < m_checks.GetCount(),
- _T("invalid index in wxCheckListBox::Check") );
+ wxCHECK_RET( IsValid(item),
+ wxT("invalid index in wxCheckListBox::Check") );
// intermediate var is needed to avoid compiler warning with VC++
bool isChecked = m_checks[item] != 0;
// methods forwarded to wxListBox
// ----------------------------------------------------------------------------
-void wxCheckListBox::Delete(int n)
+void wxCheckListBox::DoDeleteOneItem(unsigned int n)
{
- wxCHECK_RET( n < GetCount(), _T("invalid index in wxListBox::Delete") );
-
- wxListBox::Delete(n);
+ wxListBox::DoDeleteOneItem(n);
m_checks.RemoveAt(n);
}
-int wxCheckListBox::DoAppend(const wxString& item)
-{
- int pos = wxListBox::DoAppend(item);
-
- // the item is initially unchecked
- m_checks.Insert(FALSE, pos);
-
- return pos;
-}
-
-void wxCheckListBox::DoInsertItems(const wxArrayString& items, int pos)
-{
- wxListBox::DoInsertItems(items, pos);
-
- size_t count = items.GetCount();
- for ( size_t n = 0; n < count; n++ )
- {
- m_checks.Insert(FALSE, pos + n);
- }
-}
-
-void wxCheckListBox::DoSetItems(const wxArrayString& items, void **clientData)
+void wxCheckListBox::OnItemInserted(unsigned int pos)
{
- // call it first as it does DoClear()
- wxListBox::DoSetItems(items, clientData);
-
- size_t count = items.GetCount();
- for ( size_t n = 0; n < count; n++ )
- {
- m_checks.Add(FALSE);
- }
+ m_checks.Insert(false, pos);
}
void wxCheckListBox::DoClear()
{
Check(sel, !IsChecked(sel));
- SendEvent(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, sel);
+ SendEvent(wxEVT_CHECKLISTBOX, sel);
}
}
else
return wxListBox::PerformAction(action, numArg, strArg);
}
- return TRUE;
+ return true;
+}
+
+/* static */
+wxInputHandler *wxCheckListBox::GetStdInputHandler(wxInputHandler *handlerDef)
+{
+ static wxStdCheckListboxInputHandler s_handler(handlerDef);
+
+ return &s_handler;
}
// ----------------------------------------------------------------------------
wxStdCheckListboxInputHandler::
wxStdCheckListboxInputHandler(wxInputHandler *inphand)
- : wxStdListboxInputHandler(inphand)
+ : wxStdInputHandler(wxListBox::GetStdInputHandler(inphand))
{
}
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,
if ( x >= 0 &&
x < renderer->GetCheckBitmapSize().x &&
item >= 0 &&
- item < lbox->GetCount() )
+ (unsigned int)item < lbox->GetCount() )
{
lbox->PerformAction(wxACTION_CHECKLISTBOX_TOGGLE, item);
- return TRUE;
+ return true;
}
}
- return wxStdListboxInputHandler::HandleMouse(consumer, event);
+ return wxStdInputHandler::HandleMouse(consumer, event);
}
#endif // wxUSE_CHECKLISTBOX