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_UI_MENU_BUILDER_H_
2
#define YAZE_APP_EDITOR_UI_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
85
void
Draw
();
86
90
void
Clear
();
91
92
private
:
93
struct
MenuItem
{
94
enum class
Type
{
95
kItem
,
96
kSubMenuBegin
,
97
kSubMenuEnd
,
98
kSeparator
,
99
kDisabled
100
};
101
102
Type
type
;
103
std::string
label
;
104
std::string
icon
;
105
std::string
shortcut
;
106
Callback
callback
;
107
EnabledCheck
enabled
;
108
EnabledCheck
checked
;
109
};
110
111
struct
Menu
{
112
std::string
label
;
113
std::string
icon
;
114
std::vector<MenuItem>
items
;
115
};
116
117
std::vector<Menu>
menus_
;
118
Menu
*
current_menu_
=
nullptr
;
119
120
// Track which submenus are actually open during drawing
121
mutable
std::vector<bool>
submenu_stack_
;
122
mutable
int
skip_depth_
= 0;
// Track nesting depth when skipping closed submenus
123
124
void
DrawMenuItem
(
const
MenuItem
& item);
125
};
126
127
}
// namespace editor
128
}
// namespace yaze
129
130
#endif
// YAZE_APP_EDITOR_UI_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:118
yaze::editor::MenuBuilder::Item
MenuBuilder & Item(const char *label, const char *icon, Callback callback, const char *shortcut=nullptr, EnabledCheck enabled=nullptr, EnabledCheck checked=nullptr)
Add a menu item.
Definition
menu_builder.cc:67
yaze::editor::MenuBuilder::Draw
void Draw()
Draw the menu bar (call in main menu bar)
Definition
menu_builder.cc:115
yaze::editor::MenuBuilder::Clear
void Clear()
Clear all menus.
Definition
menu_builder.cc:226
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:122
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:93
yaze::editor::MenuBuilder::MenuBuilder
MenuBuilder()=default
yaze::editor::MenuBuilder::EndMenu
MenuBuilder & EndMenu()
End the current menu/submenu.
Definition
menu_builder.cc:34
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:131
yaze::editor::MenuBuilder::menus_
std::vector< Menu > menus_
Definition
menu_builder.h:117
yaze::editor::MenuBuilder::DisabledItem
MenuBuilder & DisabledItem(const char *label, const char *icon=nullptr)
Add a disabled item (grayed out)
Definition
menu_builder.cc:102
yaze::editor::MenuBuilder::submenu_stack_
std::vector< bool > submenu_stack_
Definition
menu_builder.h:121
icons.h
yaze
Main namespace for the application.
Definition
controller.cc:20
yaze::editor::MenuBuilder::MenuItem
Definition
menu_builder.h:93
yaze::editor::MenuBuilder::MenuItem::callback
Callback callback
Definition
menu_builder.h:106
yaze::editor::MenuBuilder::MenuItem::shortcut
std::string shortcut
Definition
menu_builder.h:105
yaze::editor::MenuBuilder::MenuItem::type
Type type
Definition
menu_builder.h:102
yaze::editor::MenuBuilder::MenuItem::enabled
EnabledCheck enabled
Definition
menu_builder.h:107
yaze::editor::MenuBuilder::MenuItem::checked
EnabledCheck checked
Definition
menu_builder.h:108
yaze::editor::MenuBuilder::MenuItem::label
std::string label
Definition
menu_builder.h:103
yaze::editor::MenuBuilder::MenuItem::icon
std::string icon
Definition
menu_builder.h:104
yaze::editor::MenuBuilder::MenuItem::Type
Type
Definition
menu_builder.h:94
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:111
yaze::editor::MenuBuilder::Menu::icon
std::string icon
Definition
menu_builder.h:113
yaze::editor::MenuBuilder::Menu::items
std::vector< MenuItem > items
Definition
menu_builder.h:114
yaze::editor::MenuBuilder::Menu::label
std::string label
Definition
menu_builder.h:112
src
app
editor
ui
menu_builder.h
Generated by
1.9.8