fa8de9eb5594920024ddf0fdf73116792f5da702
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / autofill / autofill_dialog_models.cc
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
20 namespace autofill {
21
22 SuggestionsMenuModelDelegate::~SuggestionsMenuModelDelegate() {}
23
24 // SuggestionsMenuModel ----------------------------------------------------
25
26 SuggestionsMenuModel::SuggestionsMenuModel(
27     SuggestionsMenuModelDelegate* delegate)
28     : ui::SimpleMenuModel(this),
29       delegate_(delegate),
30       checked_item_(0) {}
31
32 SuggestionsMenuModel::~SuggestionsMenuModel() {}
33
34 void 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
41 void 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
49 void 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
57 void 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
66 void SuggestionsMenuModel::Reset() {
67   checked_item_ = 0;
68   items_.clear();
69   Clear();
70 }
71
72 std::string SuggestionsMenuModel::GetItemKeyAt(int index) const {
73   return items_[index].key;
74 }
75
76 std::string SuggestionsMenuModel::GetItemKeyForCheckedItem() const {
77   if (items_.empty())
78     return std::string();
79
80   return items_[checked_item_].key;
81 }
82
83 void 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
93 void SuggestionsMenuModel::SetCheckedIndex(size_t index) {
94   DCHECK_LT(index, items_.size());
95   checked_item_ = index;
96 }
97
98 void SuggestionsMenuModel::SetEnabled(const std::string& item_key,
99                                       bool enabled) {
100   items_[GetItemIndex(item_key)].enabled = enabled;
101 }
102
103 void SuggestionsMenuModel::MenuWillShow() {
104   ui::SimpleMenuModel::MenuWillShow();
105 }
106
107 bool SuggestionsMenuModel::IsCommandIdChecked(
108     int command_id) const {
109   return checked_item_ == command_id;
110 }
111
112 bool 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
120 bool SuggestionsMenuModel::GetAcceleratorForCommandId(
121     int command_id,
122     ui::Accelerator* accelerator) {
123   return false;
124 }
125
126 void SuggestionsMenuModel::ExecuteCommand(int command_id, int event_flags) {
127   delegate_->SuggestionItemSelected(this, command_id);
128 }
129
130 void SuggestionsMenuModel::MenuWillShow(ui::SimpleMenuModel* source) {
131   delegate_->SuggestionsMenuWillShow();
132 }
133
134 size_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
146 MonthComboboxModel::MonthComboboxModel() {}
147
148 MonthComboboxModel::~MonthComboboxModel() {}
149
150 int MonthComboboxModel::GetItemCount() const {
151   // 12 months plus the empty entry.
152   return 13;
153 }
154
155 // static
156 base::string16 MonthComboboxModel::FormatMonth(int index) {
157   return base::ASCIIToUTF16(base::StringPrintf("%.2d", index));
158 }
159
160 base::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
168 YearComboboxModel::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
175 YearComboboxModel::~YearComboboxModel() {}
176
177 int YearComboboxModel::GetItemCount() const {
178   // 10 years plus the empty entry.
179   return 11;
180 }
181
182 base::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