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.
5 #ifndef CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_
6 #define CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_
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"
19 class SuggestionsMenuModel
;
21 class SuggestionsMenuModelDelegate
{
23 virtual ~SuggestionsMenuModelDelegate();
25 // Called when a suggestions menu is about to show.
26 virtual void SuggestionsMenuWillShow() = 0;
28 // Called when a menu item has been activated.
29 virtual void SuggestionItemSelected(SuggestionsMenuModel
* model
,
33 // A model for the dropdowns that allow the user to select from different
34 // sets of known data. It wraps a SimpleMenuModel, providing a mapping between
35 // index and item GUID.
36 class SuggestionsMenuModel
: public ui::SimpleMenuModel
,
37 public ui::SimpleMenuModel::Delegate
{
39 explicit SuggestionsMenuModel(SuggestionsMenuModelDelegate
* delegate
);
40 virtual ~SuggestionsMenuModel();
42 // Adds an item and its identifying key to the model. Keys needn't be unique.
43 void AddKeyedItem(const std::string
& key
,
44 const base::string16
& display_label
);
46 // As above, but also accepts an image which will be displayed alongside the
48 void AddKeyedItemWithIcon(const std::string
& key
,
49 const base::string16
& display_label
,
50 const gfx::Image
& icon
);
52 // Adds a label with a minor text and its identifying key to the model.
53 // Keys needn't be unique.
54 void AddKeyedItemWithMinorText(const std::string
& key
,
55 const base::string16
& display_label
,
56 const base::string16
& display_minor_text
);
58 // As above, but also accepts an image which will be displayed alongside the
60 void AddKeyedItemWithMinorTextAndIcon(
61 const std::string
& key
,
62 const base::string16
& display_label
,
63 const base::string16
& display_minor_text
,
64 const gfx::Image
& icon
);
66 // Resets the model to empty.
69 // Returns the ID key for the item at |index|.
70 std::string
GetItemKeyAt(int index
) const;
72 // Returns the ID key for the item at |checked_item_|, or an empty string if
73 // there are no items.
74 std::string
GetItemKeyForCheckedItem() const;
76 // Sets which item is checked.
77 void SetCheckedItem(const std::string
& item_key
);
78 void SetCheckedIndex(size_t index
);
80 int checked_item() const { return checked_item_
; }
82 // Enable/disable an item by key.
83 void SetEnabled(const std::string
& item_key
, bool enabled
);
85 // ui::SimpleMenuModel implementation.
86 virtual void MenuWillShow() OVERRIDE
;
88 // ui::SimpleMenuModel::Delegate implementation.
89 virtual bool IsCommandIdChecked(int command_id
) const OVERRIDE
;
90 virtual bool IsCommandIdEnabled(int command_id
) const OVERRIDE
;
91 virtual bool GetAcceleratorForCommandId(
93 ui::Accelerator
* accelerator
) OVERRIDE
;
94 virtual void ExecuteCommand(int command_id
, int event_flags
) OVERRIDE
;
95 virtual void MenuWillShow(ui::SimpleMenuModel
* source
) OVERRIDE
;
98 // Represents an item in this model.
100 std::string key
; // The key of the item.
101 bool enabled
; // Whether the item is selectable.
103 // The items this model represents in presentation order.
104 // Note: the index in this vector is the |command_id| of the item.
105 std::vector
<Item
> items_
;
107 // Returns the command id (and index) of the item by the |key|.
108 size_t GetItemIndex(const std::string
& item_key
);
110 SuggestionsMenuModelDelegate
* delegate_
;
112 // The command id (and index) of the item which is currently checked. Only one
113 // item is checked at a time.
116 DISALLOW_COPY_AND_ASSIGN(SuggestionsMenuModel
);
119 // A model for possible months in the Gregorian calendar.
120 class MonthComboboxModel
: public ui::ComboboxModel
{
122 MonthComboboxModel();
123 virtual ~MonthComboboxModel();
125 static base::string16
FormatMonth(int index
);
127 // ui::Combobox implementation:
128 virtual int GetItemCount() const OVERRIDE
;
129 virtual base::string16
GetItemAt(int index
) OVERRIDE
;
132 DISALLOW_COPY_AND_ASSIGN(MonthComboboxModel
);
135 // A model for years between now and a decade hence.
136 class YearComboboxModel
: public ui::ComboboxModel
{
139 virtual ~YearComboboxModel();
141 // ui::Combobox implementation:
142 virtual int GetItemCount() const OVERRIDE
;
143 virtual base::string16
GetItemAt(int index
) OVERRIDE
;
146 // The current year (e.g., 2012).
149 DISALLOW_COPY_AND_ASSIGN(YearComboboxModel
);
152 } // namespace autofill
154 #endif // CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_