From c68e89038fff5262d79df50499a57a4504c1dc4d Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 22 Feb 2024 12:07:01 +0300 Subject: [PATCH] TextBox new properties --- src/frontend/gui/controls.cpp | 16 ++++++++++++++++ src/frontend/gui/controls.h | 4 ++++ src/frontend/gui/gui_xml.cpp | 14 ++++++++++++++ src/logic/scripting/scripting_functional.cpp | 15 +++++++++++++++ src/logic/scripting/scripting_functional.h | 6 ++++++ 5 files changed, 55 insertions(+) diff --git a/src/frontend/gui/controls.cpp b/src/frontend/gui/controls.cpp index 1328b4dc..25d9f749 100644 --- a/src/frontend/gui/controls.cpp +++ b/src/frontend/gui/controls.cpp @@ -355,6 +355,22 @@ void TextBox::setTextValidator(wstringchecker validator) { this->validator = validator; } +void TextBox::setFocusedColor(glm::vec4 color) { + this->focusedColor = color; +} + +glm::vec4 TextBox::getFocusedColor() const { + return focusedColor; +} + +void TextBox::setErrorColor(glm::vec4 color) { + this->invalidColor = color; +} + +glm::vec4 TextBox::getErrorColor() const { + return invalidColor; +} + std::wstring TextBox::getText() const { if (input.empty()) return placeholder; diff --git a/src/frontend/gui/controls.h b/src/frontend/gui/controls.h index 1d0cb1ea..60cb4337 100644 --- a/src/frontend/gui/controls.h +++ b/src/frontend/gui/controls.h @@ -118,6 +118,10 @@ namespace gui { virtual void setTextConsumer(wstringconsumer consumer); virtual void setTextValidator(wstringchecker validator); virtual bool isFocuskeeper() const override {return true;} + virtual void setFocusedColor(glm::vec4 color); + virtual glm::vec4 getFocusedColor() const; + virtual void setErrorColor(glm::vec4 color); + virtual glm::vec4 getErrorColor() const; /* Get TextBox content text or placeholder if empty */ virtual std::wstring getText() const; /* Set TextBox content text */ diff --git a/src/frontend/gui/gui_xml.cpp b/src/frontend/gui/gui_xml.cpp index 5a75e3ad..94a0dc97 100644 --- a/src/frontend/gui/gui_xml.cpp +++ b/src/frontend/gui/gui_xml.cpp @@ -228,6 +228,20 @@ static std::shared_ptr readTextBox(UiXmlReader& reader, xml::xmlelement ); textbox->setTextSupplier(supplier); } + if (element->has("focused-color")) { + textbox->setFocusedColor(element->attr("focused-color").asColor()); + } + if (element->has("error-color")) { + textbox->setErrorColor(element->attr("error-color").asColor()); + } + if (element->has("validator")) { + auto validator = scripting::create_wstring_validator( + reader.getEnvironment().getId(), + element->attr("validator").getText(), + reader.getFilename()+".lua" + ); + textbox->setTextValidator(validator); + } return textbox; } diff --git a/src/logic/scripting/scripting_functional.cpp b/src/logic/scripting/scripting_functional.cpp index 619d751a..d45bbfda 100644 --- a/src/logic/scripting/scripting_functional.cpp +++ b/src/logic/scripting/scripting_functional.cpp @@ -66,6 +66,21 @@ wstringsupplier scripting::create_wstring_supplier( }; } +wstringchecker scripting::create_wstring_validator( + int env, + const std::string& src, + const std::string& file +) { + return [=](const std::wstring& x){ + if (processCallback(env, src, file)) { + state->pushstring(util::wstr2str_utf8(x)); + if (state->callNoThrow(1)) + return state->toboolean(-1); + } + return false; + }; +} + boolconsumer scripting::create_bool_consumer( int env, const std::string& src, diff --git a/src/logic/scripting/scripting_functional.h b/src/logic/scripting/scripting_functional.h index c5db97e4..57c3ab3a 100644 --- a/src/logic/scripting/scripting_functional.h +++ b/src/logic/scripting/scripting_functional.h @@ -24,6 +24,12 @@ namespace scripting { const std::string& file="" ); + wstringchecker create_wstring_validator( + int env, + const std::string& src, + const std::string& file="" + ); + boolconsumer create_bool_consumer( int env, const std::string& src,