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
IsItemChecked(int id) const12 bool Menu::Delegate::IsItemChecked(int id) const {
13 return false;
14 }
15
IsItemDefault(int id) const16 bool Menu::Delegate::IsItemDefault(int id) const {
17 return false;
18 }
19
GetLabel(int id) const20 base::string16 Menu::Delegate::GetLabel(int id) const {
21 return base::string16();
22 }
23
GetAcceleratorInfo(int id,ui::Accelerator * accel)24 bool Menu::Delegate::GetAcceleratorInfo(int id, ui::Accelerator* accel) {
25 return false;
26 }
27
GetIcon(int id) const28 const gfx::ImageSkia& Menu::Delegate::GetIcon(int id) const {
29 return GetEmptyIcon();
30 }
31
GetItemCount() const32 int Menu::Delegate::GetItemCount() const {
33 return 0;
34 }
35
IsItemSeparator(int id) const36 bool Menu::Delegate::IsItemSeparator(int id) const {
37 return false;
38 }
39
HasIcon(int id) const40 bool Menu::Delegate::HasIcon(int id) const {
41 return false;
42 }
43
SupportsCommand(int id) const44 bool Menu::Delegate::SupportsCommand(int id) const {
45 return true;
46 }
47
IsCommandEnabled(int id) const48 bool Menu::Delegate::IsCommandEnabled(int id) const {
49 return true;
50 }
51
GetContextualLabel(int id,base::string16 * out) const52 bool Menu::Delegate::GetContextualLabel(int id, base::string16* out) const {
53 return false;
54 }
55
IsRightToLeftUILayout() const56 bool Menu::Delegate::IsRightToLeftUILayout() const {
57 return base::i18n::IsRTL();
58 }
59
GetEmptyIcon() const60 const gfx::ImageSkia& Menu::Delegate::GetEmptyIcon() const {
61 static const gfx::ImageSkia* empty_icon = new gfx::ImageSkia();
62 return *empty_icon;
63 }
64
Menu(Delegate * delegate,AnchorPoint anchor)65 Menu::Menu(Delegate* delegate, AnchorPoint anchor)
66 : delegate_(delegate),
67 anchor_(anchor) {
68 }
69
Menu(Menu * parent)70 Menu::Menu(Menu* parent)
71 : delegate_(parent->delegate_),
72 anchor_(parent->anchor_) {
73 }
74
~Menu()75 Menu::~Menu() {
76 }
77
AppendMenuItem(int item_id,const base::string16 & label,MenuItemType type)78 void Menu::AppendMenuItem(int item_id,
79 const base::string16& label,
80 MenuItemType type) {
81 AddMenuItem(-1, item_id, label, type);
82 }
83
AddMenuItem(int index,int item_id,const base::string16 & label,MenuItemType type)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
AppendSubMenu(int item_id,const base::string16 & label)94 Menu* Menu::AppendSubMenu(int item_id, const base::string16& label) {
95 return AddSubMenu(-1, item_id, label);
96 }
97
AddSubMenu(int index,int item_id,const base::string16 & label)98 Menu* Menu::AddSubMenu(int index, int item_id, const base::string16& label) {
99 return AddSubMenuWithIcon(index, item_id, label, gfx::ImageSkia());
100 }
101
AppendSubMenuWithIcon(int item_id,const base::string16 & label,const gfx::ImageSkia & icon)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
AppendMenuItemWithLabel(int item_id,const base::string16 & label)108 void Menu::AppendMenuItemWithLabel(int item_id, const base::string16& label) {
109 AddMenuItemWithLabel(-1, item_id, label);
110 }
111
AddMenuItemWithLabel(int index,int item_id,const base::string16 & label)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
AppendDelegateMenuItem(int item_id)118 void Menu::AppendDelegateMenuItem(int item_id) {
119 AddDelegateMenuItem(-1, item_id);
120 }
121
AddDelegateMenuItem(int index,int item_id)122 void Menu::AddDelegateMenuItem(int index, int item_id) {
123 AddMenuItem(index, item_id, base::string16(), Menu::NORMAL);
124 }
125
AppendSeparator()126 void Menu::AppendSeparator() {
127 AddSeparator(-1);
128 }
129
AppendMenuItemWithIcon(int item_id,const base::string16 & label,const gfx::ImageSkia & icon)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
AddMenuItemWithIcon(int index,int item_id,const base::string16 & label,const gfx::ImageSkia & icon)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
Menu()143 Menu::Menu() : delegate_(NULL), anchor_(TOPLEFT) {
144 }
145
146 } // namespace views
147