1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_APP_LIST_APP_CONTEXT_MENU_H_
6#define CHROME_BROWSER_UI_APP_LIST_APP_CONTEXT_MENU_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/memory/scoped_ptr.h"
12#include "ui/base/models/simple_menu_model.h"
13
14class AppListControllerDelegate;
15class Profile;
16
17namespace extensions {
18class ContextMenuMatcher;
19}
20
21namespace app_list {
22
23class AppContextMenuDelegate;
24
25class AppContextMenu : public ui::SimpleMenuModel::Delegate {
26 public:
27  AppContextMenu(AppContextMenuDelegate* delegate,
28                 Profile* profile,
29                 const std::string& app_id,
30                 AppListControllerDelegate* controller);
31  virtual ~AppContextMenu();
32
33  // Note this could return NULL if corresponding extension is gone.
34  ui::MenuModel* GetMenuModel();
35
36  void set_is_platform_app(bool is_platform_app) {
37    is_platform_app_ = is_platform_app;
38  }
39  void set_is_search_result(bool is_search_result) {
40    is_search_result_ = is_search_result;
41  }
42  void set_is_in_folder(bool is_in_folder) {
43    is_in_folder_ = is_in_folder;
44  }
45
46 private:
47  // ui::SimpleMenuModel::Delegate overrides:
48  virtual bool IsItemForCommandIdDynamic(int command_id) const OVERRIDE;
49  virtual base::string16 GetLabelForCommandId(int command_id) const OVERRIDE;
50  virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
51  virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
52  virtual bool GetAcceleratorForCommandId(
53      int command_id,
54      ui::Accelerator* acclelrator) OVERRIDE;
55  virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
56
57  AppContextMenuDelegate* delegate_;
58  Profile* profile_;
59  const std::string app_id_;
60  AppListControllerDelegate* controller_;
61  bool is_platform_app_;
62  bool is_search_result_;
63  bool is_in_folder_;
64
65  scoped_ptr<ui::SimpleMenuModel> menu_model_;
66  scoped_ptr<extensions::ContextMenuMatcher> extension_menu_items_;
67
68  DISALLOW_COPY_AND_ASSIGN(AppContextMenu);
69};
70
71}  // namespace app_list
72
73#endif  // CHROME_BROWSER_UI_APP_LIST_APP_CONTEXT_MENU_H_
74