From 1cf1002f1d3cd81ddb920eb7196a067b566f11e2 Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 10 Mar 2022 18:03:49 +0800 Subject: ... --- include/cru/ui/components/Input.h | 77 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 include/cru/ui/components/Input.h (limited to 'include/cru/ui/components/Input.h') diff --git a/include/cru/ui/components/Input.h b/include/cru/ui/components/Input.h new file mode 100644 index 00000000..e808afd7 --- /dev/null +++ b/include/cru/ui/components/Input.h @@ -0,0 +1,77 @@ +#pragma once +#include "../controls/TextBox.h" +#include "Component.h" + +namespace cru::ui::components { +struct CRU_UI_API InputValidateResult { + bool valid; + String message; +}; + +struct CRU_UI_API IInputValidator : public virtual Interface { + virtual InputValidateResult Validate(StringView text) const = 0; +}; + +struct CRU_UI_API InputChangeEventArgs { + String text; + bool valid; + String message; +}; + +class CRU_UI_API Input : public Component { + public: + Input(); + ~Input() override; + + public: + controls::Control* GetRootControl() override; + + String GetText() const; + void SetText(String text); + + IInputValidator* GetValidator() const; + void SetValidator(IInputValidator* validator); + + InputValidateResult Validate(); + InputValidateResult GetLastValidateResult() const; + + IEvent* ChangeEvent() { return &change_event_; } + + private: + controls::TextBox text_box_; + IInputValidator* validator_; + InputValidateResult last_validate_result_; + + Event change_event_; +}; + +class CRU_UI_API FloatInputValidator : public Object, + public virtual IInputValidator { + public: + InputValidateResult Validate(StringView text) const override; + + std::optional min; + std::optional max; +}; + +class CRU_UI_API FloatInput : public Input { + public: + FloatInput(); + ~FloatInput() override; + + public: + float GetValue() const; + void SetValue(float value); + + std::optional GetMax() const; + void SetMax(std::optional max); + + std::optional GetMin() const; + void SetMin(std::optional min); + + private: + float value_; + + FloatInputValidator validator_; +}; +} // namespace cru::ui::components -- cgit v1.2.3