Skip to content

Commit

Permalink
reformat gui_xml.cpp
Browse files Browse the repository at this point in the history
  • Loading branch information
MihailRis committed Jan 22, 2025
1 parent 6d1cacb commit a0210c8
Showing 1 changed file with 78 additions and 55 deletions.
133 changes: 78 additions & 55 deletions src/graphics/ui/gui_xml.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ static onaction create_action(
return [callback](GUI*) {callback();};
}

/* Read basic UINode properties */
static void _readUINode(
/// @brief Read basic UINode properties
static void read_uinode(
const UiXmlReader& reader, const xml::xmlelement& element, UINode& node
) {
if (element.has("id")) {
Expand Down Expand Up @@ -177,8 +177,8 @@ static void _readUINode(
}
}

static void _readContainer(UiXmlReader& reader, const xml::xmlelement& element, Container& container) {
_readUINode(reader, element, container);
static void read_container_impl(UiXmlReader& reader, const xml::xmlelement& element, Container& container) {
read_uinode(reader, element, container);

if (element.has("scrollable")) {
container.setScrollable(element.attr("scrollable").asBool());
Expand All @@ -197,17 +197,22 @@ static void _readContainer(UiXmlReader& reader, const xml::xmlelement& element,
}

void UiXmlReader::readUINode(UiXmlReader& reader, const xml::xmlelement& element, Container& container) {
_readContainer(reader, element, container);
read_container_impl(reader, element, container);
}

void UiXmlReader::readUINode(
const UiXmlReader& reader, const xml::xmlelement& element, UINode& node
) {
_readUINode(reader, element, node);
read_uinode(reader, element, node);
}

static void _readPanel(UiXmlReader& reader, const xml::xmlelement& element, Panel& panel, bool subnodes=true) {
_readUINode(reader, element, panel);
static void read_panel_impl(
UiXmlReader& reader,
const xml::xmlelement& element,
Panel& panel,
bool subnodes = true
) {
read_uinode(reader, element, panel);

if (element.has("padding")) {
glm::vec4 padding = element.attr("padding").asVec4();
Expand Down Expand Up @@ -245,7 +250,9 @@ static void _readPanel(UiXmlReader& reader, const xml::xmlelement& element, Pane
}
}

static std::wstring readAndProcessInnerText(const xml::xmlelement& element, const std::string& context) {
static std::wstring parse_inner_text(
const xml::xmlelement& element, const std::string& context
) {
std::wstring text = L"";
if (element.size() == 1) {
std::string source = element.sub(0).attr("#").getText();
Expand All @@ -265,9 +272,9 @@ static std::wstring readAndProcessInnerText(const xml::xmlelement& element, cons
static std::shared_ptr<UINode> readLabel(
const UiXmlReader& reader, const xml::xmlelement& element
) {
std::wstring text = readAndProcessInnerText(element, reader.getContext());
std::wstring text = parse_inner_text(element, reader.getContext());
auto label = std::make_shared<Label>(text);
_readUINode(reader, element, *label);
read_uinode(reader, element, *label);
if (element.has("valign")) {
label->setVerticalAlign(
align_from_string(element.attr("valign").getText(), label->getVerticalAlign())
Expand Down Expand Up @@ -298,20 +305,26 @@ static std::shared_ptr<UINode> readLabel(
return label;
}

static std::shared_ptr<UINode> readContainer(UiXmlReader& reader, const xml::xmlelement& element) {
static std::shared_ptr<UINode> read_container(
UiXmlReader& reader, const xml::xmlelement& element
) {
auto container = std::make_shared<Container>(glm::vec2());
_readContainer(reader, element, *container);
read_container_impl(reader, element, *container);
return container;
}

static std::shared_ptr<UINode> readPanel(UiXmlReader& reader, const xml::xmlelement& element) {
static std::shared_ptr<UINode> read_panel(
UiXmlReader& reader, const xml::xmlelement& element
) {
float interval = element.attr("interval", "2").asFloat();
auto panel = std::make_shared<Panel>(glm::vec2(), glm::vec4(), interval);
_readPanel(reader, element, *panel);
read_panel_impl(reader, element, *panel);
return panel;
}

static std::shared_ptr<UINode> readButton(UiXmlReader& reader, const xml::xmlelement& element) {
static std::shared_ptr<UINode> read_button(
UiXmlReader& reader, const xml::xmlelement& element
) {
glm::vec4 padding = element.attr("padding", "10").asVec4();

std::shared_ptr<Button> button;
Expand All @@ -323,11 +336,11 @@ static std::shared_ptr<UINode> readButton(UiXmlReader& reader, const xml::xmlele
} else {
button = std::make_shared<Button>(L"", padding, nullptr);
}
_readPanel(reader, element, *button, false);
read_panel_impl(reader, element, *button, false);
} else {
std::wstring text = readAndProcessInnerText(element, reader.getContext());
std::wstring text = parse_inner_text(element, reader.getContext());
button = std::make_shared<Button>(text, padding, nullptr);
_readPanel(reader, element, *button, true);
read_panel_impl(reader, element, *button, true);
}
if (element.has("text-align")) {
button->setTextAlign(align_from_string(
Expand All @@ -337,11 +350,13 @@ static std::shared_ptr<UINode> readButton(UiXmlReader& reader, const xml::xmlele
return button;
}

static std::shared_ptr<UINode> readCheckBox(UiXmlReader& reader, const xml::xmlelement& element) {
auto text = readAndProcessInnerText(element, reader.getContext());
static std::shared_ptr<UINode> read_check_box(
UiXmlReader& reader, const xml::xmlelement& element
) {
auto text = parse_inner_text(element, reader.getContext());
bool checked = element.attr("checked", "false").asBool();
auto checkbox = std::make_shared<FullCheckBox>(text, glm::vec2(32), checked);
_readPanel(reader, element, *checkbox);
read_panel_impl(reader, element, *checkbox);

if (element.has("consumer")) {
checkbox->setConsumer(scripting::create_bool_consumer(
Expand All @@ -361,14 +376,16 @@ static std::shared_ptr<UINode> readCheckBox(UiXmlReader& reader, const xml::xmle
return checkbox;
}

static std::shared_ptr<UINode> readTextBox(UiXmlReader& reader, const xml::xmlelement& element) {
static std::shared_ptr<UINode> read_text_box(
UiXmlReader& reader, const xml::xmlelement& element
) {
auto placeholder = util::str2wstr_utf8(element.attr("placeholder", "").getText());
auto hint = util::str2wstr_utf8(element.attr("hint", "").getText());
auto text = readAndProcessInnerText(element, reader.getContext());
auto text = parse_inner_text(element, reader.getContext());
auto textbox = std::make_shared<TextBox>(placeholder, glm::vec4(0.0f));
textbox->setHint(hint);

_readContainer(reader, element, *textbox);
read_container_impl(reader, element, *textbox);
if (element.has("padding")) {
glm::vec4 padding = element.attr("padding").asVec4();
textbox->setPadding(padding);
Expand Down Expand Up @@ -447,28 +464,28 @@ static std::shared_ptr<UINode> readTextBox(UiXmlReader& reader, const xml::xmlel
return textbox;
}

static std::shared_ptr<UINode> readImage(
static std::shared_ptr<UINode> read_image(
const UiXmlReader& reader, const xml::xmlelement& element
) {
std::string src = element.attr("src", "").getText();
auto image = std::make_shared<Image>(src);
_readUINode(reader, element, *image);
read_uinode(reader, element, *image);
return image;
}

static std::shared_ptr<UINode> readCanvas(
static std::shared_ptr<UINode> read_canvas(
const UiXmlReader& reader, const xml::xmlelement& element
) {
auto size = glm::uvec2{32, 32};
if (element.has("size")) {
size = element.attr("size").asVec2();
}
auto image = std::make_shared<Canvas>(ImageFormat::rgba8888, size);
_readUINode(reader, element, *image);
read_uinode(reader, element, *image);
return image;
}

static std::shared_ptr<UINode> readTrackBar(
static std::shared_ptr<UINode> read_track_bar(
const UiXmlReader& reader, const xml::xmlelement& element
) {
const auto& env = reader.getEnvironment();
Expand All @@ -479,7 +496,7 @@ static std::shared_ptr<UINode> readTrackBar(
float step = element.attr("step", "1.0").asFloat();
int trackWidth = element.attr("track-width", "12").asInt();
auto bar = std::make_shared<TrackBar>(minv, maxv, def, step, trackWidth);
_readUINode(reader, element, *bar);
read_uinode(reader, element, *bar);
if (element.has("consumer")) {
bar->setConsumer(scripting::create_number_consumer(
env, element.attr("consumer").getText(), file));
Expand All @@ -501,20 +518,22 @@ static std::shared_ptr<UINode> readTrackBar(
return bar;
}

static std::shared_ptr<UINode> readInputBindBox(UiXmlReader& reader, const xml::xmlelement& element) {
static std::shared_ptr<UINode> read_input_bind_box(
UiXmlReader& reader, const xml::xmlelement& element
) {
auto bindname = element.attr("binding").getText();
auto found = Events::bindings.find(bindname);
if (found == Events::bindings.end()) {
throw std::runtime_error("binding does not exists "+util::quote(bindname));
}
glm::vec4 padding = element.attr("padding", "6").asVec4();
auto bindbox = std::make_shared<InputBindBox>(found->second, padding);
_readPanel(reader, element, *bindbox);
read_panel_impl(reader, element, *bindbox);

return bindbox;
}

static slotcallback readSlotFunc(
static slotcallback read_slot_func(
InventoryView* view,
const UiXmlReader& reader,
const xml::xmlelement& element,
Expand Down Expand Up @@ -542,13 +561,13 @@ static void readSlot(
layout.position = element.attr("pos").asVec2();
}
if (element.has("updatefunc")) {
layout.updateFunc = readSlotFunc(view, reader, element, "updatefunc");
layout.updateFunc = read_slot_func(view, reader, element, "updatefunc");
}
if (element.has("sharefunc")) {
layout.shareFunc = readSlotFunc(view, reader, element, "sharefunc");
layout.shareFunc = read_slot_func(view, reader, element, "sharefunc");
}
if (element.has("onrightclick")) {
layout.rightClick = readSlotFunc(view, reader, element, "onrightclick");
layout.rightClick = read_slot_func(view, reader, element, "onrightclick");
}
layout.taking = taking;
layout.placing = placing;
Expand Down Expand Up @@ -588,13 +607,13 @@ static void readSlotsGrid(
layout.position = element.attr("pos").asVec2();
}
if (element.has("updatefunc")) {
layout.updateFunc = readSlotFunc(view, reader, element, "updatefunc");
layout.updateFunc = read_slot_func(view, reader, element, "updatefunc");
}
if (element.has("sharefunc")) {
layout.shareFunc = readSlotFunc(view, reader, element, "sharefunc");
layout.shareFunc = read_slot_func(view, reader, element, "sharefunc");
}
if (element.has("onrightclick")) {
layout.rightClick = readSlotFunc(view, reader, element, "onrightclick");
layout.rightClick = read_slot_func(view, reader, element, "onrightclick");
}
layout.padding = padding;
layout.taking = taking;
Expand All @@ -618,7 +637,9 @@ static void readSlotsGrid(
}
}

static std::shared_ptr<UINode> readInventory(UiXmlReader& reader, const xml::xmlelement& element) {
static std::shared_ptr<UINode> read_inventory(
UiXmlReader& reader, const xml::xmlelement& element
) {
auto view = std::make_shared<InventoryView>();
view->setColor(glm::vec4(0.122f, 0.122f, 0.122f, 0.878f)); // todo: fixme
reader.addIgnore("slot");
Expand All @@ -633,32 +654,34 @@ static std::shared_ptr<UINode> readInventory(UiXmlReader& reader, const xml::xml
}
}
return view;
}
}

static std::shared_ptr<UINode> readPageBox(UiXmlReader& reader, const xml::xmlelement& element) {
static std::shared_ptr<UINode> read_page_box(
UiXmlReader& reader, const xml::xmlelement& element
) {
auto menu = std::make_shared<Menu>();
menu->setPageLoader(
Engine::getInstance().getGUI()->getMenu()->getPageLoader()
);
_readContainer(reader, element, *menu);
read_container_impl(reader, element, *menu);

return menu;
}

UiXmlReader::UiXmlReader(const scriptenv& env) : env(env) {
contextStack.emplace("");
add("image", readImage);
add("canvas", readCanvas);
add("image", read_image);
add("canvas", read_canvas);
add("label", readLabel);
add("panel", readPanel);
add("button", readButton);
add("textbox", readTextBox);
add("pagebox", readPageBox);
add("checkbox", readCheckBox);
add("trackbar", readTrackBar);
add("container", readContainer);
add("bindbox", readInputBindBox);
add("inventory", readInventory);
add("panel", read_panel);
add("button", read_button);
add("textbox", read_text_box);
add("pagebox", read_page_box);
add("checkbox", read_check_box);
add("trackbar", read_track_bar);
add("container", read_container);
add("bindbox", read_input_bind_box);
add("inventory", read_inventory);
}

void UiXmlReader::add(const std::string& tag, uinode_reader reader) {
Expand Down

0 comments on commit a0210c8

Please sign in to comment.