yaze
0.3.2
Link to the Past ROM Editor
Loading...
Searching...
No Matches
menu_builder.h
Go to the documentation of this file.
1
#ifndef YAZE_APP_EDITOR_MENU_MENU_BUILDER_H_
2
#define YAZE_APP_EDITOR_MENU_MENU_BUILDER_H_
3
4
#include <functional>
5
#include <string>
6
#include <vector>
7
8
// Must define before including imgui.h
9
#ifndef IMGUI_DEFINE_MATH_OPERATORS
10
#define IMGUI_DEFINE_MATH_OPERATORS
11
#endif
12
13
#include "absl/container/flat_hash_map.h"
14
#include "absl/strings/string_view.h"
15
#include "
app/gui/core/icons.h
"
16
#include "imgui/imgui.h"
17
18
namespace
yaze
{
19
namespace
editor {
20
34
class
MenuBuilder
{
35
friend
class
ProjectUiTestPeer
;
36
37
public
:
38
using
Callback
= std::function<void()>;
39
using
EnabledCheck
= std::function<bool()>;
40
41
MenuBuilder
() =
default
;
42
46
MenuBuilder
&
BeginMenu
(
const
char
* label,
const
char
* icon =
nullptr
);
47
51
MenuBuilder
&
BeginSubMenu
(
const
char
* label,
const
char
* icon =
nullptr
,
52
EnabledCheck
enabled =
nullptr
);
53
57
MenuBuilder
&
EndMenu
();
58
62
MenuBuilder
&
Item
(
const
char
* label,
const
char
* icon,
Callback
callback,
63
const
char
* shortcut =
nullptr
,
64
EnabledCheck
enabled =
nullptr
,
65
EnabledCheck
checked =
nullptr
);
66
70
MenuBuilder
&
Item
(
const
char
* label,
Callback
callback,
71
const
char
* shortcut =
nullptr
,
72
EnabledCheck
enabled =
nullptr
);
73
77
MenuBuilder
&
Separator
();
78
82
MenuBuilder
&
DisabledItem
(
const
char
* label,
const
char
* icon =
nullptr
);
83
90
MenuBuilder
&
CustomMenu
(
const
char
* label,
Callback
draw_callback);
91
98
MenuBuilder
&
CustomItems
(
Callback
draw_callback);
99
103
void
Draw
();
104
108
void
Clear
();
109
110
private
:
111
struct
MenuItem
{
112
enum class
Type
{
113
kItem
,
114
kSubMenuBegin
,
115
kSubMenuEnd
,
116
kSeparator
,
117
kDisabled
,
118
kCustom
119
};
120
121
Type
type
;
122
std::string
label
;
123
std::string
icon
;
124
std::string
shortcut
;
125
Callback
callback
;
126
EnabledCheck
enabled
;
127
EnabledCheck
checked
;
128
};
129
130
struct
Menu
{
131
std::string
label
;
132
std::string
icon
;
133
std::vector<MenuItem>
items
;
134
Callback
custom_draw
;
// For custom menus with dynamic content
135
bool
is_custom
=
false
;
136
};
137
138
std::vector<Menu>
menus_
;
139
Menu
*
current_menu_
=
nullptr
;
140
141
// Track which submenus are actually open during drawing
142
mutable
std::vector<bool>
submenu_stack_
;
143
mutable
int
skip_depth_
=
144
0;
// Track nesting depth when skipping closed submenus
145
146
void
DrawMenuItem
(
const
MenuItem
& item);
147
};
148
149
}
// namespace editor
150
}
// namespace yaze
151
152
#endif
// YAZE_APP_EDITOR_MENU_MENU_BUILDER_H_
yaze::editor::MenuBuilder
Fluent interface for building ImGui menus with icons.
Definition
menu_builder.h:34
yaze::editor::MenuBuilder::current_menu_
Menu * current_menu_
Definition
menu_builder.h:139
yaze::editor::MenuBuilder::CustomItems
MenuBuilder & CustomItems(Callback draw_callback)
Add items drawn by a callback inside the current menu.
Definition
menu_builder.cc:133
yaze::editor::MenuBuilder::CustomMenu
MenuBuilder & CustomMenu(const char *label, Callback draw_callback)
Add a custom menu with a callback for drawing dynamic content.
Definition
menu_builder.cc:122
yaze::editor::MenuBuilder::ProjectUiTestPeer
friend class ProjectUiTestPeer
Definition
menu_builder.h:35
yaze::editor::MenuBuilder::Draw
void Draw()
Draw the menu bar (call in main menu bar)
Definition
menu_builder.cc:144
yaze::editor::MenuBuilder::Clear
void Clear()
Clear all menus.
Definition
menu_builder.cc:276
yaze::editor::MenuBuilder::EnabledCheck
std::function< bool()> EnabledCheck
Definition
menu_builder.h:39
yaze::editor::MenuBuilder::skip_depth_
int skip_depth_
Definition
menu_builder.h:143
yaze::editor::MenuBuilder::BeginMenu
MenuBuilder & BeginMenu(const char *label, const char *icon=nullptr)
Begin a top-level menu.
Definition
menu_builder.cc:10
yaze::editor::MenuBuilder::Separator
MenuBuilder & Separator()
Add a separator.
Definition
menu_builder.cc:98
yaze::editor::MenuBuilder::MenuBuilder
MenuBuilder()=default
yaze::editor::MenuBuilder::EndMenu
MenuBuilder & EndMenu()
End the current menu/submenu.
Definition
menu_builder.cc:37
yaze::editor::MenuBuilder::BeginSubMenu
MenuBuilder & BeginSubMenu(const char *label, const char *icon=nullptr, EnabledCheck enabled=nullptr)
Begin a submenu.
Definition
menu_builder.cc:21
yaze::editor::MenuBuilder::Callback
std::function< void()> Callback
Definition
menu_builder.h:38
yaze::editor::MenuBuilder::DrawMenuItem
void DrawMenuItem(const MenuItem &item)
Definition
menu_builder.cc:167
yaze::editor::MenuBuilder::menus_
std::vector< Menu > menus_
Definition
menu_builder.h:138
yaze::editor::MenuBuilder::DisabledItem
MenuBuilder & DisabledItem(const char *label, const char *icon=nullptr)
Add a disabled item (grayed out)
Definition
menu_builder.cc:108
yaze::editor::MenuBuilder::submenu_stack_
std::vector< bool > submenu_stack_
Definition
menu_builder.h:142
icons.h
yaze::editor::DungeonSelectionKind::Item
@ Item
yaze
Definition
patch_export_usage.cc:8
yaze::editor::MenuBuilder::MenuItem
Definition
menu_builder.h:111
yaze::editor::MenuBuilder::MenuItem::callback
Callback callback
Definition
menu_builder.h:125
yaze::editor::MenuBuilder::MenuItem::shortcut
std::string shortcut
Definition
menu_builder.h:124
yaze::editor::MenuBuilder::MenuItem::type
Type type
Definition
menu_builder.h:121
yaze::editor::MenuBuilder::MenuItem::enabled
EnabledCheck enabled
Definition
menu_builder.h:126
yaze::editor::MenuBuilder::MenuItem::checked
EnabledCheck checked
Definition
menu_builder.h:127
yaze::editor::MenuBuilder::MenuItem::label
std::string label
Definition
menu_builder.h:122
yaze::editor::MenuBuilder::MenuItem::icon
std::string icon
Definition
menu_builder.h:123
yaze::editor::MenuBuilder::MenuItem::Type
Type
Definition
menu_builder.h:112
yaze::editor::MenuBuilder::MenuItem::Type::kSubMenuEnd
@ kSubMenuEnd
yaze::editor::MenuBuilder::MenuItem::Type::kItem
@ kItem
yaze::editor::MenuBuilder::MenuItem::Type::kDisabled
@ kDisabled
yaze::editor::MenuBuilder::MenuItem::Type::kSubMenuBegin
@ kSubMenuBegin
yaze::editor::MenuBuilder::MenuItem::Type::kCustom
@ kCustom
yaze::editor::MenuBuilder::MenuItem::Type::kSeparator
@ kSeparator
yaze::editor::MenuBuilder::Menu
Definition
menu_builder.h:130
yaze::editor::MenuBuilder::Menu::icon
std::string icon
Definition
menu_builder.h:132
yaze::editor::MenuBuilder::Menu::items
std::vector< MenuItem > items
Definition
menu_builder.h:133
yaze::editor::MenuBuilder::Menu::label
std::string label
Definition
menu_builder.h:131
yaze::editor::MenuBuilder::Menu::custom_draw
Callback custom_draw
Definition
menu_builder.h:134
yaze::editor::MenuBuilder::Menu::is_custom
bool is_custom
Definition
menu_builder.h:135
src
app
editor
menu
menu_builder.h
Generated by
1.10.0