• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_
6 #define CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "base/basictypes.h"
12 #include "base/compiler_specific.h"
13 #include "base/strings/string16.h"
14 #include "ui/base/models/combobox_model.h"
15 #include "ui/base/models/simple_menu_model.h"
16 
17 namespace autofill {
18 
19 class SuggestionsMenuModel;
20 
21 class SuggestionsMenuModelDelegate {
22  public:
23   virtual ~SuggestionsMenuModelDelegate();
24 
25   // Called when a menu item has been activated.
26   virtual void SuggestionItemSelected(SuggestionsMenuModel* model,
27                                       size_t index) = 0;
28 };
29 
30 // A model for the dropdowns that allow the user to select from different
31 // sets of known data. It wraps a SimpleMenuModel, providing a mapping between
32 // index and item GUID.
33 class SuggestionsMenuModel : public ui::SimpleMenuModel,
34                              public ui::SimpleMenuModel::Delegate {
35  public:
36   explicit SuggestionsMenuModel(SuggestionsMenuModelDelegate* delegate);
37   virtual ~SuggestionsMenuModel();
38 
39   // Adds an item and its identifying key to the model. Keys needn't be unique.
40   void AddKeyedItem(const std::string& key,
41                     const base::string16& display_label);
42 
43   // As above, but also accepts an image which will be displayed alongside the
44   // text.
45   void AddKeyedItemWithIcon(const std::string& key,
46                             const base::string16& display_label,
47                             const gfx::Image& icon);
48 
49   // Adds a label with a minor text and its identifying key to the model.
50   // Keys needn't be unique.
51   void AddKeyedItemWithMinorText(const std::string& key,
52                                 const base::string16& display_label,
53                                 const base::string16& display_minor_text);
54 
55   // As above, but also accepts an image which will be displayed alongside the
56   // text.
57   void 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 
63   // Resets the model to empty.
64   void Reset();
65 
66   // Returns the ID key for the item at |index|.
67   std::string GetItemKeyAt(int index) const;
68 
69   // Returns the ID key for the item at |checked_item_|, or an empty string if
70   // there are no items.
71   std::string GetItemKeyForCheckedItem() const;
72 
73   // Sets which item is checked.
74   void SetCheckedItem(const std::string& item_key);
75   void SetCheckedIndex(size_t index);
76 
checked_item()77   int checked_item() const { return checked_item_; }
78 
79   // Enable/disable an item by key.
80   void SetEnabled(const std::string& item_key, bool enabled);
81 
82   // ui::SimpleMenuModel::Delegate implementation.
83   virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
84   virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
85   virtual bool GetAcceleratorForCommandId(
86       int command_id,
87       ui::Accelerator* accelerator) OVERRIDE;
88   virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
89 
90  private:
91   // Represents an item in this model.
92   struct Item {
93     std::string key;  //  The key of the item.
94     bool enabled;  // Whether the item is selectable.
95   };
96   // The items this model represents in presentation order.
97   // Note: the index in this vector is the |command_id| of the item.
98   std::vector<Item> items_;
99 
100   // Returns the command id (and index) of the item by the |key|.
101   size_t GetItemIndex(const std::string& item_key);
102 
103   SuggestionsMenuModelDelegate* delegate_;
104 
105   // The command id (and index) of the item which is currently checked. Only one
106   // item is checked at a time.
107   int checked_item_;
108 
109   DISALLOW_COPY_AND_ASSIGN(SuggestionsMenuModel);
110 };
111 
112 // A model for possible months in the Gregorian calendar.
113 class MonthComboboxModel : public ui::ComboboxModel {
114  public:
115   MonthComboboxModel();
116   virtual ~MonthComboboxModel();
117 
118   static base::string16 FormatMonth(int index);
119 
120   // ui::Combobox implementation:
121   virtual int GetItemCount() const OVERRIDE;
122   virtual base::string16 GetItemAt(int index) OVERRIDE;
123 
124  private:
125   DISALLOW_COPY_AND_ASSIGN(MonthComboboxModel);
126 };
127 
128 // A model for years between now and a decade hence.
129 class YearComboboxModel : public ui::ComboboxModel {
130  public:
131   YearComboboxModel();
132   virtual ~YearComboboxModel();
133 
134   // ui::Combobox implementation:
135   virtual int GetItemCount() const OVERRIDE;
136   virtual base::string16 GetItemAt(int index) OVERRIDE;
137 
138  private:
139   // The current year (e.g., 2012).
140   int this_year_;
141 
142   DISALLOW_COPY_AND_ASSIGN(YearComboboxModel);
143 };
144 
145 }  // namespace autofill
146 
147 #endif  // CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_
148