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