Serenity Operating System
at master 75 lines 1.9 kB view raw
1/* 2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/Badge.h> 10#include <AK/Forward.h> 11#include <AK/RefPtr.h> 12#include <LibGUI/Forward.h> 13 14namespace GUI { 15 16class MenuItem { 17public: 18 enum class Type { 19 Invalid, 20 Action, 21 Separator, 22 Submenu, 23 }; 24 25 MenuItem(unsigned menu_id, Type); 26 MenuItem(unsigned menu_id, NonnullRefPtr<Action>); 27 MenuItem(unsigned menu_id, NonnullRefPtr<Menu>); 28 ~MenuItem(); 29 30 Type type() const { return m_type; } 31 32 Action const* action() const { return m_action.ptr(); } 33 Action* action() { return m_action.ptr(); } 34 unsigned identifier() const { return m_identifier; } 35 36 Menu* submenu() { return m_submenu.ptr(); } 37 Menu const* submenu() const { return m_submenu.ptr(); } 38 39 bool is_checkable() const { return m_checkable; } 40 void set_checkable(bool checkable) { m_checkable = checkable; } 41 42 bool is_checked() const { return m_checked; } 43 void set_checked(bool); 44 45 bool is_enabled() const { return m_enabled; } 46 void set_enabled(bool); 47 48 bool is_visible() const { return m_visible; } 49 void set_visible(bool); 50 51 bool is_default() const { return m_default; } 52 void set_default(bool); 53 54 int menu_id() const { return m_menu_id; } 55 void set_menu_id(Badge<Menu>, unsigned menu_id); 56 void set_identifier(Badge<Menu>, unsigned identifier); 57 58 void update_from_action(Badge<Action>) { update_window_server(); } 59 60private: 61 void update_window_server(); 62 63 Type m_type { Type::Invalid }; 64 int m_menu_id { -1 }; 65 unsigned m_identifier { 0 }; 66 bool m_enabled { true }; 67 bool m_visible { true }; 68 bool m_checkable { false }; 69 bool m_checked { false }; 70 bool m_default { false }; 71 RefPtr<Action> m_action; 72 RefPtr<Menu> m_submenu; 73}; 74 75}