#pragma once #include "../helper/ClickDetector.h" #include "../render/BorderRenderObject.h" #include "IBorderControl.h" #include "ICheckableControl.h" #include "IClickableControl.h" #include "NoChildControl.h" namespace cru::ui::controls { class CRU_UI_API CheckBox : public NoChildControl, public virtual IBorderControl, public virtual ICheckableControl, public virtual IClickableControl { public: static constexpr StringView kControlType = u"CheckBox"; CheckBox(); ~CheckBox() override; String GetControlType() const override { return kControlType.ToString(); } render::RenderObject* GetRenderObject() const override { return container_render_object_.get(); } bool IsChecked() const override { return checked_; } void SetChecked(bool checked) override; void Toggle() { SetChecked(!checked_); } IEvent* CheckedChangeEvent() override { return &checked_change_event_; } void ApplyBorderStyle(const style::ApplyBorderStyleInfo& style) override; helper::ClickState GetClickState() override { return click_detector_.GetState(); } IEvent* ClickStateChangeEvent() override { return click_detector_.StateChangeEvent(); } private: bool checked_ = false; Event checked_change_event_; std::unique_ptr container_render_object_; helper::ClickDetector click_detector_; }; } // namespace cru::ui::controls