Home | History | Annotate | Download | only in autofill
      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       checked_item_ = i;
     87       break;
     88     }
     89   }
     90 }
     91 
     92 void SuggestionsMenuModel::SetCheckedIndex(size_t index) {
     93   DCHECK_LT(index, items_.size());
     94   checked_item_ = index;
     95 }
     96 
     97 void SuggestionsMenuModel::SetEnabled(const std::string& item_key,
     98                                       bool enabled) {
     99   items_[GetItemIndex(item_key)].enabled = enabled;
    100 }
    101 
    102 void SuggestionsMenuModel::MenuWillShow() {
    103   ui::SimpleMenuModel::MenuWillShow();
    104 }
    105 
    106 bool SuggestionsMenuModel::IsCommandIdChecked(
    107     int command_id) const {
    108   return checked_item_ == command_id;
    109 }
    110 
    111 bool 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 
    119 bool SuggestionsMenuModel::GetAcceleratorForCommandId(
    120     int command_id,
    121     ui::Accelerator* accelerator) {
    122   return false;
    123 }
    124 
    125 void SuggestionsMenuModel::ExecuteCommand(int command_id, int event_flags) {
    126   delegate_->SuggestionItemSelected(this, command_id);
    127 }
    128 
    129 void SuggestionsMenuModel::MenuWillShow(ui::SimpleMenuModel* source) {
    130   delegate_->SuggestionsMenuWillShow();
    131 }
    132 
    133 size_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 
    145 MonthComboboxModel::MonthComboboxModel() {}
    146 
    147 MonthComboboxModel::~MonthComboboxModel() {}
    148 
    149 int MonthComboboxModel::GetItemCount() const {
    150   // 12 months plus the empty entry.
    151   return 13;
    152 }
    153 
    154 // static
    155 base::string16 MonthComboboxModel::FormatMonth(int index) {
    156   return ASCIIToUTF16(base::StringPrintf("%.2d", index));
    157 }
    158 
    159 base::string16 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 
    167 YearComboboxModel::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 
    174 YearComboboxModel::~YearComboboxModel() {}
    175 
    176 int YearComboboxModel::GetItemCount() const {
    177   // 10 years plus the empty entry.
    178   return 11;
    179 }
    180 
    181 base::string16 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