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