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
95
void
Draw
();
96
100
void
Clear
();
101
102
private
:
103
struct
MenuItem
{
104
enum class
Type
{
105
kItem
,
106
kSubMenuBegin
,
107
kSubMenuEnd
,
108
kSeparator
,
109
kDisabled
110
};
111
112
Type
type
;
113
std::string
label
;
114
std::string
icon
;
115
std::string
shortcut
;
116
Callback
callback
;
117
EnabledCheck
enabled
;
118
EnabledCheck
checked
;
119
};
120
121
struct
Menu
{
122
std::string
label
;
123
std::string
icon
;
124
std::vector<MenuItem>
items
;
125
Callback
custom_draw
;
// For custom menus with dynamic content
126
bool
is_custom
=
false
;
127
};
128
129
std::vector<Menu>
menus_
;
130
Menu
*
current_menu_
=
nullptr
;
131
132
// Track which submenus are actually open during drawing
133
mutable
std::vector<bool>
submenu_stack_
;
134
mutable
int
skip_depth_
=
135
0;
// Track nesting depth when skipping closed submenus
136
137
void
DrawMenuItem
(
const
MenuItem
& item);
138
};
139
140
}
// namespace editor
141
}
// namespace yaze
142
143
#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:130
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:133
yaze::editor::MenuBuilder::Clear
void Clear()
Clear all menus.
Definition
menu_builder.cc:259
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:134
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:156
yaze::editor::MenuBuilder::menus_
std::vector< Menu > menus_
Definition
menu_builder.h:129
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:133
icons.h
yaze::editor::DungeonSelectionKind::Item
@ Item
yaze
Definition
patch_export_usage.cc:8
yaze::editor::MenuBuilder::MenuItem
Definition
menu_builder.h:103
yaze::editor::MenuBuilder::MenuItem::callback
Callback callback
Definition
menu_builder.h:116
yaze::editor::MenuBuilder::MenuItem::shortcut
std::string shortcut
Definition
menu_builder.h:115
yaze::editor::MenuBuilder::MenuItem::type
Type type
Definition
menu_builder.h:112
yaze::editor::MenuBuilder::MenuItem::enabled
EnabledCheck enabled
Definition
menu_builder.h:117
yaze::editor::MenuBuilder::MenuItem::checked
EnabledCheck checked
Definition
menu_builder.h:118
yaze::editor::MenuBuilder::MenuItem::label
std::string label
Definition
menu_builder.h:113
yaze::editor::MenuBuilder::MenuItem::icon
std::string icon
Definition
menu_builder.h:114
yaze::editor::MenuBuilder::MenuItem::Type
Type
Definition
menu_builder.h:104
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::kSeparator
@ kSeparator
yaze::editor::MenuBuilder::Menu
Definition
menu_builder.h:121
yaze::editor::MenuBuilder::Menu::icon
std::string icon
Definition
menu_builder.h:123
yaze::editor::MenuBuilder::Menu::items
std::vector< MenuItem > items
Definition
menu_builder.h:124
yaze::editor::MenuBuilder::Menu::label
std::string label
Definition
menu_builder.h:122
yaze::editor::MenuBuilder::Menu::custom_draw
Callback custom_draw
Definition
menu_builder.h:125
yaze::editor::MenuBuilder::Menu::is_custom
bool is_custom
Definition
menu_builder.h:126
src
app
editor
menu
menu_builder.h
Generated by
1.10.0