autofill_dialog_models.h revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
1b0ddf227b25388ad836e560c00f0aec84026b0e5Alexey Samsonov// Copyright (c) 2012 The Chromium Authors. All rights reserved.
21e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// Use of this source code is governed by a BSD-style license that can be
31e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// found in the LICENSE file.
41e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
51e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#ifndef CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_
61e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#define CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_
71e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
81e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#include <string>
91e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#include <vector>
101e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
111e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#include "base/basictypes.h"
121e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#include "base/compiler_specific.h"
131e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#include "base/strings/string16.h"
141e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#include "ui/base/models/combobox_model.h"
15938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov#include "ui/base/models/simple_menu_model.h"
161e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
17938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanovnamespace autofill {
181e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
19938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanovclass SuggestionsMenuModel;
201e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
21938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanovclass SuggestionsMenuModelDelegate {
221e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany public:
23938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov  virtual ~SuggestionsMenuModelDelegate();
241e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
25938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov  // Called when a suggestions menu is about to show.
261e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual void SuggestionsMenuWillShow() = 0;
271e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
281e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // Called when a menu item has been activated.
29938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov  virtual void SuggestionItemSelected(SuggestionsMenuModel* model,
301e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany                                      size_t index) = 0;
31938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov};
321e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
33938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov// A model for the dropdowns that allow the user to select from different
341e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// sets of known data. It wraps a SimpleMenuModel, providing a mapping between
35938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov// index and item GUID.
361e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryanyclass SuggestionsMenuModel : public ui::SimpleMenuModel,
37938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov                             public ui::SimpleMenuModel::Delegate {
381e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany public:
39938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov  explicit SuggestionsMenuModel(SuggestionsMenuModelDelegate* delegate);
401e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual ~SuggestionsMenuModel();
411e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
421e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // Adds an item and its identifying key to the model. Keys needn't be unique.
431e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  void AddKeyedItem(const std::string& key, const string16& display_label);
44938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov
45938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov  // As above, but also accepts an image which will be displayed alongside the
46938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov  // text.
471e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  void AddKeyedItemWithIcon(const std::string& key,
481e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany                            const string16& display_label,
492dcf44991a8ec1ca7c8051eb27c5ff158530bdc3Timur Iskhodzhanov                            const gfx::Image& icon);
50938106753364d96cedc11cbdc35a15030fb44d0cTimur Iskhodzhanov
511e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // Adds a label with a minor text and its identifying key to the model.
521e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // Keys needn't be unique.
531e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  void AddKeyedItemWithMinorText(const std::string& key,
541e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany                                const string16& display_label,
551e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany                                const string16& display_minor_text);
561e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
571e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // As above, but also accepts an image which will be displayed alongside the
581e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // text.
591e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  void AddKeyedItemWithMinorTextAndIcon(const std::string& key,
6013ebae606b526399771e9cca1d6a9d24458ad0f1Kostya Serebryany                                        const string16& display_label,
6113ebae606b526399771e9cca1d6a9d24458ad0f1Kostya Serebryany                                        const string16& display_minor_text,
6213ebae606b526399771e9cca1d6a9d24458ad0f1Kostya Serebryany                                        const gfx::Image& icon);
63badab16503e025326a46a45da8faa6fd20e5fc3dKostya Serebryany
64badab16503e025326a46a45da8faa6fd20e5fc3dKostya Serebryany  // Resets the model to empty.
6513ebae606b526399771e9cca1d6a9d24458ad0f1Kostya Serebryany  void Reset();
6613ebae606b526399771e9cca1d6a9d24458ad0f1Kostya Serebryany
6713ebae606b526399771e9cca1d6a9d24458ad0f1Kostya Serebryany  // Returns the ID key for the item at |index|.
6813ebae606b526399771e9cca1d6a9d24458ad0f1Kostya Serebryany  std::string GetItemKeyAt(int index) const;
691e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
701e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // Returns the ID key for the item at |checked_item_|, or an empty string if
711e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // there are no items.
721e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  std::string GetItemKeyForCheckedItem() const;
731e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
741e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // Sets which item is checked.
751e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  void SetCheckedItem(const std::string& item_key);
761e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  void SetCheckedIndex(size_t index);
771e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
781e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  int checked_item() const { return checked_item_; }
791e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
801e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // Enable/disable an item by key.
811e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  void SetEnabled(const std::string& item_key, bool enabled);
821e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
831e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // ui::SimpleMenuModel implementation.
841e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual void MenuWillShow() OVERRIDE;
851e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
861e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // ui::SimpleMenuModel::Delegate implementation.
871e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
881e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
891e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual bool GetAcceleratorForCommandId(
901e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany      int command_id,
911e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany      ui::Accelerator* accelerator) OVERRIDE;
921e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
93e0e9eea99d7a81a15c4bb15ff2e5ebd92b50817bEvgeniy Stepanov  virtual void MenuWillShow(ui::SimpleMenuModel* source) OVERRIDE;
941e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
951e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany private:
961e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // Represents an item in this model.
971e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  struct Item {
987274eafceb832e1088f30b71652992787ba8c456Evgeniy Stepanov    std::string key;  //  The key of the item.
991e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany    bool enabled;  // Whether the item is selectable.
1004dd8ba8238b1b698953628affe6e5b2edf3b3e3fAlexey Samsonov  };
1011e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // The items this model represents in presentation order.
10276e842845c927e92c2c21c41ac51e364fa17528cAlexey Samsonov  // Note: the index in this vector is the |command_id| of the item.
1031e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  std::vector<Item> items_;
1041e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
1051e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // Returns the command id (and index) of the item by the |key|.
1061e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  size_t GetItemIndex(const std::string& item_key);
1071e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
1081e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  SuggestionsMenuModelDelegate* delegate_;
1091e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
1101e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // The command id (and index) of the item which is currently checked. Only one
1111e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // item is checked at a time.
1121e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  int checked_item_;
1131e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
1141e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  DISALLOW_COPY_AND_ASSIGN(SuggestionsMenuModel);
1151e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany};
11676e842845c927e92c2c21c41ac51e364fa17528cAlexey Samsonov
1171e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// A model for possible months in the Gregorian calendar.
1181e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryanyclass MonthComboboxModel : public ui::ComboboxModel {
1191e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany public:
1201e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  MonthComboboxModel();
1211e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual ~MonthComboboxModel();
1221e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
12376e842845c927e92c2c21c41ac51e364fa17528cAlexey Samsonov  static string16 FormatMonth(int index);
1241e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
1251e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // ui::Combobox implementation:
1261e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual int GetItemCount() const OVERRIDE;
1271e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual string16 GetItemAt(int index) OVERRIDE;
12876e842845c927e92c2c21c41ac51e364fa17528cAlexey Samsonov
1291e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany private:
1301e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  DISALLOW_COPY_AND_ASSIGN(MonthComboboxModel);
1311e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany};
1321e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
1331e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// A model for years between now and a decade hence.
1341e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryanyclass YearComboboxModel : public ui::ComboboxModel {
1351e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany public:
1361e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  YearComboboxModel();
1371e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual ~YearComboboxModel();
1381e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
1391e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  // ui::Combobox implementation:
1401e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual int GetItemCount() const OVERRIDE;
1411e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  virtual string16 GetItemAt(int index) OVERRIDE;
1421e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
1431e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany private:
1442697687059e64a4f1319dc23a0a3ca59982d53f6Kostya Serebryany  // The current year (e.g., 2012).
1452697687059e64a4f1319dc23a0a3ca59982d53f6Kostya Serebryany  int this_year_;
1461e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
1471e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany  DISALLOW_COPY_AND_ASSIGN(YearComboboxModel);
1481e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany};
1491e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
1501e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany}  // namespace autofill
1511e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany
1521e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#endif  // CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_
1531e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany