Fluent interface for building ImGui menus with icons. More...
#include <menu_builder.h>
Classes | |
struct | Menu |
struct | MenuItem |
Public Types | |
using | Callback = std::function< void()> |
using | EnabledCheck = std::function< bool()> |
Public Member Functions | |
MenuBuilder ()=default | |
MenuBuilder & | BeginMenu (const char *label, const char *icon=nullptr) |
Begin a top-level menu. | |
MenuBuilder & | BeginSubMenu (const char *label, const char *icon=nullptr, EnabledCheck enabled=nullptr) |
Begin a submenu. | |
MenuBuilder & | EndMenu () |
End the current menu/submenu. | |
MenuBuilder & | Item (const char *label, const char *icon, Callback callback, const char *shortcut=nullptr, EnabledCheck enabled=nullptr, EnabledCheck checked=nullptr) |
Add a menu item. | |
MenuBuilder & | Item (const char *label, Callback callback, const char *shortcut=nullptr, EnabledCheck enabled=nullptr) |
Add a menu item without icon (convenience) | |
MenuBuilder & | Separator () |
Add a separator. | |
MenuBuilder & | DisabledItem (const char *label, const char *icon=nullptr) |
Add a disabled item (grayed out) | |
void | Draw () |
Draw the menu bar (call in main menu bar) | |
void | Clear () |
Clear all menus. | |
Private Member Functions | |
void | DrawMenuItem (const MenuItem &item) |
Private Attributes | |
std::vector< Menu > | menus_ |
Menu * | current_menu_ = nullptr |
std::vector< bool > | submenu_stack_ |
int | skip_depth_ = 0 |
Fluent interface for building ImGui menus with icons.
Provides a cleaner, more maintainable way to construct menus:
MenuBuilder menu; menu.BeginMenu("File", ICON_MD_FOLDER) .Item("Open", ICON_MD_FILE_OPEN, []() { OpenFile(); }) .Separator() .Item("Quit", ICON_MD_EXIT_TO_APP, []() { Quit(); }) .EndMenu();
Definition at line 32 of file menu_builder.h.
using yaze::editor::MenuBuilder::Callback = std::function<void()> |
Definition at line 34 of file menu_builder.h.
using yaze::editor::MenuBuilder::EnabledCheck = std::function<bool()> |
Definition at line 35 of file menu_builder.h.
|
default |
MenuBuilder & yaze::editor::MenuBuilder::BeginMenu | ( | const char * | label, |
const char * | icon = nullptr |
||
) |
Begin a top-level menu.
Definition at line 8 of file menu_builder.cc.
References current_menu_, yaze::editor::MenuBuilder::Menu::icon, yaze::editor::MenuBuilder::Menu::label, and menus_.
Referenced by yaze::editor::EditorManager::BuildModernMenu(), and MenuBuilder().
MenuBuilder & yaze::editor::MenuBuilder::BeginSubMenu | ( | const char * | label, |
const char * | icon = nullptr , |
||
EnabledCheck | enabled = nullptr |
||
) |
Begin a submenu.
Definition at line 19 of file menu_builder.cc.
References current_menu_, yaze::editor::MenuBuilder::MenuItem::enabled, yaze::editor::MenuBuilder::MenuItem::icon, yaze::editor::MenuBuilder::Menu::items, yaze::editor::MenuBuilder::MenuItem::kSubMenuBegin, yaze::editor::MenuBuilder::MenuItem::label, and yaze::editor::MenuBuilder::MenuItem::type.
Referenced by yaze::editor::EditorManager::BuildModernMenu().
MenuBuilder & yaze::editor::MenuBuilder::EndMenu | ( | ) |
End the current menu/submenu.
Definition at line 34 of file menu_builder.cc.
References current_menu_, yaze::editor::MenuBuilder::Menu::items, yaze::editor::MenuBuilder::MenuItem::kSubMenuBegin, yaze::editor::MenuBuilder::MenuItem::kSubMenuEnd, and yaze::editor::MenuBuilder::MenuItem::type.
MenuBuilder & yaze::editor::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 at line 67 of file menu_builder.cc.
References yaze::editor::MenuBuilder::MenuItem::callback, yaze::editor::MenuBuilder::MenuItem::checked, current_menu_, yaze::editor::MenuBuilder::MenuItem::enabled, yaze::editor::MenuBuilder::MenuItem::icon, yaze::editor::MenuBuilder::Menu::items, yaze::editor::MenuBuilder::MenuItem::kItem, yaze::editor::MenuBuilder::MenuItem::label, yaze::editor::MenuBuilder::MenuItem::shortcut, and yaze::editor::MenuBuilder::MenuItem::type.
Referenced by yaze::editor::EditorManager::BuildModernMenu(), and Item().
MenuBuilder & yaze::editor::MenuBuilder::Item | ( | const char * | label, |
Callback | callback, | ||
const char * | shortcut = nullptr , |
||
EnabledCheck | enabled = nullptr |
||
) |
Add a menu item without icon (convenience)
Definition at line 88 of file menu_builder.cc.
References Item().
MenuBuilder & yaze::editor::MenuBuilder::Separator | ( | ) |
Add a separator.
Definition at line 93 of file menu_builder.cc.
References current_menu_, yaze::editor::MenuBuilder::Menu::items, yaze::editor::MenuBuilder::MenuItem::kSeparator, and yaze::editor::MenuBuilder::MenuItem::type.
Referenced by yaze::editor::EditorManager::BuildModernMenu().
MenuBuilder & yaze::editor::MenuBuilder::DisabledItem | ( | const char * | label, |
const char * | icon = nullptr |
||
) |
Add a disabled item (grayed out)
Definition at line 102 of file menu_builder.cc.
References current_menu_, yaze::editor::MenuBuilder::MenuItem::icon, yaze::editor::MenuBuilder::Menu::items, yaze::editor::MenuBuilder::MenuItem::kDisabled, yaze::editor::MenuBuilder::MenuItem::label, and yaze::editor::MenuBuilder::MenuItem::type.
void yaze::editor::MenuBuilder::Draw | ( | ) |
Draw the menu bar (call in main menu bar)
Definition at line 115 of file menu_builder.cc.
References DrawMenuItem(), menus_, skip_depth_, and submenu_stack_.
Referenced by yaze::editor::EditorManager::BuildModernMenu().
void yaze::editor::MenuBuilder::Clear | ( | ) |
Clear all menus.
Definition at line 226 of file menu_builder.cc.
References current_menu_, and menus_.
Referenced by yaze::editor::EditorManager::BuildModernMenu().
|
private |
Definition at line 131 of file menu_builder.cc.
References yaze::editor::MenuBuilder::MenuItem::callback, yaze::editor::MenuBuilder::MenuItem::checked, yaze::editor::MenuBuilder::MenuItem::enabled, yaze::editor::MenuBuilder::MenuItem::icon, yaze::editor::MenuBuilder::MenuItem::kDisabled, yaze::editor::MenuBuilder::MenuItem::kItem, yaze::editor::MenuBuilder::MenuItem::kSeparator, yaze::editor::MenuBuilder::MenuItem::kSubMenuBegin, yaze::editor::MenuBuilder::MenuItem::kSubMenuEnd, yaze::editor::MenuBuilder::MenuItem::label, yaze::editor::MenuBuilder::MenuItem::shortcut, skip_depth_, submenu_stack_, and yaze::editor::MenuBuilder::MenuItem::type.
Referenced by Draw().
|
private |
Definition at line 115 of file menu_builder.h.
Referenced by BeginMenu(), Clear(), and Draw().
|
private |
Definition at line 116 of file menu_builder.h.
Referenced by BeginMenu(), BeginSubMenu(), Clear(), DisabledItem(), EndMenu(), Item(), and Separator().
|
mutableprivate |
Definition at line 119 of file menu_builder.h.
Referenced by Draw(), and DrawMenuItem().
|
mutableprivate |
Definition at line 120 of file menu_builder.h.
Referenced by Draw(), and DrawMenuItem().