yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
yaze::gui::CanvasMenuBuilder Class Reference

Builder pattern for constructing canvas menus fluently. More...

#include <canvas_menu_builder.h>

Collaboration diagram for yaze::gui::CanvasMenuBuilder:

Public Member Functions

 CanvasMenuBuilder ()=default
 
CanvasMenuBuilderAddItem (const std::string &label, std::function< void()> callback)
 Add a simple menu item.
 
CanvasMenuBuilderAddItem (const std::string &label, const std::string &icon, std::function< void()> callback)
 Add a menu item with icon.
 
CanvasMenuBuilderAddItem (const std::string &label, const std::string &icon, const std::string &shortcut, std::function< void()> callback)
 Add a menu item with icon and shortcut hint.
 
CanvasMenuBuilderAddPopupItem (const std::string &label, const std::string &popup_id, std::function< void()> render_callback)
 Add a menu item that opens a persistent popup.
 
CanvasMenuBuilderAddPopupItem (const std::string &label, const std::string &icon, const std::string &popup_id, std::function< void()> render_callback)
 Add a menu item with icon that opens a persistent popup.
 
CanvasMenuBuilderAddConditionalItem (const std::string &label, std::function< void()> callback, std::function< bool()> condition)
 Add a conditional menu item (enabled only when condition is true)
 
CanvasMenuBuilderAddSubmenu (const std::string &label, const std::vector< CanvasMenuItem > &subitems)
 Add a submenu with nested items.
 
CanvasMenuBuilderAddSeparator ()
 Add a separator to visually group items.
 
CanvasMenuBuilderBeginSection (const std::string &title="", MenuSectionPriority priority=MenuSectionPriority::kEditorSpecific)
 Start a new section with optional title.
 
CanvasMenuBuilderEndSection ()
 End the current section.
 
CanvasMenuDefinition Build ()
 Build the final menu definition.
 
CanvasMenuBuilderReset ()
 Reset the builder to start building a new menu.
 

Private Member Functions

void FlushPendingItems ()
 

Private Attributes

CanvasMenuDefinition menu_
 
CanvasMenuSectioncurrent_section_ = nullptr
 
std::vector< CanvasMenuItempending_items_
 

Detailed Description

Builder pattern for constructing canvas menus fluently.

Phase 4: Simplifies menu construction with chainable methods.

Example usage:

builder
.AddItem("Cut", ICON_MD_CONTENT_CUT, []() { DoCut(); })
.AddItem("Copy", ICON_MD_CONTENT_COPY, []() { DoCopy(); })
.AddPopupItem("Properties", ICON_MD_SETTINGS, "props_popup",
[]() { RenderPropertiesPopup(); })
.Build();
Builder pattern for constructing canvas menus fluently.
CanvasMenuBuilder & AddItem(const std::string &label, std::function< void()> callback)
Add a simple menu item.
CanvasMenuBuilder & AddPopupItem(const std::string &label, const std::string &popup_id, std::function< void()> render_callback)
Add a menu item that opens a persistent popup.
CanvasMenuDefinition Build()
Build the final menu definition.
CanvasMenuBuilder & AddSeparator()
Add a separator to visually group items.
#define ICON_MD_CONTENT_CUT
Definition icons.h:464
#define ICON_MD_SETTINGS
Definition icons.h:1697
#define ICON_MD_CONTENT_COPY
Definition icons.h:463

Definition at line 30 of file canvas_menu_builder.h.

Constructor & Destructor Documentation

◆ CanvasMenuBuilder()

yaze::gui::CanvasMenuBuilder::CanvasMenuBuilder ( )
default

Member Function Documentation

◆ AddItem() [1/3]

CanvasMenuBuilder & yaze::gui::CanvasMenuBuilder::AddItem ( const std::string &  label,
std::function< void()>  callback 
)

Add a simple menu item.

Parameters
labelMenu item label
callbackAction to perform when selected
Returns
Reference to this builder for chaining

Definition at line 6 of file canvas_menu_builder.cc.

References yaze::gui::CanvasMenuItem::callback, yaze::gui::CanvasMenuItem::label, and pending_items_.

◆ AddItem() [2/3]

CanvasMenuBuilder & yaze::gui::CanvasMenuBuilder::AddItem ( const std::string &  label,
const std::string &  icon,
std::function< void()>  callback 
)

Add a menu item with icon.

Parameters
labelMenu item label
iconMaterial Design icon or Unicode glyph
callbackAction to perform when selected
Returns
Reference to this builder for chaining

Definition at line 15 of file canvas_menu_builder.cc.

References yaze::gui::CanvasMenuItem::callback, yaze::gui::CanvasMenuItem::icon, yaze::gui::CanvasMenuItem::label, and pending_items_.

◆ AddItem() [3/3]

CanvasMenuBuilder & yaze::gui::CanvasMenuBuilder::AddItem ( const std::string &  label,
const std::string &  icon,
const std::string &  shortcut,
std::function< void()>  callback 
)

Add a menu item with icon and shortcut hint.

Parameters
labelMenu item label
iconMaterial Design icon or Unicode glyph
shortcutKeyboard shortcut hint (e.g., "Ctrl+S")
callbackAction to perform when selected
Returns
Reference to this builder for chaining

Definition at line 26 of file canvas_menu_builder.cc.

References yaze::gui::CanvasMenuItem::callback, yaze::gui::CanvasMenuItem::icon, yaze::gui::CanvasMenuItem::label, pending_items_, and yaze::gui::CanvasMenuItem::shortcut.

◆ AddPopupItem() [1/2]

CanvasMenuBuilder & yaze::gui::CanvasMenuBuilder::AddPopupItem ( const std::string &  label,
const std::string &  popup_id,
std::function< void()>  render_callback 
)

Add a menu item that opens a persistent popup.

Parameters
labelMenu item label
popup_idUnique popup identifier
render_callbackCallback to render popup content
Returns
Reference to this builder for chaining

Definition at line 39 of file canvas_menu_builder.cc.

References pending_items_, and yaze::gui::CanvasMenuItem::WithPopup().

Here is the call graph for this function:

◆ AddPopupItem() [2/2]

CanvasMenuBuilder & yaze::gui::CanvasMenuBuilder::AddPopupItem ( const std::string &  label,
const std::string &  icon,
const std::string &  popup_id,
std::function< void()>  render_callback 
)

Add a menu item with icon that opens a persistent popup.

Parameters
labelMenu item label
iconMaterial Design icon or Unicode glyph
popup_idUnique popup identifier
render_callbackCallback to render popup content
Returns
Reference to this builder for chaining

Definition at line 47 of file canvas_menu_builder.cc.

References yaze::gui::CanvasMenuItem::icon, pending_items_, and yaze::gui::CanvasMenuItem::WithPopup().

Here is the call graph for this function:

◆ AddConditionalItem()

CanvasMenuBuilder & yaze::gui::CanvasMenuBuilder::AddConditionalItem ( const std::string &  label,
std::function< void()>  callback,
std::function< bool()>  condition 
)

Add a conditional menu item (enabled only when condition is true)

Parameters
labelMenu item label
callbackAction to perform when selected
conditionFunction that returns true when item should be enabled
Returns
Reference to this builder for chaining

Definition at line 56 of file canvas_menu_builder.cc.

References yaze::gui::CanvasMenuItem::Conditional(), and pending_items_.

Here is the call graph for this function:

◆ AddSubmenu()

CanvasMenuBuilder & yaze::gui::CanvasMenuBuilder::AddSubmenu ( const std::string &  label,
const std::vector< CanvasMenuItem > &  subitems 
)

Add a submenu with nested items.

Parameters
labelSubmenu label
subitemsNested menu items
Returns
Reference to this builder for chaining

Definition at line 64 of file canvas_menu_builder.cc.

References yaze::gui::CanvasMenuItem::label, pending_items_, and yaze::gui::CanvasMenuItem::subitems.

◆ AddSeparator()

CanvasMenuBuilder & yaze::gui::CanvasMenuBuilder::AddSeparator ( )

Add a separator to visually group items.

Returns
Reference to this builder for chaining

Definition at line 73 of file canvas_menu_builder.cc.

References pending_items_.

◆ BeginSection()

CanvasMenuBuilder & yaze::gui::CanvasMenuBuilder::BeginSection ( const std::string &  title = "",
MenuSectionPriority  priority = MenuSectionPriority::kEditorSpecific 
)

Start a new section with optional title.

Parameters
titleSection title (empty for no title)
prioritySection priority (controls rendering order)
Returns
Reference to this builder for chaining

Definition at line 80 of file canvas_menu_builder.cc.

References current_section_, FlushPendingItems(), menu_, yaze::gui::CanvasMenuSection::priority, yaze::gui::CanvasMenuDefinition::sections, yaze::gui::CanvasMenuSection::separator_after, and yaze::gui::CanvasMenuSection::title.

Here is the call graph for this function:

◆ EndSection()

CanvasMenuBuilder & yaze::gui::CanvasMenuBuilder::EndSection ( )

End the current section.

Returns
Reference to this builder for chaining

Definition at line 98 of file canvas_menu_builder.cc.

References current_section_, and FlushPendingItems().

Here is the call graph for this function:

◆ Build()

CanvasMenuDefinition yaze::gui::CanvasMenuBuilder::Build ( )

Build the final menu definition.

Returns
Complete menu definition ready for rendering

Definition at line 104 of file canvas_menu_builder.cc.

References FlushPendingItems(), and menu_.

Here is the call graph for this function:

◆ Reset()

CanvasMenuBuilder & yaze::gui::CanvasMenuBuilder::Reset ( )

Reset the builder to start building a new menu.

Returns
Reference to this builder for chaining

Definition at line 109 of file canvas_menu_builder.cc.

References current_section_, menu_, pending_items_, and yaze::gui::CanvasMenuDefinition::sections.

◆ FlushPendingItems()

Member Data Documentation

◆ menu_

CanvasMenuDefinition yaze::gui::CanvasMenuBuilder::menu_
private

Definition at line 146 of file canvas_menu_builder.h.

Referenced by BeginSection(), Build(), FlushPendingItems(), and Reset().

◆ current_section_

CanvasMenuSection* yaze::gui::CanvasMenuBuilder::current_section_ = nullptr
private

Definition at line 147 of file canvas_menu_builder.h.

Referenced by BeginSection(), EndSection(), FlushPendingItems(), and Reset().

◆ pending_items_

std::vector<CanvasMenuItem> yaze::gui::CanvasMenuBuilder::pending_items_
private

The documentation for this class was generated from the following files: