/////////////////////////////////////////////////////////////////////////////
-// Name: univ/checkbox.cpp
+// Name: src/univ/checkbox.cpp
// Purpose: wxCheckBox implementation
// Author: Vadim Zeitlin
// Modified by:
#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
// ============================================================================
return false;
SetLabel(label);
- SetBestSize(size);
+ SetInitialSize(size);
CreateInputHandler(wxINP_HANDLER_CHECKBOX);
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 )
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))
{
}