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 "
app/gui/icons.h
"
14
#include "imgui/imgui.h"
15
16
namespace
yaze
{
17
namespace
editor {
18
32
class
MenuBuilder
{
33
public
:
34
using
Callback
= std::function<void()>;
35
using
EnabledCheck
= std::function<bool()>;
36
37
MenuBuilder
() =
default
;
38
42
MenuBuilder
&
BeginMenu
(
const
char
* label,
const
char
* icon =
nullptr
);
43
47
MenuBuilder
&
BeginSubMenu
(
const
char
* label,
const
char
* icon =
nullptr
,
48
EnabledCheck
enabled =
nullptr
);
49
53
MenuBuilder
&
EndMenu
();
54
58
MenuBuilder
&
Item
(
const
char
* label,
const
char
* icon,
Callback
callback,
59
const
char
* shortcut =
nullptr
,
60
EnabledCheck
enabled =
nullptr
,
61
EnabledCheck
checked =
nullptr
);
62
66
MenuBuilder
&
Item
(
const
char
* label,
Callback
callback,
67
const
char
* shortcut =
nullptr
,
68
EnabledCheck
enabled =
nullptr
);
69
73
MenuBuilder
&
Separator
();
74
78
MenuBuilder
&
DisabledItem
(
const
char
* label,
const
char
* icon =
nullptr
);
79
83
void
Draw
();
84
88
void
Clear
();
89
90
private
:
91
struct
MenuItem
{
92
enum class
Type
{
93
kItem
,
94
kSubMenuBegin
,
95
kSubMenuEnd
,
96
kSeparator
,
97
kDisabled
98
};
99
100
Type
type
;
101
std::string
label
;
102
std::string
icon
;
103
std::string
shortcut
;
104
Callback
callback
;
105
EnabledCheck
enabled
;
106
EnabledCheck
checked
;
107
};
108
109
struct
Menu
{
110
std::string
label
;
111
std::string
icon
;
112
std::vector<MenuItem>
items
;
113
};
114
115
std::vector<Menu>
menus_
;
116
Menu
*
current_menu_
=
nullptr
;
117
118
// Track which submenus are actually open during drawing
119
mutable
std::vector<bool>
submenu_stack_
;
120
mutable
int
skip_depth_
= 0;
// Track nesting depth when skipping closed submenus
121
122
void
DrawMenuItem
(
const
MenuItem
& item);
123
};
124
125
}
// namespace editor
126
}
// namespace yaze
127
128
#endif
// YAZE_APP_EDITOR_UI_MENU_BUILDER_H_
yaze::editor::MenuBuilder
Fluent interface for building ImGui menus with icons.
Definition
menu_builder.h:32
yaze::editor::MenuBuilder::current_menu_
Menu * current_menu_
Definition
menu_builder.h:116
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:35
yaze::editor::MenuBuilder::skip_depth_
int skip_depth_
Definition
menu_builder.h:120
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:34
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:115
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:119
icons.h
yaze
Main namespace for the application.
Definition
asar_wrapper.cc:14
yaze::editor::MenuBuilder::MenuItem
Definition
menu_builder.h:91
yaze::editor::MenuBuilder::MenuItem::callback
Callback callback
Definition
menu_builder.h:104
yaze::editor::MenuBuilder::MenuItem::shortcut
std::string shortcut
Definition
menu_builder.h:103
yaze::editor::MenuBuilder::MenuItem::type
Type type
Definition
menu_builder.h:100
yaze::editor::MenuBuilder::MenuItem::enabled
EnabledCheck enabled
Definition
menu_builder.h:105
yaze::editor::MenuBuilder::MenuItem::checked
EnabledCheck checked
Definition
menu_builder.h:106
yaze::editor::MenuBuilder::MenuItem::label
std::string label
Definition
menu_builder.h:101
yaze::editor::MenuBuilder::MenuItem::icon
std::string icon
Definition
menu_builder.h:102
yaze::editor::MenuBuilder::MenuItem::Type
Type
Definition
menu_builder.h:92
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:109
yaze::editor::MenuBuilder::Menu::icon
std::string icon
Definition
menu_builder.h:111
yaze::editor::MenuBuilder::Menu::items
std::vector< MenuItem > items
Definition
menu_builder.h:112
yaze::editor::MenuBuilder::Menu::label
std::string label
Definition
menu_builder.h:110
src
app
editor
ui
menu_builder.h
Generated by
1.9.8