15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_BASE_MODELS_SIMPLE_MENU_MODEL_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_BASE_MODELS_SIMPLE_MENU_MODEL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/menu_model.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Image;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ButtonMenuItemModel;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A simple MenuModel implementation with an imperative API for adding menu
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// items. This makes it easy to construct fixed menus. Menus populated by
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dynamic data sources may be better off implementing MenuModel directly.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The breadth of MenuModel is not exposed through this API.
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class UI_BASE_EXPORT SimpleMenuModel : public MenuModel {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  class UI_BASE_EXPORT Delegate {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    virtual ~Delegate() {}
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Methods for determining the state of specific command ids.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual bool IsCommandIdChecked(int command_id) const = 0;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual bool IsCommandIdEnabled(int command_id) const = 0;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual bool IsCommandIdVisible(int command_id) const;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Gets the accelerator for the specified command id. Returns true if the
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // command id has a valid accelerator, false otherwise.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual bool GetAcceleratorForCommandId(
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        int command_id,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ui::Accelerator* accelerator) = 0;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // Some command ids have labels, sublabels, minor text and icons that change
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // over time.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual bool IsItemForCommandIdDynamic(int command_id) const;
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    virtual base::string16 GetLabelForCommandId(int command_id) const;
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    virtual base::string16 GetSublabelForCommandId(int command_id) const;
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    virtual base::string16 GetMinorTextForCommandId(int command_id) const;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Gets the icon for the item with the specified id, returning true if there
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // is an icon, false otherwise.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual bool GetIconForCommandId(int command_id,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     gfx::Image* icon) const;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Notifies the delegate that the item with the specified command id was
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // visually highlighted within the menu.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void CommandIdHighlighted(int command_id);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Performs the action associates with the specified command id.
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // The passed |event_flags| are the flags from the event which issued this
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // command and they can be examined to find modifier keys.
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual void ExecuteCommand(int command_id, int event_flags) = 0;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Notifies the delegate that the menu is about to show.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void MenuWillShow(SimpleMenuModel* source);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Notifies the delegate that the menu has closed.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void MenuClosed(SimpleMenuModel* source);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The Delegate can be NULL, though if it is items can't be checked or
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // disabled.
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit SimpleMenuModel(Delegate* delegate);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~SimpleMenuModel();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Methods for adding items to the model.
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void AddItem(int command_id, const base::string16& label);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddItemWithStringId(int command_id, int string_id);
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void AddCheckItem(int command_id, const base::string16& label);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddCheckItemWithStringId(int command_id, int string_id);
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void AddRadioItem(int command_id, const base::string16& label, int group_id);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddRadioItemWithStringId(int command_id, int string_id, int group_id);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Adds a separator of the specified type to the model.
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // - Adding a separator after another separator is always invalid if they
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   differ in type, but silently ignored if they are both NORMAL.
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // - Adding a separator to an empty model is invalid, unless they are NORMAL
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   or SPACING. NORMAL separators are silently ignored if the model is empty.
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddSeparator(MenuSeparatorType separator_type);
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Removes separators until the model's last entry is not a separator, or the
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // model is empty.
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveTrailingSeparators();
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These three methods take pointers to various sub-models. These models
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // should be owned by the same owner of this SimpleMenuModel.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddButtonItem(int command_id, ButtonMenuItemModel* model);
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void AddSubMenu(int command_id,
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                  const base::string16& label,
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                  MenuModel* model);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddSubMenuWithStringId(int command_id, int string_id, MenuModel* model);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Methods for inserting items into the model.
103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void InsertItemAt(int index, int command_id, const base::string16& label);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InsertItemWithStringIdAt(int index, int command_id, int string_id);
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InsertSeparatorAt(int index, MenuSeparatorType separator_type);
106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void InsertCheckItemAt(int index,
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         int command_id,
108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         const base::string16& label);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InsertCheckItemWithStringIdAt(int index, int command_id, int string_id);
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void InsertRadioItemAt(int index,
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         int command_id,
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         const base::string16& label,
113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         int group_id);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InsertRadioItemWithStringIdAt(
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int index, int command_id, int string_id, int group_id);
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void InsertSubMenuAt(int index,
117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       int command_id,
118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       const base::string16& label,
119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       MenuModel* model);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InsertSubMenuWithStringIdAt(
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int index, int command_id, int string_id, MenuModel* model);
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Remove item at specified index from the model.
1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  void RemoveItemAt(int index);
1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the icon for the item at |index|.
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetIcon(int index, const gfx::Image& icon);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Sets the sublabel for the item at |index|.
130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetSublabel(int index, const base::string16& sublabel);
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Sets the minor text for the item at |index|.
13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void SetMinorText(int index, const base::string16& minor_text);
13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clears all items. Note that it does not free MenuModel of submenu.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Clear();
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the index of the item that has the given |command_id|. Returns
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // -1 if not found.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int GetIndexOfCommandId(int command_id);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from MenuModel:
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasIcons() const OVERRIDE;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetItemCount() const OVERRIDE;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ItemType GetTypeAt(int index) const OVERRIDE;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ui::MenuSeparatorType GetSeparatorTypeAt(int index) const OVERRIDE;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetCommandIdAt(int index) const OVERRIDE;
148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual base::string16 GetLabelAt(int index) const OVERRIDE;
149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual base::string16 GetSublabelAt(int index) const OVERRIDE;
15058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual base::string16 GetMinorTextAt(int index) const OVERRIDE;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsItemDynamicAt(int index) const OVERRIDE;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetAcceleratorAt(int index,
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                ui::Accelerator* accelerator) const OVERRIDE;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsItemCheckedAt(int index) const OVERRIDE;
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetGroupIdAt(int index) const OVERRIDE;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetIconAt(int index, gfx::Image* icon) OVERRIDE;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ui::ButtonMenuItemModel* GetButtonMenuItemAt(
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int index) const OVERRIDE;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsEnabledAt(int index) const OVERRIDE;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsVisibleAt(int index) const OVERRIDE;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HighlightChangedTo(int index) OVERRIDE;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ActivatedAt(int index) OVERRIDE;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ActivatedAt(int index, int event_flags) OVERRIDE;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual MenuModel* GetSubmenuModelAt(int index) const OVERRIDE;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void MenuWillShow() OVERRIDE;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void MenuClosed() OVERRIDE;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetMenuModelDelegate(
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ui::MenuModelDelegate* menu_model_delegate) OVERRIDE;
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual MenuModelDelegate* GetMenuModelDelegate() const OVERRIDE;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_delegate(Delegate* delegate) { delegate_ = delegate; }
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Delegate* delegate() { return delegate_; }
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // One or more of the menu menu items associated with the model has changed.
176424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Do any handling if necessary.
177424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void MenuItemsChanged();
178424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct Item;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::vector<Item> ItemVector;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns |index|.
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int ValidateItemIndex(int index) const;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Functions for inserting items into |items_|.
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AppendItem(const Item& item);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InsertItemAtIndex(const Item& item, int index);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ValidateItem(const Item& item);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notify the delegate that the menu is closed.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnMenuClosed();
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ItemVector items_;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Delegate* delegate_;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MenuModelDelegate* menu_model_delegate_;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WeakPtrFactory<SimpleMenuModel> method_factory_;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SimpleMenuModel);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ui
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_BASE_MODELS_SIMPLE_MENU_MODEL_H_
209