autofill_dialog_models.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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      checked_item_ = i;
87      break;
88    }
89  }
90}
91
92void SuggestionsMenuModel::SetCheckedIndex(size_t index) {
93  DCHECK_LT(index, items_.size());
94  checked_item_ = index;
95}
96
97void SuggestionsMenuModel::SetEnabled(const std::string& item_key,
98                                      bool enabled) {
99  items_[GetItemIndex(item_key)].enabled = enabled;
100}
101
102void SuggestionsMenuModel::MenuWillShow() {
103  ui::SimpleMenuModel::MenuWillShow();
104}
105
106bool SuggestionsMenuModel::IsCommandIdChecked(
107    int command_id) const {
108  return checked_item_ == command_id;
109}
110
111bool SuggestionsMenuModel::IsCommandIdEnabled(
112    int command_id) const {
113  // Please note: command_id is same as the 0-based index in |items_|.
114  DCHECK_GE(command_id, 0);
115  DCHECK_LT(static_cast<size_t>(command_id), items_.size());
116  return items_[command_id].enabled;
117}
118
119bool SuggestionsMenuModel::GetAcceleratorForCommandId(
120    int command_id,
121    ui::Accelerator* accelerator) {
122  return false;
123}
124
125void SuggestionsMenuModel::ExecuteCommand(int command_id, int event_flags) {
126  delegate_->SuggestionItemSelected(this, command_id);
127}
128
129void SuggestionsMenuModel::MenuWillShow(ui::SimpleMenuModel* source) {
130  delegate_->SuggestionsMenuWillShow();
131}
132
133size_t SuggestionsMenuModel::GetItemIndex(const std::string& item_key) {
134  for (size_t i = 0; i < items_.size(); ++i) {
135    if (items_[i].key == item_key)
136      return i;
137  }
138
139  NOTREACHED();
140  return 0;
141}
142
143// MonthComboboxModel ----------------------------------------------------------
144
145MonthComboboxModel::MonthComboboxModel() {}
146
147MonthComboboxModel::~MonthComboboxModel() {}
148
149int MonthComboboxModel::GetItemCount() const {
150  // 12 months plus the empty entry.
151  return 13;
152}
153
154// static
155string16 MonthComboboxModel::FormatMonth(int index) {
156  return ASCIIToUTF16(base::StringPrintf("%.2d", index));
157}
158
159string16 MonthComboboxModel::GetItemAt(int index) {
160  return index == 0 ?
161      l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_PLACEHOLDER_EXPIRY_MONTH) :
162      FormatMonth(index);
163}
164
165// YearComboboxModel -----------------------------------------------------------
166
167YearComboboxModel::YearComboboxModel() : this_year_(0) {
168  base::Time time = base::Time::Now();
169  base::Time::Exploded exploded;
170  time.LocalExplode(&exploded);
171  this_year_ = exploded.year;
172}
173
174YearComboboxModel::~YearComboboxModel() {}
175
176int YearComboboxModel::GetItemCount() const {
177  // 10 years plus the empty entry.
178  return 11;
179}
180
181string16 YearComboboxModel::GetItemAt(int index) {
182  if (index == 0) {
183    return l10n_util::GetStringUTF16(
184        IDS_AUTOFILL_DIALOG_PLACEHOLDER_EXPIRY_YEAR);
185  }
186
187  return base::IntToString16(this_year_ + index - 1);
188}
189
190}  // namespace autofill
191