12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/models/combobox_model.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/models/simple_menu_model.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace autofill { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SuggestionsMenuModel; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SuggestionsMenuModelDelegate { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~SuggestionsMenuModelDelegate(); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when a menu item has been activated. 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SuggestionItemSelected(SuggestionsMenuModel* model, 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t index) = 0; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A model for the dropdowns that allow the user to select from different 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// sets of known data. It wraps a SimpleMenuModel, providing a mapping between 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// index and item GUID. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SuggestionsMenuModel : public ui::SimpleMenuModel, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public ui::SimpleMenuModel::Delegate { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit SuggestionsMenuModel(SuggestionsMenuModelDelegate* delegate); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~SuggestionsMenuModel(); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds an item and its identifying key to the model. Keys needn't be unique. 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void AddKeyedItem(const std::string& key, 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_label); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // As above, but also accepts an image which will be displayed alongside the 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // text. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddKeyedItemWithIcon(const std::string& key, 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_label, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Image& icon); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Adds a label with a minor text and its identifying key to the model. 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Keys needn't be unique. 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void AddKeyedItemWithMinorText(const std::string& key, 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_label, 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_minor_text); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // As above, but also accepts an image which will be displayed alongside the 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // text. 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void AddKeyedItemWithMinorTextAndIcon( 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& key, 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_label, 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& display_minor_text, 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const gfx::Image& icon); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Resets the model to empty. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Reset(); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the ID key for the item at |index|. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string GetItemKeyAt(int index) const; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the ID key for the item at |checked_item_|, or an empty string if 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // there are no items. 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string GetItemKeyForCheckedItem() const; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Sets which item is checked. 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetCheckedItem(const std::string& item_key); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetCheckedIndex(size_t index); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int checked_item() const { return checked_item_; } 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Enable/disable an item by key. 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void SetEnabled(const std::string& item_key, bool enabled); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ui::SimpleMenuModel::Delegate implementation. 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool GetAcceleratorForCommandId( 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int command_id, 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator* accelerator) OVERRIDE; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Represents an item in this model. 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) struct Item { 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string key; // The key of the item. 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool enabled; // Whether the item is selectable. 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }; 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The items this model represents in presentation order. 9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Note: the index in this vector is the |command_id| of the item. 9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::vector<Item> items_; 9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns the command id (and index) of the item by the |key|. 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) size_t GetItemIndex(const std::string& item_key); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SuggestionsMenuModelDelegate* delegate_; 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The command id (and index) of the item which is currently checked. Only one 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // item is checked at a time. 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int checked_item_; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SuggestionsMenuModel); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A model for possible months in the Gregorian calendar. 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MonthComboboxModel : public ui::ComboboxModel { 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MonthComboboxModel(); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MonthComboboxModel(); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static base::string16 FormatMonth(int index); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ui::Combobox implementation: 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int GetItemCount() const OVERRIDE; 122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual base::string16 GetItemAt(int index) OVERRIDE; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MonthComboboxModel); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A model for years between now and a decade hence. 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class YearComboboxModel : public ui::ComboboxModel { 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) YearComboboxModel(); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~YearComboboxModel(); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ui::Combobox implementation: 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int GetItemCount() const OVERRIDE; 136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual base::string16 GetItemAt(int index) OVERRIDE; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The current year (e.g., 2012). 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int this_year_; 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(YearComboboxModel); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace autofill 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_DIALOG_MODELS_H_ 148