diff --git a/src/engine.cpp b/src/engine.cpp index 358c2fbc..c9dc803f 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -281,7 +281,7 @@ void Engine::setScreen(std::shared_ptr screen) { void Engine::setLanguage(std::string locale) { langs::setup(paths->getResources(), locale, contentPacks); - menus::create_menus(this); + gui->getMenu()->setPageLoader(menus::create_page_loader(this)); } gui::GUI* Engine::getGUI() { diff --git a/src/frontend/menu.cpp b/src/frontend/menu.cpp index 84ab5c44..82eff74f 100644 --- a/src/frontend/menu.cpp +++ b/src/frontend/menu.cpp @@ -31,9 +31,8 @@ void menus::create_version_label(Engine* engine) { )); } -void menus::create_menus(Engine* engine) { - auto menu = engine->getGUI()->getMenu(); - menu->setPageLoader([=](auto name) { +gui::page_loader_func menus::create_page_loader(Engine* engine) { + return [=](auto name) { auto file = engine->getResPaths()->find("layouts/pages/"+name+".xml"); auto fullname = "core:pages/"+name; @@ -41,7 +40,7 @@ void menus::create_menus(Engine* engine) { engine->getAssets()->store(document, fullname); scripting::on_ui_open(document, {}); return document->getRoot(); - }); + }; } UiDocument* menus::show(Engine* engine, const std::string& name, std::vector> args) { diff --git a/src/frontend/menu.hpp b/src/frontend/menu.hpp index 6f2b1000..cf3d7630 100644 --- a/src/frontend/menu.hpp +++ b/src/frontend/menu.hpp @@ -1,6 +1,8 @@ #ifndef FRONTEND_MENU_MENU_HPP_ #define FRONTEND_MENU_MENU_HPP_ +#include "../graphics/ui/elements/Menu.hpp" + #include #include #include @@ -18,7 +20,7 @@ namespace menus { /// @brief Create development version label at the top-right screen corner void create_version_label(Engine* engine); - void create_menus(Engine* engine); + gui::page_loader_func create_page_loader(Engine* engine); UiDocument* show( Engine* engine, diff --git a/src/graphics/ui/gui_xml.cpp b/src/graphics/ui/gui_xml.cpp index 70c43682..28cf942d 100644 --- a/src/graphics/ui/gui_xml.cpp +++ b/src/graphics/ui/gui_xml.cpp @@ -2,6 +2,7 @@ #include "elements/Panel.hpp" #include "elements/Image.hpp" +#include "elements/Menu.hpp" #include "elements/Button.hpp" #include "elements/CheckBox.hpp" #include "elements/TextBox.hpp" @@ -9,6 +10,7 @@ #include "elements/InputBindBox.hpp" #include "elements/InventoryView.hpp" +#include "../../frontend/menu.hpp" #include "../../frontend/locale/langs.h" #include "../../items/Inventory.h" #include "../../logic/scripting/scripting.h" @@ -486,6 +488,15 @@ static std::shared_ptr readInventory(UiXmlReader& reader, xml::xmlelemen return view; } +static std::shared_ptr readPageBox(UiXmlReader& reader, xml::xmlelement element) { + auto menu = std::make_shared(); + // fixme + menu->setPageLoader(menus::create_page_loader(scripting::engine)); + _readContainer(reader, element, *menu); + + return menu; +} + UiXmlReader::UiXmlReader(const scriptenv& env) : env(env) { contextStack.push(""); add("image", readImage); @@ -493,6 +504,7 @@ UiXmlReader::UiXmlReader(const scriptenv& env) : env(env) { add("panel", readPanel); add("button", readButton); add("textbox", readTextBox); + add("pagebox", readPageBox); add("checkbox", readCheckBox); add("trackbar", readTrackBar); add("container", readContainer);