yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
zeml.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GUI_ZEML_H
2#define YAZE_APP_GUI_ZEML_H
3
4#include "imgui/imgui.h"
5
6#include <cctype>
7#include <functional>
8#include <map>
9#include <memory>
10#include <string>
11#include <vector>
12
13namespace yaze {
14namespace gui {
15
20namespace zeml {
21
33
37struct Token {
39 std::string value;
40} typedef Token;
41
71
88 std::string id;
89 std::string title; // For Window, Button
90 std::string text; // For Text, Button
91 double min; // For Slider
92 double max; // For Slider
93 double value; // For Slidecar
94 float width; // For Columns
95 int count = 0; // For Columns
96 ImVec2 size = ImVec2(0, 0); // For BeginChild
97 bool* selected = nullptr; // For Selectable
98 std::shared_ptr<void> flags = nullptr; // For Various
99 void* data = nullptr; // For Various
100};
101
105enum class ActionType { Click, Change, Run };
106
110struct Action {
112 std::function<void()> callback;
113};
114
118std::vector<Token> Tokenize(const std::string& input);
119
124struct Node {
127 std::vector<Action> actions;
128 std::vector<Node> children;
129
130 Node* parent = nullptr;
131
132 Node* GetNode(const std::string& searchId) {
133 if (attributes.id == searchId) {
134 return this;
135 }
136 for (Node& child : children) {
137 Node* found = child.GetNode(searchId);
138 if (found != nullptr) {
139 return found;
140 }
141 }
142 return nullptr;
143 }
144};
145
149void Bind(Node* node, std::function<void()> callback);
150
154void BindAction(Node* node, ActionType type, std::function<void()> callback);
155
159void BindSelectable(Node* node, bool* selected, std::function<void()> callback);
160
164WidgetType MapType(const std::string& type);
165
169void ParseDefinitions(const std::vector<Token>& tokens, size_t& index,
170 std::map<std::string, Node>& definitions);
171
172void ParseFlags(const WidgetType& type, const std::string& flags,
173 WidgetAttributes& flags_ptr);
174
179 const std::vector<Token>& tokens, size_t& index, const WidgetType& type,
180 const std::map<std::string, void*>& data_bindings = {});
181
185Node ParseNode(const std::vector<Token>& tokens, size_t& index,
186 const std::map<std::string, void*>& data_bindings = {},
187 const std::map<std::string, Node>& definitions = {});
188
192Node Parse(const std::string& yazon_input,
193 const std::map<std::string, void*>& data_bindings = {});
194
198void Render(Node& node);
199
203void ExecuteActions(const std::vector<Action>& actions, ActionType type);
204
205std::string LoadFile(const std::string& filename);
206
207} // namespace zeml
208} // namespace gui
209
210} // namespace yaze
211
212#endif // YAZE_APP_GUI_YAZON_H_
Zelda Editor Markup Language Functions.
Definition zeml.cc:19
void ParseDefinitions(const std::vector< Token > &tokens, size_t &index, std::map< std::string, Node > &definitions)
Parse a zeml definition.
void ParseFlags(const WidgetType &type, const std::string &flags, WidgetAttributes &attributes)
Definition zeml.cc:134
WidgetType MapType(const std::string &type)
Map a string to a widget type.
Definition zeml.cc:56
void BindAction(Node *node, ActionType type, std::function< void()> callback)
Bind an action to a node.
Definition zeml.cc:573
std::vector< Token > Tokenize(const std::string &input)
Tokenize a zeml string.
Definition zeml.cc:21
void Render(Node &node)
Render a zeml tree.
Definition zeml.cc:380
std::string LoadFile(const std::string &filename)
Definition zeml.cc:589
void Bind(Node *node, std::function< void()> callback)
Bind a callback to a node.
Definition zeml.cc:566
Node Parse(const std::string &yazon_input, const std::map< std::string, void * > &data_bindings)
Parse a zeml string.
Definition zeml.cc:359
void BindSelectable(Node *node, bool *selected, std::function< void()> callback)
Bind a selectable node.
Definition zeml.cc:580
WidgetAttributes ParseAttributes(const std::vector< Token > &tokens, size_t &index, const WidgetType &type, const std::map< std::string, void * > &data_bindings)
ParseNode attributes for a widget.
Definition zeml.cc:304
Node ParseNode(const std::vector< Token > &tokens, size_t &index, const std::map< std::string, void * > &data_bindings, const std::map< std::string, Node > &definitions)
Parse a zeml node.
Definition zeml.cc:86
void ExecuteActions(const std::vector< Action > &actions, ActionType type)
Execute actions for a node.
Definition zeml.cc:558
Graphical User Interface (GUI) components for the application.
Definition canvas.cc:15
Main namespace for the application.
Definition controller.cc:18
ActionType type
Definition zeml.h:111
std::function< void()> callback
Definition zeml.h:112
Node for a zeml tree.
Definition zeml.h:124
Node * GetNode(const std::string &searchId)
Definition zeml.h:132
WidgetAttributes attributes
Definition zeml.h:126
std::vector< Action > actions
Definition zeml.h:127
std::vector< Node > children
Definition zeml.h:128
WidgetType type
Definition zeml.h:125
TokenType type
Definition zeml.h:38
std::string value
Definition zeml.h:39
Attributes for a widget.
Definition zeml.h:87
std::shared_ptr< void > flags
Definition zeml.h:98