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) {
12 case YazeWidgetType::ThemedButton: return "Themed Button";
13 case YazeWidgetType::PrimaryButton: return "Primary Button";
14 case YazeWidgetType::DangerButton: return "Danger Button";
15 case YazeWidgetType::ThemedIconButton: return "Themed Icon Button";
16 case YazeWidgetType::TransparentIconButton: return "Transparent Icon Button";
17 case YazeWidgetType::BeginField: return "Begin Field";
18 case YazeWidgetType::EndField: return "End Field";
19 case YazeWidgetType::PropertyTable: return "Property Table";
20 case YazeWidgetType::PropertyRow: return "Property Row";
21 case YazeWidgetType::SectionHeader: return "Section Header";
22 case YazeWidgetType::PaddedPanel: return "Padded Panel";
23 case YazeWidgetType::TableWithTheming: return "Themed Table";
24 case YazeWidgetType::CanvasPanel: return "Canvas Panel";
25 case YazeWidgetType::AutoInputField: return "Auto Input Field";
26 case YazeWidgetType::AutoButton: return "Auto Button";
27 case YazeWidgetType::AutoCheckbox: return "Auto Checkbox";
28 case YazeWidgetType::AutoInputText: return "Auto Input Text";
29 case YazeWidgetType::PaletteColorButton: return "Palette Color Button";
30 case YazeWidgetType::PanelHeader: return "Panel Header";
31 default: return "Unknown Yaze Widget";
32 }
33}
34
72
74 const WidgetDefinition& widget,
75 int indent_level) {
76 std::string indent(indent_level * 2, ' ');
77 std::string code;
78
79 auto* label_prop = const_cast<WidgetDefinition&>(widget).GetProperty("label");
80 std::string label = label_prop ? label_prop->string_value : "Widget";
81
82 switch (yaze_type) {
84 code += indent + absl::StrFormat("if (gui::ThemedButton(\"%s\")) {\n", label);
85 if (!widget.callback_name.empty()) {
86 code += indent + absl::StrFormat(" %s();\n", widget.callback_name);
87 }
88 code += indent + "}\n";
89 break;
90
92 code += indent + absl::StrFormat("if (gui::PrimaryButton(\"%s\")) {\n", label);
93 if (!widget.callback_name.empty()) {
94 code += indent + absl::StrFormat(" %s();\n", widget.callback_name);
95 }
96 code += indent + "}\n";
97 break;
98
100 code += indent + absl::StrFormat("if (gui::DangerButton(\"%s\")) {\n", label);
101 if (!widget.callback_name.empty()) {
102 code += indent + absl::StrFormat(" %s();\n", widget.callback_name);
103 }
104 code += indent + "}\n";
105 break;
106
108 auto* icon_prop = const_cast<WidgetDefinition&>(widget).GetProperty("icon");
109 std::string icon = icon_prop ? icon_prop->string_value : ICON_MD_LABEL;
110 code += indent + absl::StrFormat("gui::SectionHeader(\"%s\", \"%s\");\n",
111 icon, label);
112 break;
113 }
114
116 code += indent + "if (gui::BeginPropertyTable(\"props\")) {\n";
117 code += indent + " // Add property rows here\n";
118 code += indent + " gui::EndPropertyTable();\n";
119 code += indent + "}\n";
120 break;
121
123 auto* value_prop = const_cast<WidgetDefinition&>(widget).GetProperty("value");
124 std::string value = value_prop ? value_prop->string_value : "Value";
125 code += indent + absl::StrFormat("gui::PropertyRow(\"%s\", \"%s\");\n",
126 label, value);
127 break;
128 }
129
131 auto* columns_prop = const_cast<WidgetDefinition&>(widget).GetProperty("columns");
132 int columns = columns_prop ? columns_prop->int_value : 2;
133 code += indent + absl::StrFormat(
134 "if (gui::LayoutHelpers::BeginTableWithTheming(\"table\", %d)) {\n",
135 columns);
136 code += indent + " // Table contents\n";
137 code += indent + " gui::LayoutHelpers::EndTableWithTheming();\n";
138 code += indent + "}\n";
139 break;
140 }
141
143 code += indent + absl::StrFormat("if (gui::AutoButton(\"%s\")) {\n", label);
144 if (!widget.callback_name.empty()) {
145 code += indent + absl::StrFormat(" %s();\n", widget.callback_name);
146 }
147 code += indent + "}\n";
148 break;
149
151 auto* size_prop = const_cast<WidgetDefinition&>(widget).GetProperty("size");
152 ImVec2 size = size_prop ? size_prop->vec2_value : ImVec2(300, 200);
153 code += indent + "ImVec2 canvas_size;\n";
154 code += indent + "gui::LayoutHelpers::BeginCanvasPanel(\"canvas\", &canvas_size);\n";
155 code += indent + "// Custom drawing code here\n";
156 code += indent + "gui::LayoutHelpers::EndCanvasPanel();\n";
157 break;
158 }
159
161 auto* icon_prop = const_cast<WidgetDefinition&>(widget).GetProperty("icon");
162 std::string icon = icon_prop ? icon_prop->string_value : ICON_MD_WINDOW;
163 code += indent + absl::StrFormat("gui::PanelHeader(\"%s\", \"%s\");\n",
164 label, icon);
165 break;
166 }
167
168 default:
169 code += indent + absl::StrFormat("// TODO: Yaze widget: %s\n",
170 GetYazeWidgetTypeName(yaze_type));
171 break;
172 }
173
174 return code;
175}
176
177std::vector<std::string> GetRequiredIncludes(YazeWidgetType type) {
178 std::vector<std::string> includes;
179
180 switch (type) {
188 includes.push_back("app/gui/widgets/themed_widgets.h");
189 break;
190
196 includes.push_back("app/gui/core/ui_helpers.h");
197 break;
198
203 includes.push_back("app/gui/core/layout_helpers.h");
204 break;
205
209 includes.push_back("app/gui/automation/widget_auto_register.h");
210 break;
211
212 default:
213 break;
214 }
215
216 return includes;
217}
218
219std::vector<WidgetProperty> GetYazeDefaultProperties(YazeWidgetType type) {
220 std::vector<WidgetProperty> props;
221
222 switch (type) {
227 WidgetProperty label;
228 label.name = "label";
230 label.string_value = "Button";
231 props.push_back(label);
232 break;
233 }
234
236 WidgetProperty label;
237 label.name = "label";
239 label.string_value = "Section";
240 props.push_back(label);
241
242 WidgetProperty icon;
243 icon.name = "icon";
246 props.push_back(icon);
247 break;
248 }
249
251 WidgetProperty columns;
252 columns.name = "columns";
254 columns.int_value = 2;
255 props.push_back(columns);
256 break;
257 }
258
260 WidgetProperty label;
261 label.name = "label";
263 label.string_value = "Property";
264 props.push_back(label);
265
266 WidgetProperty value;
267 value.name = "value";
269 value.string_value = "Value";
270 props.push_back(value);
271 break;
272 }
273
274 default:
275 break;
276 }
277
278 return props;
279}
280
281} // namespace layout_designer
282} // namespace editor
283} // 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