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 =
CanvasMenuItem::WithPopup
(label, popup_id, render_callback);
43
pending_items_
.push_back(item);
44
return
*
this
;
45
}
46
47
CanvasMenuBuilder
&
CanvasMenuBuilder::AddPopupItem
(
48
const
std::string& label,
const
std::string& icon,
49
const
std::string& popup_id, std::function<
void
()> render_callback) {
50
CanvasMenuItem
item =
CanvasMenuItem::WithPopup
(label, popup_id, render_callback);
51
item.
icon
= icon;
52
pending_items_
.push_back(item);
53
return
*
this
;
54
}
55
56
CanvasMenuBuilder
&
CanvasMenuBuilder::AddConditionalItem
(
57
const
std::string& label, std::function<
void
()> callback,
58
std::function<
bool
()> condition) {
59
CanvasMenuItem
item =
CanvasMenuItem::Conditional
(label, callback, condition);
60
pending_items_
.push_back(item);
61
return
*
this
;
62
}
63
64
CanvasMenuBuilder
&
CanvasMenuBuilder::AddSubmenu
(
65
const
std::string& label,
const
std::vector<CanvasMenuItem>& subitems) {
66
CanvasMenuItem
item;
67
item.
label
= label;
68
item.
subitems
= subitems;
69
pending_items_
.push_back(item);
70
return
*
this
;
71
}
72
73
CanvasMenuBuilder
&
CanvasMenuBuilder::AddSeparator
() {
74
if
(!
pending_items_
.empty()) {
75
pending_items_
.back().separator_after =
true
;
76
}
77
return
*
this
;
78
}
79
80
CanvasMenuBuilder
&
CanvasMenuBuilder::BeginSection
(
81
const
std::string& title,
MenuSectionPriority
priority) {
82
// Flush any pending items to previous section
83
FlushPendingItems
();
84
85
// Create new section
86
CanvasMenuSection
section;
87
section.
title
= title;
88
section.
priority
= priority;
89
section.
separator_after
=
true
;
90
menu_
.
sections
.push_back(section);
91
92
// Point current_section_ to the newly added section
93
current_section_
= &
menu_
.
sections
.back();
94
95
return
*
this
;
96
}
97
98
CanvasMenuBuilder
&
CanvasMenuBuilder::EndSection
() {
99
FlushPendingItems
();
100
current_section_
=
nullptr
;
101
return
*
this
;
102
}
103
104
CanvasMenuDefinition
CanvasMenuBuilder::Build
() {
105
FlushPendingItems
();
106
return
menu_
;
107
}
108
109
CanvasMenuBuilder
&
CanvasMenuBuilder::Reset
() {
110
menu_
.
sections
.clear();
111
pending_items_
.clear();
112
current_section_
=
nullptr
;
113
return
*
this
;
114
}
115
116
void
CanvasMenuBuilder::FlushPendingItems
() {
117
if
(
pending_items_
.empty()) {
118
return
;
119
}
120
121
// If no section exists yet, create a default one
122
if
(
menu_
.
sections
.empty()) {
123
CanvasMenuSection
section;
124
section.
priority
=
MenuSectionPriority::kEditorSpecific
;
125
section.
separator_after
=
true
;
126
menu_
.
sections
.push_back(section);
127
current_section_
= &
menu_
.
sections
.back();
128
}
129
130
// Add pending items to current section
131
if
(
current_section_
) {
132
current_section_
->
items
.insert(
current_section_
->
items
.end(),
133
pending_items_
.begin(),
pending_items_
.end());
134
}
else
{
135
// Add to last section if current_section_ is null
136
menu_
.
sections
.back().items.insert(
menu_
.
sections
.back().items.end(),
137
pending_items_
.begin(),
pending_items_
.end());
138
}
139
140
pending_items_
.clear();
141
}
142
143
}
// namespace gui
144
}
// namespace yaze
145
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:64
yaze::gui::CanvasMenuBuilder::FlushPendingItems
void FlushPendingItems()
Definition
canvas_menu_builder.cc:116
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:56
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:146
yaze::gui::CanvasMenuBuilder::Reset
CanvasMenuBuilder & Reset()
Reset the builder to start building a new menu.
Definition
canvas_menu_builder.cc:109
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:148
yaze::gui::CanvasMenuBuilder::Build
CanvasMenuDefinition Build()
Build the final menu definition.
Definition
canvas_menu_builder.cc:104
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:80
yaze::gui::CanvasMenuBuilder::EndSection
CanvasMenuBuilder & EndSection()
End the current section.
Definition
canvas_menu_builder.cc:98
yaze::gui::CanvasMenuBuilder::AddSeparator
CanvasMenuBuilder & AddSeparator()
Add a separator to visually group items.
Definition
canvas_menu_builder.cc:73
yaze::gui::CanvasMenuBuilder::current_section_
CanvasMenuSection * current_section_
Definition
canvas_menu_builder.h:147
yaze::gui::MenuSectionPriority
MenuSectionPriority
Menu section priority for controlling rendering order.
Definition
canvas_menu.h:23
yaze::gui::MenuSectionPriority::kEditorSpecific
@ kEditorSpecific
yaze
Main namespace for the application.
Definition
controller.cc:20
yaze::gui::CanvasMenuDefinition
Complete menu definition.
Definition
canvas_menu.h:184
yaze::gui::CanvasMenuDefinition::sections
std::vector< CanvasMenuSection > sections
Definition
canvas_menu.h:186
yaze::gui::CanvasMenuItem
Declarative menu item definition.
Definition
canvas_menu.h:63
yaze::gui::CanvasMenuItem::icon
std::string icon
Definition
canvas_menu.h:68
yaze::gui::CanvasMenuItem::subitems
std::vector< CanvasMenuItem > subitems
Definition
canvas_menu.h:86
yaze::gui::CanvasMenuItem::Conditional
static CanvasMenuItem Conditional(const std::string &lbl, std::function< void()> cb, std::function< bool()> condition)
Definition
canvas_menu.h:120
yaze::gui::CanvasMenuItem::callback
std::function< void()> callback
Definition
canvas_menu.h:74
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:131
yaze::gui::CanvasMenuItem::label
std::string label
Definition
canvas_menu.h:65
yaze::gui::CanvasMenuItem::shortcut
std::string shortcut
Definition
canvas_menu.h:71
yaze::gui::CanvasMenuSection
Menu section grouping related menu items.
Definition
canvas_menu.h:147
yaze::gui::CanvasMenuSection::title
std::string title
Definition
canvas_menu.h:149
yaze::gui::CanvasMenuSection::items
std::vector< CanvasMenuItem > items
Definition
canvas_menu.h:155
yaze::gui::CanvasMenuSection::separator_after
bool separator_after
Definition
canvas_menu.h:158
yaze::gui::CanvasMenuSection::priority
MenuSectionPriority priority
Definition
canvas_menu.h:161
src
app
gui
canvas
canvas_menu_builder.cc
Generated by
1.9.8