xml: second Button constructor support

This commit is contained in:
MihailRis
2024-03-19 15:13:08 +03:00
parent 8b8bc55ff7
commit bd2eb13118
2 changed files with 25 additions and 18 deletions
+6 -8
View File
@@ -244,12 +244,11 @@ std::shared_ptr<Panel> create_worlds_panel(Engine* engine) {
}); });
btn->add(std::make_shared<Label>(namews), glm::vec2(8, 8)); btn->add(std::make_shared<Label>(namews), glm::vec2(8, 8));
auto image = std::make_shared<Image>("gui/delete_icon", glm::vec2(32, 32)); auto delbtn = std::dynamic_pointer_cast<Button>(guiutil::create(
image->setColor(glm::vec4(1, 1, 1, 0.5f)); "<button color='#00000000' hover-color='#FFFFFF2B' padding='2,2,2,2'>"
" <image src='gui/delete_icon' size='32,32' color='#FFFFFF80'/>"
auto delbtn = std::make_shared<Button>(image, glm::vec4(2)); "</button>"
delbtn->setColor(glm::vec4(0.0f)); ));
delbtn->setHoverColor(glm::vec4(1.0f, 1.0f, 1.0f, 0.17f));
delbtn->listenAction([=](GUI* gui) { delbtn->listenAction([=](GUI* gui) {
guiutil::confirm(gui, langs::get(L"delete-confirm", L"world")+ guiutil::confirm(gui, langs::get(L"delete-confirm", L"world")+
L" ("+util::str2wstr_utf8(folder.u8string())+L")", [=]() { L" ("+util::str2wstr_utf8(folder.u8string())+L")", [=]() {
@@ -281,8 +280,7 @@ void create_main_menu_panel(Engine* engine) {
} }
void create_404_page(Engine* engine) { void create_404_page(Engine* engine) {
auto menu = engine->getGUI()->getMenu(); auto menu = engine->getGUI()->getMenu();
auto panel = menus::create_page(engine, "404", 400, 0.0f, 8); auto panel = menus::create_page(engine, "404", 400, 0.0f, 8);
panel->add(guiutil::create("<label context='menu'>@Page does not exists</label>")); panel->add(guiutil::create("<label context='menu'>@Page does not exists</label>"));
panel->add(guiutil::backButton(menu)); panel->add(guiutil::backButton(menu));
+19 -10
View File
@@ -118,7 +118,7 @@ void UiXmlReader::readUINode(UiXmlReader& reader, xml::xmlelement element, UINod
_readUINode(reader, element, node); _readUINode(reader, element, node);
} }
static void _readPanel(UiXmlReader& reader, xml::xmlelement element, Panel& panel) { static void _readPanel(UiXmlReader& reader, xml::xmlelement element, Panel& panel, bool subnodes=true) {
_readUINode(reader, element, panel); _readUINode(reader, element, panel);
if (element->has("padding")) { if (element->has("padding")) {
@@ -136,12 +136,14 @@ static void _readPanel(UiXmlReader& reader, xml::xmlelement element, Panel& pane
if (element->has("max-length")) { if (element->has("max-length")) {
panel.setMaxLength(element->attr("max-length").asInt()); panel.setMaxLength(element->attr("max-length").asInt());
} }
for (auto& sub : element->getElements()) { if (subnodes) {
if (sub->isText()) for (auto& sub : element->getElements()) {
continue; if (sub->isText())
auto subnode = reader.readUINode(sub); continue;
if (subnode) { auto subnode = reader.readUINode(sub);
panel.add(subnode); if (subnode) {
panel.add(subnode);
}
} }
} }
} }
@@ -197,9 +199,16 @@ static std::shared_ptr<UINode> readPanel(UiXmlReader& reader, xml::xmlelement el
} }
static std::shared_ptr<UINode> readButton(UiXmlReader& reader, xml::xmlelement element) { static std::shared_ptr<UINode> readButton(UiXmlReader& reader, xml::xmlelement element) {
std::wstring text = readAndProcessInnerText(element, reader.getContext()); std::shared_ptr<Button> button;
auto button = std::make_shared<Button>(text, glm::vec4(0.0f), nullptr); if (!element->getElements().empty()) {
_readPanel(reader, element, *button); glm::vec4 padding = element->attr("padding", "0,0,0,0").asVec4();
button = std::make_shared<Button>(reader.readUINode(element->getElements().at(0)), padding);
_readPanel(reader, element, *button, false);
} else {
std::wstring text = readAndProcessInnerText(element, reader.getContext());
button = std::make_shared<Button>(text, glm::vec4(0.0f), nullptr);
_readPanel(reader, element, *button, true);
}
if (element->has("onclick")) { if (element->has("onclick")) {
auto callback = scripting::create_runnable( auto callback = scripting::create_runnable(