Skip to content

Menu

The menu control provides a context menu with support for nested items.

Quick Start

#include <wui/control/menu.hpp>

auto menu = std::make_shared<wui::menu>();

wui::menu_items_t items = {
    {1, wui::normal, "Open", "Ctrl+O", nullptr, {}, [](int32_t id) {
        open_file();
    }},
    {2, wui::normal, "Save", "Ctrl+S", nullptr, {}, [](int32_t id) {
        save_file();
    }},
    {3, wui::separator, "", "", nullptr, {}, nullptr},
    {4, wui::normal, "Exit", "Alt+F4", nullptr, {}, [](int32_t id) {
        exit_app();
    }}
};

menu->set_items(items);

// Show on right click
window->subscribe([&menu](const wui::event& ev) {
    if (ev.type == wui::event_type::mouse && 
        ev.mouse_event_.type == wui::mouse_event_type::right_up) {
        menu->show_on_point(ev.mouse_event_.x, ev.mouse_event_.y);
    }
}, wui::event_type::mouse);
enum menu_item_state {
    normal,      // Normal item
    separator,   // Separator
    expanded,    // Expanded (with submenu)
    disabled     // Disabled
};

WUI Menu

WUI Menu with submenu

API

Methods

// Manage items
void set_items(const menu_items_t &mi);
void update_item(const menu_item &mi);
void swap_items(int32_t first_item_id, int32_t second_item_id);
void delete_item(int32_t id);

// Item height
void set_item_height(int32_t item_height);

// Show
void show_on_control(std::shared_ptr<i_control> control, 
                     int32_t indent, int32_t x = -1, int32_t y = -1);
void show_on_point(int32_t x, int32_t y);

See Also

  • Image — for icons in menu
  • List — often used with context menu