Home | History | Annotate | Download | only in menu
      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