/////////////////////////////////////////////////////////////////////////////
-// Name: univ/checkbox.cpp
+// Name: src/univ/checkbox.cpp
// Purpose: wxCheckBox implementation
// Author: Vadim Zeitlin
// Modified by:
// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "univcheckbox.h"
-#endif
-
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#if wxUSE_CHECKBOX
+#include "wx/checkbox.h"
+
#ifndef WX_PRECOMP
#include "wx/dcclient.h"
- #include "wx/checkbox.h"
#include "wx/validate.h"
#include "wx/button.h" // for wxACTION_BUTTON_XXX
#include "wx/univ/inphand.h"
#include "wx/univ/colschem.h"
+// ----------------------------------------------------------------------------
+// wxStdCheckboxInputHandler: handles the mouse events for the check and radio
+// boxes (handling the keyboard input is simple, but its handling differs a
+// lot between GTK and MSW, so a new class should be derived for this)
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxStdCheckboxInputHandler : public wxStdInputHandler
+{
+public:
+ wxStdCheckboxInputHandler(wxInputHandler *inphand);
+
+ // we have to override this one as wxStdButtonInputHandler version works
+ // only with the buttons
+ virtual bool HandleActivation(wxInputConsumer *consumer, bool activated);
+};
+
// ============================================================================
// implementation
// ============================================================================
-IMPLEMENT_DYNAMIC_CLASS(wxCheckBox, wxControl)
-
// ----------------------------------------------------------------------------
// wxCheckBox
// ----------------------------------------------------------------------------
const wxValidator& validator,
const wxString &name)
{
+ WXValidateStyle( &style );
if ( !wxControl::Create(parent, id, pos, size, style, validator, name) )
return false;
SetLabel(label);
- SetBestSize(size);
+ SetInitialSize(size);
CreateInputHandler(wxINP_HANDLER_CHECKBOX);
switch ( Get3StateValue() )
{
- case wxCHK_CHECKED: flags |= wxCONTROL_CHECKED;
- case wxCHK_UNDETERMINED: flags |= wxCONTROL_UNDETERMINED;
+ case wxCHK_CHECKED: flags |= wxCONTROL_CHECKED; break;
+ case wxCHK_UNDETERMINED: flags |= wxCONTROL_UNDETERMINED; break;
+ default: /* do nothing */ break;
}
wxBitmap bitmap(GetBitmap(GetState(flags), m_status));
if ( height < sizeBmp.y )
height = sizeBmp.y;
-#if wxUNIV_COMPATIBLE_MSW
+#if defined(wxUNIV_COMPATIBLE_MSW) && wxUNIV_COMPATIBLE_MSW
+ // FIXME: flag nowhere defined so perhaps should be removed?
+
// this looks better but is different from what wxMSW does
height += GetCharHeight()/2;
#endif // wxUNIV_COMPATIBLE_MSW
{
case wxCHK_UNCHECKED: status = Status_Unchecked; break;
case wxCHK_CHECKED: status = Status_Checked; break;
- default: wxFAIL_MSG(_T("Unknown checkbox state"));
+ default: wxFAIL_MSG(wxT("Unknown checkbox state"));
case wxCHK_UNDETERMINED: status = Status_3rdState; break;
}
if ( status != m_status )
{
case Status_Checked: return wxCHK_CHECKED;
case Status_Unchecked: return wxCHK_UNCHECKED;
+ default: /* go further */ break;
}
return wxCHK_UNDETERMINED;
}
return true;
}
+/* static */
+wxInputHandler *wxCheckBox::CreateStdInputHandler(wxInputHandler *handlerDef)
+{
+ static wxStdCheckboxInputHandler s_handler(handlerDef);
+
+ return &s_handler;
+}
+
// ----------------------------------------------------------------------------
// wxStdCheckboxInputHandler
// ----------------------------------------------------------------------------
-wxStdCheckboxInputHandler::wxStdCheckboxInputHandler(wxInputHandler *inphand)
- : wxStdButtonInputHandler(inphand)
+wxStdCheckboxInputHandler::wxStdCheckboxInputHandler(wxInputHandler *def)
+ : wxStdInputHandler(wxButton::GetStdInputHandler(def))
{
}