autofill_dialog_models.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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 "chrome/browser/ui/autofill/autofill_dialog_models.h" 6 7#include "base/bind.h" 8#include "base/prefs/pref_service.h" 9#include "base/strings/string_number_conversions.h" 10#include "base/strings/stringprintf.h" 11#include "base/strings/utf_string_conversions.h" 12#include "base/time/time.h" 13#include "chrome/common/pref_names.h" 14#include "components/autofill/core/browser/autofill_country.h" 15#include "grit/generated_resources.h" 16#include "grit/theme_resources.h" 17#include "ui/base/l10n/l10n_util.h" 18#include "ui/base/resource/resource_bundle.h" 19 20namespace autofill { 21 22SuggestionsMenuModelDelegate::~SuggestionsMenuModelDelegate() {} 23 24// SuggestionsMenuModel ---------------------------------------------------- 25 26SuggestionsMenuModel::SuggestionsMenuModel( 27 SuggestionsMenuModelDelegate* delegate) 28 : ui::SimpleMenuModel(this), 29 delegate_(delegate), 30 checked_item_(0) {} 31 32SuggestionsMenuModel::~SuggestionsMenuModel() {} 33 34void SuggestionsMenuModel::AddKeyedItem( 35 const std::string& key, const base::string16& display_label) { 36 Item item = { key, true }; 37 items_.push_back(item); 38 AddCheckItem(items_.size() - 1, display_label); 39} 40 41void SuggestionsMenuModel::AddKeyedItemWithIcon( 42 const std::string& key, 43 const base::string16& display_label, 44 const gfx::Image& icon) { 45 AddKeyedItem(key, display_label); 46 SetIcon(items_.size() - 1, icon); 47} 48 49void SuggestionsMenuModel::AddKeyedItemWithMinorText( 50 const std::string& key, 51 const base::string16& display_label, 52 const base::string16& display_minor_text) { 53 AddKeyedItem(key, display_label); 54 SetMinorText(items_.size() - 1, display_minor_text); 55} 56 57void SuggestionsMenuModel::AddKeyedItemWithMinorTextAndIcon( 58 const std::string& key, 59 const base::string16& display_label, 60 const base::string16& display_minor_text, 61 const gfx::Image& icon) { 62 AddKeyedItemWithIcon(key, display_label, icon); 63 SetMinorText(items_.size() - 1, display_minor_text); 64} 65 66void SuggestionsMenuModel::Reset() { 67 checked_item_ = 0; 68 items_.clear(); 69 Clear(); 70} 71 72std::string SuggestionsMenuModel::GetItemKeyAt(int index) const { 73 return items_[index].key; 74} 75 76std::string SuggestionsMenuModel::GetItemKeyForCheckedItem() const { 77 if (items_.empty()) 78 return std::string(); 79 80 return items_[checked_item_].key; 81} 82 83void SuggestionsMenuModel::SetCheckedItem(const std::string& item_key) { 84 for (size_t i = 0; i < items_.size(); ++i) { 85 if (items_[i].key == item_key) { 86 if (IsEnabledAt(i)) 87 checked_item_ = i; 88 break; 89 } 90 } 91} 92 93void SuggestionsMenuModel::SetCheckedIndex(size_t index) { 94 DCHECK_LT(index, items_.size()); 95 checked_item_ = index; 96} 97 98void SuggestionsMenuModel::SetEnabled(const std::string& item_key, 99 bool enabled) { 100 items_[GetItemIndex(item_key)].enabled = enabled; 101} 102 103void SuggestionsMenuModel::MenuWillShow() { 104 ui::SimpleMenuModel::MenuWillShow(); 105} 106 107bool SuggestionsMenuModel::IsCommandIdChecked( 108 int command_id) const { 109 return checked_item_ == command_id; 110} 111 112bool SuggestionsMenuModel::IsCommandIdEnabled( 113 int command_id) const { 114 // Please note: command_id is same as the 0-based index in |items_|. 115 DCHECK_GE(command_id, 0); 116 DCHECK_LT(static_cast<size_t>(command_id), items_.size()); 117 return items_[command_id].enabled; 118} 119 120bool SuggestionsMenuModel::GetAcceleratorForCommandId( 121 int command_id, 122 ui::Accelerator* accelerator) { 123 return false; 124} 125 126void SuggestionsMenuModel::ExecuteCommand(int command_id, int event_flags) { 127 delegate_->SuggestionItemSelected(this, command_id); 128} 129 130void SuggestionsMenuModel::MenuWillShow(ui::SimpleMenuModel* source) { 131 delegate_->SuggestionsMenuWillShow(); 132} 133 134size_t SuggestionsMenuModel::GetItemIndex(const std::string& item_key) { 135 for (size_t i = 0; i < items_.size(); ++i) { 136 if (items_[i].key == item_key) 137 return i; 138 } 139 140 NOTREACHED(); 141 return 0; 142} 143 144// MonthComboboxModel ---------------------------------------------------------- 145 146MonthComboboxModel::MonthComboboxModel() {} 147 148MonthComboboxModel::~MonthComboboxModel() {} 149 150int MonthComboboxModel::GetItemCount() const { 151 // 12 months plus the empty entry. 152 return 13; 153} 154 155// static 156base::string16 MonthComboboxModel::FormatMonth(int index) { 157 return base::ASCIIToUTF16(base::StringPrintf("%.2d", index)); 158} 159 160base::string16 MonthComboboxModel::GetItemAt(int index) { 161 return index == 0 ? 162 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_PLACEHOLDER_EXPIRY_MONTH) : 163 FormatMonth(index); 164} 165 166// YearComboboxModel ----------------------------------------------------------- 167 168YearComboboxModel::YearComboboxModel() : this_year_(0) { 169 base::Time time = base::Time::Now(); 170 base::Time::Exploded exploded; 171 time.LocalExplode(&exploded); 172 this_year_ = exploded.year; 173} 174 175YearComboboxModel::~YearComboboxModel() {} 176 177int YearComboboxModel::GetItemCount() const { 178 // 10 years plus the empty entry. 179 return 11; 180} 181 182base::string16 YearComboboxModel::GetItemAt(int index) { 183 if (index == 0) { 184 return l10n_util::GetStringUTF16( 185 IDS_AUTOFILL_DIALOG_PLACEHOLDER_EXPIRY_YEAR); 186 } 187 188 return base::IntToString16(this_year_ + index - 1); 189} 190 191} // namespace autofill 192