yaze
0.3.2
Link to the Past ROM Editor
Loading...
Searching...
No Matches
canvas_menu_builder.cc
Go to the documentation of this file.
1
#include "
canvas_menu_builder.h
"
2
3
namespace
yaze
{
4
namespace
gui {
5
6
CanvasMenuBuilder
&
CanvasMenuBuilder::AddItem
(
const
std::string& label,
7
std::function<
void
()> callback) {
8
CanvasMenuItem
item;
9
item.
label
= label;
10
item.
callback
= std::move(callback);
11
pending_items_
.push_back(item);
12
return
*
this
;
13
}
14
15
CanvasMenuBuilder
&
CanvasMenuBuilder::AddItem
(
const
std::string& label,
16
const
std::string& icon,
17
std::function<
void
()> callback) {
18
CanvasMenuItem
item;
19
item.
label
= label;
20
item.
icon
= icon;
21
item.
callback
= std::move(callback);
22
pending_items_
.push_back(item);
23
return
*
this
;
24
}
25
26
CanvasMenuBuilder
&
CanvasMenuBuilder::AddItem
(
const
std::string& label,
27
const
std::string& icon,
28
const
std::string& shortcut,
29
std::function<
void
()> callback) {
30
CanvasMenuItem
item;
31
item.
label
= label;
32
item.
icon
= icon;
33
item.
shortcut
= shortcut;
34
item.
callback
= std::move(callback);
35
pending_items_
.push_back(item);
36
return
*
this
;
37
}
38
39
CanvasMenuBuilder
&
CanvasMenuBuilder::AddPopupItem
(
40
const
std::string& label,
const
std::string& popup_id,
41
std::function<
void
()> render_callback) {
42
CanvasMenuItem
item =
43
CanvasMenuItem::WithPopup
(label, popup_id, render_callback);
44
pending_items_
.push_back(item);
45
return
*
this
;
46
}
47
48
CanvasMenuBuilder
&
CanvasMenuBuilder::AddPopupItem
(
49
const
std::string& label,
const
std::string& icon,
50
const
std::string& popup_id, std::function<
void
()> render_callback) {
51
CanvasMenuItem
item =
52
CanvasMenuItem::WithPopup
(label, popup_id, render_callback);
53
item.
icon
= icon;
54
pending_items_
.push_back(item);
55
return
*
this
;
56
}
57
58
CanvasMenuBuilder
&
CanvasMenuBuilder::AddConditionalItem
(
59
const
std::string& label, std::function<
void
()> callback,
60
std::function<
bool
()> condition) {
61
CanvasMenuItem
item =
CanvasMenuItem::Conditional
(label, callback, condition);
62
pending_items_
.push_back(item);
63
return
*
this
;
64
}
65
66
CanvasMenuBuilder
&
CanvasMenuBuilder::AddSubmenu
(
67
const
std::string& label,
const
std::vector<CanvasMenuItem>& subitems) {
68
CanvasMenuItem
item;
69
item.
label
= label;
70
item.
subitems
= subitems;
71
pending_items_
.push_back(item);
72
return
*
this
;
73
}
74
75
CanvasMenuBuilder
&
CanvasMenuBuilder::AddSeparator
() {
76
if
(!
pending_items_
.empty()) {
77
pending_items_
.back().separator_after =
true
;
78
}
79
return
*
this
;
80
}
81
82
CanvasMenuBuilder
&
CanvasMenuBuilder::BeginSection
(
83
const
std::string& title,
MenuSectionPriority
priority) {
84
// Flush any pending items to previous section
85
FlushPendingItems
();
86
87
// Create new section
88
CanvasMenuSection
section;
89
section.
title
= title;
90
section.
priority
= priority;
91
section.
separator_after
=
true
;
92
menu_
.
sections
.push_back(section);
93
94
// Point current_section_ to the newly added section
95
current_section_
= &
menu_
.
sections
.back();
96
97
return
*
this
;
98
}
99
100
CanvasMenuBuilder
&
CanvasMenuBuilder::EndSection
() {
101
FlushPendingItems
();
102
current_section_
=
nullptr
;
103
return
*
this
;
104
}
105
106
CanvasMenuDefinition
CanvasMenuBuilder::Build
() {
107
FlushPendingItems
();
108
return
menu_
;
109
}
110
111
CanvasMenuBuilder
&
CanvasMenuBuilder::Reset
() {
112
menu_
.
sections
.clear();
113
pending_items_
.clear();
114
current_section_
=
nullptr
;
115
return
*
this
;
116
}
117
118
void
CanvasMenuBuilder::FlushPendingItems
() {
119
if
(
pending_items_
.empty()) {
120
return
;
121
}
122
123
// If no section exists yet, create a default one
124
if
(
menu_
.
sections
.empty()) {
125
CanvasMenuSection
section;
126
section.
priority
=
MenuSectionPriority::kEditorSpecific
;
127
section.
separator_after
=
true
;
128
menu_
.
sections
.push_back(section);
129
current_section_
= &
menu_
.
sections
.back();
130
}
131
132
// Add pending items to current section
133
if
(
current_section_
) {
134
current_section_
->
items
.insert(
current_section_
->
items
.end(),
135
pending_items_
.begin(),
136
pending_items_
.end());
137
}
else
{
138
// Add to last section if current_section_ is null
139
menu_
.
sections
.back().items.insert(
menu_
.
sections
.back().items.end(),
140
pending_items_
.begin(),
141
pending_items_
.end());
142
}
143
144
pending_items_
.clear();
145
}
146
147
}
// namespace gui
148
}
// namespace yaze
canvas_menu_builder.h
yaze::gui::CanvasMenuBuilder
Builder pattern for constructing canvas menus fluently.
Definition
canvas_menu_builder.h:30
yaze::gui::CanvasMenuBuilder::AddSubmenu
CanvasMenuBuilder & AddSubmenu(const std::string &label, const std::vector< CanvasMenuItem > &subitems)
Add a submenu with nested items.
Definition
canvas_menu_builder.cc:66
yaze::gui::CanvasMenuBuilder::FlushPendingItems
void FlushPendingItems()
Definition
canvas_menu_builder.cc:118
yaze::gui::CanvasMenuBuilder::AddConditionalItem
CanvasMenuBuilder & AddConditionalItem(const std::string &label, std::function< void()> callback, std::function< bool()> condition)
Add a conditional menu item (enabled only when condition is true)
Definition
canvas_menu_builder.cc:58
yaze::gui::CanvasMenuBuilder::AddItem
CanvasMenuBuilder & AddItem(const std::string &label, std::function< void()> callback)
Add a simple menu item.
Definition
canvas_menu_builder.cc:6
yaze::gui::CanvasMenuBuilder::menu_
CanvasMenuDefinition menu_
Definition
canvas_menu_builder.h:144
yaze::gui::CanvasMenuBuilder::Reset
CanvasMenuBuilder & Reset()
Reset the builder to start building a new menu.
Definition
canvas_menu_builder.cc:111
yaze::gui::CanvasMenuBuilder::AddPopupItem
CanvasMenuBuilder & AddPopupItem(const std::string &label, const std::string &popup_id, std::function< void()> render_callback)
Add a menu item that opens a persistent popup.
Definition
canvas_menu_builder.cc:39
yaze::gui::CanvasMenuBuilder::pending_items_
std::vector< CanvasMenuItem > pending_items_
Definition
canvas_menu_builder.h:146
yaze::gui::CanvasMenuBuilder::Build
CanvasMenuDefinition Build()
Build the final menu definition.
Definition
canvas_menu_builder.cc:106
yaze::gui::CanvasMenuBuilder::BeginSection
CanvasMenuBuilder & BeginSection(const std::string &title="", MenuSectionPriority priority=MenuSectionPriority::kEditorSpecific)
Start a new section with optional title.
Definition
canvas_menu_builder.cc:82
yaze::gui::CanvasMenuBuilder::EndSection
CanvasMenuBuilder & EndSection()
End the current section.
Definition
canvas_menu_builder.cc:100
yaze::gui::CanvasMenuBuilder::AddSeparator
CanvasMenuBuilder & AddSeparator()
Add a separator to visually group items.
Definition
canvas_menu_builder.cc:75
yaze::gui::CanvasMenuBuilder::current_section_
CanvasMenuSection * current_section_
Definition
canvas_menu_builder.h:145
yaze::gui::MenuSectionPriority
MenuSectionPriority
Menu section priority for controlling rendering order.
Definition
canvas_menu.h:23
yaze::gui::MenuSectionPriority::kEditorSpecific
@ kEditorSpecific
yaze
Definition
application.cc:18
yaze::gui::CanvasMenuDefinition
Complete menu definition.
Definition
canvas_menu.h:193
yaze::gui::CanvasMenuDefinition::sections
std::vector< CanvasMenuSection > sections
Definition
canvas_menu.h:195
yaze::gui::CanvasMenuItem
Declarative menu item definition.
Definition
canvas_menu.h:64
yaze::gui::CanvasMenuItem::icon
std::string icon
Definition
canvas_menu.h:69
yaze::gui::CanvasMenuItem::subitems
std::vector< CanvasMenuItem > subitems
Definition
canvas_menu.h:91
yaze::gui::CanvasMenuItem::Conditional
static CanvasMenuItem Conditional(const std::string &lbl, std::function< void()> cb, std::function< bool()> condition)
Definition
canvas_menu.h:127
yaze::gui::CanvasMenuItem::callback
std::function< void()> callback
Definition
canvas_menu.h:75
yaze::gui::CanvasMenuItem::WithPopup
static CanvasMenuItem WithPopup(const std::string &lbl, const std::string &popup_id, std::function< void()> render_callback)
Definition
canvas_menu.h:138
yaze::gui::CanvasMenuItem::label
std::string label
Definition
canvas_menu.h:66
yaze::gui::CanvasMenuItem::shortcut
std::string shortcut
Definition
canvas_menu.h:72
yaze::gui::CanvasMenuSection
Menu section grouping related menu items.
Definition
canvas_menu.h:154
yaze::gui::CanvasMenuSection::title
std::string title
Definition
canvas_menu.h:156
yaze::gui::CanvasMenuSection::items
std::vector< CanvasMenuItem > items
Definition
canvas_menu.h:162
yaze::gui::CanvasMenuSection::separator_after
bool separator_after
Definition
canvas_menu.h:165
yaze::gui::CanvasMenuSection::priority
MenuSectionPriority priority
Definition
canvas_menu.h:168
src
app
gui
canvas
canvas_menu_builder.cc
Generated by
1.10.0