yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
yaze_widgets.cc
Go to the documentation of this file.
2
3#include "absl/strings/str_format.h"
5
6namespace yaze {
7namespace editor {
8namespace layout_designer {
9
11 switch (type) {
13 return "Themed Button";
15 return "Primary Button";
17 return "Danger Button";
19 return "Themed Icon Button";
21 return "Transparent Icon Button";
23 return "Begin Field";
25 return "End Field";
27 return "Property Table";
29 return "Property Row";
31 return "Section Header";
33 return "Padded Panel";
35 return "Themed Table";
37 return "Canvas Panel";
39 return "Auto Input Field";
41 return "Auto Button";
43 return "Auto Checkbox";
45 return "Auto Input Text";
47 return "Palette Color Button";
49 return "Panel Header";
50 default:
51 return "Unknown Yaze Widget";
52 }
53}
54
92
94 const WidgetDefinition& widget,
95 int indent_level) {
96 std::string indent(indent_level * 2, ' ');
97 std::string code;
98
99 auto* label_prop = const_cast<WidgetDefinition&>(widget).GetProperty("label");
100 std::string label = label_prop ? label_prop->string_value : "Widget";
101
102 switch (yaze_type) {
104 code +=
105 indent + absl::StrFormat("if (gui::ThemedButton(\"%s\")) {\n", label);
106 if (!widget.callback_name.empty()) {
107 code += indent + absl::StrFormat(" %s();\n", widget.callback_name);
108 }
109 code += indent + "}\n";
110 break;
111
113 code += indent +
114 absl::StrFormat("if (gui::PrimaryButton(\"%s\")) {\n", label);
115 if (!widget.callback_name.empty()) {
116 code += indent + absl::StrFormat(" %s();\n", widget.callback_name);
117 }
118 code += indent + "}\n";
119 break;
120
122 code +=
123 indent + absl::StrFormat("if (gui::DangerButton(\"%s\")) {\n", label);
124 if (!widget.callback_name.empty()) {
125 code += indent + absl::StrFormat(" %s();\n", widget.callback_name);
126 }
127 code += indent + "}\n";
128 break;
129
131 auto* icon_prop =
132 const_cast<WidgetDefinition&>(widget).GetProperty("icon");
133 std::string icon = icon_prop ? icon_prop->string_value : ICON_MD_LABEL;
134 code += indent + absl::StrFormat("gui::SectionHeader(\"%s\", \"%s\");\n",
135 icon, label);
136 break;
137 }
138
140 code += indent + "if (gui::BeginPropertyTable(\"props\")) {\n";
141 code += indent + " // Add property rows here\n";
142 code += indent + " gui::EndPropertyTable();\n";
143 code += indent + "}\n";
144 break;
145
147 auto* value_prop =
148 const_cast<WidgetDefinition&>(widget).GetProperty("value");
149 std::string value = value_prop ? value_prop->string_value : "Value";
150 code += indent + absl::StrFormat("gui::PropertyRow(\"%s\", \"%s\");\n",
151 label, value);
152 break;
153 }
154
156 auto* columns_prop =
157 const_cast<WidgetDefinition&>(widget).GetProperty("columns");
158 int columns = columns_prop ? columns_prop->int_value : 2;
159 code += indent +
160 absl::StrFormat(
161 "if (gui::LayoutHelpers::BeginTableWithTheming(\"table\", "
162 "%d)) {\n",
163 columns);
164 code += indent + " // Table contents\n";
165 code += indent + " gui::LayoutHelpers::EndTableWithTheming();\n";
166 code += indent + "}\n";
167 break;
168 }
169
171 code +=
172 indent + absl::StrFormat("if (gui::AutoButton(\"%s\")) {\n", label);
173 if (!widget.callback_name.empty()) {
174 code += indent + absl::StrFormat(" %s();\n", widget.callback_name);
175 }
176 code += indent + "}\n";
177 break;
178
180 auto* size_prop =
181 const_cast<WidgetDefinition&>(widget).GetProperty("size");
182 ImVec2 size = size_prop ? size_prop->vec2_value : ImVec2(300, 200);
183 code += indent + "ImVec2 canvas_size;\n";
184 code +=
185 indent +
186 "gui::LayoutHelpers::BeginCanvasPanel(\"canvas\", &canvas_size);\n";
187 code += indent + "// Custom drawing code here\n";
188 code += indent + "gui::LayoutHelpers::EndCanvasPanel();\n";
189 break;
190 }
191
193 auto* icon_prop =
194 const_cast<WidgetDefinition&>(widget).GetProperty("icon");
195 std::string icon = icon_prop ? icon_prop->string_value : ICON_MD_WINDOW;
196 code += indent + absl::StrFormat("gui::PanelHeader(\"%s\", \"%s\");\n",
197 label, icon);
198 break;
199 }
200
201 default:
202 code += indent + absl::StrFormat("// TODO: Yaze widget: %s\n",
203 GetYazeWidgetTypeName(yaze_type));
204 break;
205 }
206
207 return code;
208}
209
210std::vector<std::string> GetRequiredIncludes(YazeWidgetType type) {
211 std::vector<std::string> includes;
212
213 switch (type) {
221 includes.push_back("app/gui/widgets/themed_widgets.h");
222 break;
223
229 includes.push_back("app/gui/core/ui_helpers.h");
230 break;
231
236 includes.push_back("app/gui/core/layout_helpers.h");
237 break;
238
242 includes.push_back("app/gui/automation/widget_auto_register.h");
243 break;
244
245 default:
246 break;
247 }
248
249 return includes;
250}
251
252std::vector<WidgetProperty> GetYazeDefaultProperties(YazeWidgetType type) {
253 std::vector<WidgetProperty> props;
254
255 switch (type) {
260 WidgetProperty label;
261 label.name = "label";
263 label.string_value = "Button";
264 props.push_back(label);
265 break;
266 }
267
269 WidgetProperty label;
270 label.name = "label";
272 label.string_value = "Section";
273 props.push_back(label);
274
275 WidgetProperty icon;
276 icon.name = "icon";
279 props.push_back(icon);
280 break;
281 }
282
284 WidgetProperty columns;
285 columns.name = "columns";
287 columns.int_value = 2;
288 props.push_back(columns);
289 break;
290 }
291
293 WidgetProperty label;
294 label.name = "label";
296 label.string_value = "Property";
297 props.push_back(label);
298
299 WidgetProperty value;
300 value.name = "value";
302 value.string_value = "Value";
303 props.push_back(value);
304 break;
305 }
306
307 default:
308 break;
309 }
310
311 return props;
312}
313
314} // namespace layout_designer
315} // namespace editor
316} // namespace yaze
#define ICON_MD_TITLE
Definition icons.h:1990
#define ICON_MD_DRAW
Definition icons.h:625
#define ICON_MD_TABLE_CHART
Definition icons.h:1933
#define ICON_MD_LABEL
Definition icons.h:1053
#define ICON_MD_WIDGETS
Definition icons.h:2156
#define ICON_MD_SMART_BUTTON
Definition icons.h:1778
#define ICON_MD_WINDOW
Definition icons.h:2176
#define ICON_MD_PALETTE
Definition icons.h:1370
#define ICON_MD_RADIO_BUTTON_UNCHECKED
Definition icons.h:1551
#define ICON_MD_INPUT
Definition icons.h:995
const char * GetYazeWidgetTypeName(YazeWidgetType type)
Get human-readable name for yaze widget type.
std::string GenerateYazeWidgetCode(YazeWidgetType yaze_type, const WidgetDefinition &widget, int indent_level)
Generate code for yaze widget (uses yaze abstractions)
const char * GetYazeWidgetTypeIcon(YazeWidgetType type)
Get icon for yaze widget type.
std::vector< std::string > GetRequiredIncludes(YazeWidgetType type)
Check if yaze widget requires specific includes.
YazeWidgetType
Extended widget types using yaze GUI abstractions.
std::vector< WidgetProperty > GetYazeDefaultProperties(YazeWidgetType type)
Get default properties for yaze widget type.
Defines a widget instance in a panel layout.
Represents a configurable property of a widget.
enum yaze::editor::layout_designer::WidgetProperty::Type type