1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ui/views/controls/menu/menu.h" 6 7 #include "base/i18n/rtl.h" 8 #include "ui/gfx/image/image_skia.h" 9 10 namespace views { 11 12 bool Menu::Delegate::IsItemChecked(int id) const { 13 return false; 14 } 15 16 bool Menu::Delegate::IsItemDefault(int id) const { 17 return false; 18 } 19 20 base::string16 Menu::Delegate::GetLabel(int id) const { 21 return base::string16(); 22 } 23 24 bool Menu::Delegate::GetAcceleratorInfo(int id, ui::Accelerator* accel) { 25 return false; 26 } 27 28 const gfx::ImageSkia& Menu::Delegate::GetIcon(int id) const { 29 return GetEmptyIcon(); 30 } 31 32 int Menu::Delegate::GetItemCount() const { 33 return 0; 34 } 35 36 bool Menu::Delegate::IsItemSeparator(int id) const { 37 return false; 38 } 39 40 bool Menu::Delegate::HasIcon(int id) const { 41 return false; 42 } 43 44 bool Menu::Delegate::SupportsCommand(int id) const { 45 return true; 46 } 47 48 bool Menu::Delegate::IsCommandEnabled(int id) const { 49 return true; 50 } 51 52 bool Menu::Delegate::GetContextualLabel(int id, base::string16* out) const { 53 return false; 54 } 55 56 bool Menu::Delegate::IsRightToLeftUILayout() const { 57 return base::i18n::IsRTL(); 58 } 59 60 const gfx::ImageSkia& Menu::Delegate::GetEmptyIcon() const { 61 static const gfx::ImageSkia* empty_icon = new gfx::ImageSkia(); 62 return *empty_icon; 63 } 64 65 Menu::Menu(Delegate* delegate, AnchorPoint anchor) 66 : delegate_(delegate), 67 anchor_(anchor) { 68 } 69 70 Menu::Menu(Menu* parent) 71 : delegate_(parent->delegate_), 72 anchor_(parent->anchor_) { 73 } 74 75 Menu::~Menu() { 76 } 77 78 void Menu::AppendMenuItem(int item_id, 79 const base::string16& label, 80 MenuItemType type) { 81 AddMenuItem(-1, item_id, label, type); 82 } 83 84 void Menu::AddMenuItem(int index, 85 int item_id, 86 const base::string16& label, 87 MenuItemType type) { 88 if (type == SEPARATOR) 89 AddSeparator(index); 90 else 91 AddMenuItemInternal(index, item_id, label, gfx::ImageSkia(), type); 92 } 93 94 Menu* Menu::AppendSubMenu(int item_id, const base::string16& label) { 95 return AddSubMenu(-1, item_id, label); 96 } 97 98 Menu* Menu::AddSubMenu(int index, int item_id, const base::string16& label) { 99 return AddSubMenuWithIcon(index, item_id, label, gfx::ImageSkia()); 100 } 101 102 Menu* Menu::AppendSubMenuWithIcon(int item_id, 103 const base::string16& label, 104 const gfx::ImageSkia& icon) { 105 return AddSubMenuWithIcon(-1, item_id, label, icon); 106 } 107 108 void Menu::AppendMenuItemWithLabel(int item_id, const base::string16& label) { 109 AddMenuItemWithLabel(-1, item_id, label); 110 } 111 112 void Menu::AddMenuItemWithLabel(int index, 113 int item_id, 114 const base::string16& label) { 115 AddMenuItem(index, item_id, label, Menu::NORMAL); 116 } 117 118 void Menu::AppendDelegateMenuItem(int item_id) { 119 AddDelegateMenuItem(-1, item_id); 120 } 121 122 void Menu::AddDelegateMenuItem(int index, int item_id) { 123 AddMenuItem(index, item_id, base::string16(), Menu::NORMAL); 124 } 125 126 void Menu::AppendSeparator() { 127 AddSeparator(-1); 128 } 129 130 void Menu::AppendMenuItemWithIcon(int item_id, 131 const base::string16& label, 132 const gfx::ImageSkia& icon) { 133 AddMenuItemWithIcon(-1, item_id, label, icon); 134 } 135 136 void Menu::AddMenuItemWithIcon(int index, 137 int item_id, 138 const base::string16& label, 139 const gfx::ImageSkia& icon) { 140 AddMenuItemInternal(index, item_id, label, icon, Menu::NORMAL); 141 } 142 143 Menu::Menu() : delegate_(NULL), anchor_(TOPLEFT) { 144 } 145 146 } // namespace views 147