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