Serenity Operating System
at master 97 lines 2.1 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#include "MenuItem.h" 8#include "ConnectionFromClient.h" 9#include "Menu.h" 10#include "WindowManager.h" 11#include <LibGfx/Bitmap.h> 12 13namespace WindowServer { 14 15MenuItem::MenuItem(Menu& menu, unsigned identifier, DeprecatedString const& text, DeprecatedString const& shortcut_text, bool enabled, bool visible, bool checkable, bool checked, Gfx::Bitmap const* icon) 16 : m_menu(menu) 17 , m_type(Text) 18 , m_enabled(enabled) 19 , m_visible(visible) 20 , m_checkable(checkable) 21 , m_checked(checked) 22 , m_identifier(identifier) 23 , m_text(text) 24 , m_shortcut_text(shortcut_text) 25 , m_icon(icon) 26{ 27 menu.invalidate_menu_window(); 28} 29 30MenuItem::MenuItem(Menu& menu, Type type) 31 : m_menu(menu) 32 , m_type(type) 33{ 34} 35 36void MenuItem::set_enabled(bool enabled) 37{ 38 if (m_enabled == enabled) 39 return; 40 m_enabled = enabled; 41 m_menu.redraw(); 42} 43 44void MenuItem::set_visible(bool visible) 45{ 46 if (m_visible == visible) 47 return; 48 m_visible = visible; 49 m_menu.invalidate_menu_window(); 50} 51 52void MenuItem::set_checked(bool checked) 53{ 54 if (m_checked == checked) 55 return; 56 m_checked = checked; 57 m_menu.redraw(); 58} 59 60void MenuItem::set_default(bool is_default) 61{ 62 if (m_default == is_default) 63 return; 64 m_default = is_default; 65 m_menu.redraw(); 66} 67 68Menu* MenuItem::submenu() 69{ 70 VERIFY(is_submenu()); 71 VERIFY(m_menu.client()); 72 return m_menu.client()->find_menu_by_id(m_submenu_id); 73} 74 75Menu const* MenuItem::submenu() const 76{ 77 VERIFY(is_submenu()); 78 VERIFY(m_menu.client()); 79 return m_menu.client()->find_menu_by_id(m_submenu_id); 80} 81 82Gfx::IntRect MenuItem::rect() const 83{ 84 if (!m_menu.is_scrollable()) 85 return m_rect; 86 return m_rect.translated(0, m_menu.item_height() - (m_menu.scroll_offset() * m_menu.item_height())); 87} 88 89void MenuItem::set_icon(Gfx::Bitmap const* icon) 90{ 91 if (m_icon == icon) 92 return; 93 m_icon = icon; 94 m_menu.redraw(); 95} 96 97}