1 // Copyright (c) 2011 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/base/models/button_menu_item_model.h" 6 7 #include "ui/base/l10n/l10n_util.h" 8 9 namespace ui { 10 11 bool ButtonMenuItemModel::Delegate::IsItemForCommandIdDynamic( 12 int command_id) const { 13 return false; 14 } 15 16 base::string16 ButtonMenuItemModel::Delegate::GetLabelForCommandId( 17 int command_id) const { 18 return base::string16(); 19 } 20 21 bool ButtonMenuItemModel::Delegate::IsCommandIdEnabled(int command_id) const { 22 return true; 23 } 24 25 bool ButtonMenuItemModel::Delegate::DoesCommandIdDismissMenu( 26 int command_id) const { 27 return true; 28 } 29 30 struct ButtonMenuItemModel::Item { 31 int command_id; 32 ButtonType type; 33 base::string16 label; 34 int icon_idr; 35 bool part_of_group; 36 }; 37 38 ButtonMenuItemModel::ButtonMenuItemModel( 39 int string_id, 40 ButtonMenuItemModel::Delegate* delegate) 41 : item_label_(l10n_util::GetStringUTF16(string_id)), 42 delegate_(delegate) { 43 } 44 45 ButtonMenuItemModel::~ButtonMenuItemModel() { 46 } 47 48 void ButtonMenuItemModel::AddGroupItemWithStringId( 49 int command_id, int string_id) { 50 Item item = { command_id, TYPE_BUTTON, l10n_util::GetStringUTF16(string_id), 51 -1, true }; 52 items_.push_back(item); 53 } 54 55 void ButtonMenuItemModel::AddItemWithImage(int command_id, 56 int icon_idr) { 57 Item item = { command_id, TYPE_BUTTON, base::string16(), icon_idr, false }; 58 items_.push_back(item); 59 } 60 61 void ButtonMenuItemModel::AddButtonLabel(int command_id, int string_id) { 62 Item item = { command_id, TYPE_BUTTON_LABEL, 63 l10n_util::GetStringUTF16(string_id), -1, false }; 64 items_.push_back(item); 65 } 66 67 void ButtonMenuItemModel::AddSpace() { 68 Item item = { 0, TYPE_SPACE, base::string16(), -1, false }; 69 items_.push_back(item); 70 } 71 72 int ButtonMenuItemModel::GetItemCount() const { 73 return static_cast<int>(items_.size()); 74 } 75 76 ButtonMenuItemModel::ButtonType ButtonMenuItemModel::GetTypeAt( 77 int index) const { 78 return items_[index].type; 79 } 80 81 int ButtonMenuItemModel::GetCommandIdAt(int index) const { 82 return items_[index].command_id; 83 } 84 85 bool ButtonMenuItemModel::IsItemDynamicAt(int index) const { 86 if (delegate_) 87 return delegate_->IsItemForCommandIdDynamic(GetCommandIdAt(index)); 88 return false; 89 } 90 91 base::string16 ButtonMenuItemModel::GetLabelAt(int index) const { 92 if (IsItemDynamicAt(index)) 93 return delegate_->GetLabelForCommandId(GetCommandIdAt(index)); 94 return items_[index].label; 95 } 96 97 bool ButtonMenuItemModel::GetIconAt(int index, int* icon_idr) const { 98 if (items_[index].icon_idr == -1) 99 return false; 100 101 *icon_idr = items_[index].icon_idr; 102 return true; 103 } 104 105 bool ButtonMenuItemModel::PartOfGroup(int index) const { 106 return items_[index].part_of_group; 107 } 108 109 void ButtonMenuItemModel::ActivatedCommand(int command_id) { 110 if (delegate_) 111 delegate_->ExecuteCommand(command_id, 0); 112 } 113 114 bool ButtonMenuItemModel::IsEnabledAt(int index) const { 115 return IsCommandIdEnabled(items_[index].command_id); 116 } 117 118 bool ButtonMenuItemModel::DismissesMenuAt(int index) const { 119 return DoesCommandIdDismissMenu(items_[index].command_id); 120 } 121 122 bool ButtonMenuItemModel::IsCommandIdEnabled(int command_id) const { 123 if (delegate_) 124 return delegate_->IsCommandIdEnabled(command_id); 125 return true; 126 } 127 128 bool ButtonMenuItemModel::DoesCommandIdDismissMenu(int command_id) const { 129 if (delegate_) 130 return delegate_->DoesCommandIdDismissMenu(command_id); 131 return true; 132 } 133 134 135 } // namespace ui 136