#include "gui_util.hpp" #include "elements/Label.hpp" #include "elements/Menu.hpp" #include "elements/Button.hpp" #include "elements/TextBox.hpp" #include "gui_xml.hpp" #include "logic/scripting/scripting.hpp" #include "frontend/locale.hpp" #include "util/stringutil.hpp" #include "delegates.hpp" #include "window/Events.hpp" #include "engine/Engine.hpp" #include using namespace gui; std::shared_ptr guiutil::create(const std::string& source, scriptenv env) { if (env == nullptr) { env = scripting::get_root_environment(); } UiXmlReader reader(env); return reader.readXML("[string]", source); } void guiutil::alert( Engine& engine, const std::wstring& text, const runnable& on_hidden ) { auto panel = std::make_shared( glm::vec2( glm::min( static_cast(650), glm::max(text.length() * 10, static_cast(200)) ), 300 ), glm::vec4(4.0f), 4.0f ); panel->setColor(glm::vec4(0.0f, 0.0f, 0.0f, 0.5f)); auto menuPtr = engine.getGUI()->getMenu(); auto& menu = *menuPtr; runnable on_hidden_final = [on_hidden, &menu, &engine]() { menu.removePage(""); if (on_hidden) { on_hidden(); } else if (!menu.back()) { menu.reset(); } }; auto label = std::make_shared