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
public
:
36
using
Callback
= std::function<void()>;
37
using
EnabledCheck
= std::function<bool()>;
38
39
MenuBuilder
() =
default
;
40
44
MenuBuilder
&
BeginMenu
(
const
char
* label,
const
char
* icon =
nullptr
);
45
49
MenuBuilder
&
BeginSubMenu
(
const
char
* label,
const
char
* icon =
nullptr
,
50
EnabledCheck
enabled =
nullptr
);
51
55
MenuBuilder
&
EndMenu
();
56
60
MenuBuilder
&
Item
(
const
char
* label,
const
char
* icon,
Callback
callback,
61
const
char
* shortcut =
nullptr
,
62
EnabledCheck
enabled =
nullptr
,
63
EnabledCheck
checked =
nullptr
);
64
68
MenuBuilder
&
Item
(
const
char
* label,
Callback
callback,
69
const
char
* shortcut =
nullptr
,
70
EnabledCheck
enabled =
nullptr
);
71
75
MenuBuilder
&
Separator
();
76
80
MenuBuilder
&
DisabledItem
(
const
char
* label,
const
char
* icon =
nullptr
);
81
88
MenuBuilder
&
CustomMenu
(
const
char
* label,
Callback
draw_callback);
89
93
void
Draw
();
94
98
void
Clear
();
99
100
private
:
101
struct
MenuItem
{
102
enum class
Type
{
103
kItem
,
104
kSubMenuBegin
,
105
kSubMenuEnd
,
106
kSeparator
,
107
kDisabled
108
};
109
110
Type
type
;
111
std::string
label
;
112
std::string
icon
;
113
std::string
shortcut
;
114
Callback
callback
;
115
EnabledCheck
enabled
;
116
EnabledCheck
checked
;
117
};
118
119
struct
Menu
{
120
std::string
label
;
121
std::string
icon
;
122
std::vector<MenuItem>
items
;
123
Callback
custom_draw
;
// For custom menus with dynamic content
124
bool
is_custom
=
false
;
125
};
126
127
std::vector<Menu>
menus_
;
128
Menu
*
current_menu_
=
nullptr
;
129
130
// Track which submenus are actually open during drawing
131
mutable
std::vector<bool>
submenu_stack_
;
132
mutable
int
skip_depth_
=
133
0;
// Track nesting depth when skipping closed submenus
134
135
void
DrawMenuItem
(
const
MenuItem
& item);
136
};
137
138
}
// namespace editor
139
}
// namespace yaze
140
141
#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:128
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:120
yaze::editor::MenuBuilder::Draw
void Draw()
Draw the menu bar (call in main menu bar)
Definition
menu_builder.cc:130
yaze::editor::MenuBuilder::Clear
void Clear()
Clear all menus.
Definition
menu_builder.cc:251
yaze::editor::MenuBuilder::EnabledCheck
std::function< bool()> EnabledCheck
Definition
menu_builder.h:37
yaze::editor::MenuBuilder::skip_depth_
int skip_depth_
Definition
menu_builder.h:132
yaze::editor::MenuBuilder::BeginMenu
MenuBuilder & BeginMenu(const char *label, const char *icon=nullptr)
Begin a top-level menu.
Definition
menu_builder.cc:8
yaze::editor::MenuBuilder::Separator
MenuBuilder & Separator()
Add a separator.
Definition
menu_builder.cc:96
yaze::editor::MenuBuilder::MenuBuilder
MenuBuilder()=default
yaze::editor::MenuBuilder::EndMenu
MenuBuilder & EndMenu()
End the current menu/submenu.
Definition
menu_builder.cc:35
yaze::editor::MenuBuilder::BeginSubMenu
MenuBuilder & BeginSubMenu(const char *label, const char *icon=nullptr, EnabledCheck enabled=nullptr)
Begin a submenu.
Definition
menu_builder.cc:19
yaze::editor::MenuBuilder::Callback
std::function< void()> Callback
Definition
menu_builder.h:36
yaze::editor::MenuBuilder::DrawMenuItem
void DrawMenuItem(const MenuItem &item)
Definition
menu_builder.cc:157
yaze::editor::MenuBuilder::menus_
std::vector< Menu > menus_
Definition
menu_builder.h:127
yaze::editor::MenuBuilder::DisabledItem
MenuBuilder & DisabledItem(const char *label, const char *icon=nullptr)
Add a disabled item (grayed out)
Definition
menu_builder.cc:106
yaze::editor::MenuBuilder::submenu_stack_
std::vector< bool > submenu_stack_
Definition
menu_builder.h:131
icons.h
yaze::editor::EntityType::Item
@ Item
yaze
Definition
patch_export_usage.cc:8
yaze::editor::MenuBuilder::MenuItem
Definition
menu_builder.h:101
yaze::editor::MenuBuilder::MenuItem::callback
Callback callback
Definition
menu_builder.h:114
yaze::editor::MenuBuilder::MenuItem::shortcut
std::string shortcut
Definition
menu_builder.h:113
yaze::editor::MenuBuilder::MenuItem::type
Type type
Definition
menu_builder.h:110
yaze::editor::MenuBuilder::MenuItem::enabled
EnabledCheck enabled
Definition
menu_builder.h:115
yaze::editor::MenuBuilder::MenuItem::checked
EnabledCheck checked
Definition
menu_builder.h:116
yaze::editor::MenuBuilder::MenuItem::label
std::string label
Definition
menu_builder.h:111
yaze::editor::MenuBuilder::MenuItem::icon
std::string icon
Definition
menu_builder.h:112
yaze::editor::MenuBuilder::MenuItem::Type
Type
Definition
menu_builder.h:102
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:119
yaze::editor::MenuBuilder::Menu::icon
std::string icon
Definition
menu_builder.h:121
yaze::editor::MenuBuilder::Menu::items
std::vector< MenuItem > items
Definition
menu_builder.h:122
yaze::editor::MenuBuilder::Menu::label
std::string label
Definition
menu_builder.h:120
yaze::editor::MenuBuilder::Menu::custom_draw
Callback custom_draw
Definition
menu_builder.h:123
yaze::editor::MenuBuilder::Menu::is_custom
bool is_custom
Definition
menu_builder.h:124
src
app
editor
menu
menu_builder.h
Generated by
1.10.0