#include "gui_util.hpp" #include #include "delegates.hpp" #include "elements/Button.hpp" #include "elements/Label.hpp" #include "elements/Menu.hpp" #include "elements/TextBox.hpp" #include "engine/Engine.hpp" #include "frontend/locale.hpp" #include "gui_xml.hpp" #include "logic/scripting/scripting.hpp" #include "util/stringutil.hpp" using namespace gui; std::shared_ptr guiutil::create( GUI& gui, const std::string& source, scriptenv env ) { if (env == nullptr) { env = scripting::get_root_environment(); } UiXmlReader reader(gui, std::move(env)); return reader.readXML("[string]", source); } void guiutil::alert( Engine& engine, const std::wstring& text, const runnable& on_hidden ) { GUI& gui = engine.getGUI(); auto panel = std::make_shared( gui, 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 = gui.getMenu(); auto& menu = *menuPtr; runnable on_hidden_final = [on_hidden, &menu]() { menu.removePage(""); if (on_hidden) { on_hidden(); } else if (!menu.back()) { menu.reset(); } }; auto label = std::make_shared