1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_IMPL_COCOA_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_IMPL_COCOA_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/views/controls/menu/menu_runner_impl_interface.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#import "base/mac/scoped_nsobject.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/time/time.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@class MenuController;
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace views {
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace internal {
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// A menu runner implementation that uses NSMenu to show a context menu.
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass VIEWS_EXPORT MenuRunnerImplCocoa : public MenuRunnerImplInterface {
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  explicit MenuRunnerImplCocoa(ui::MenuModel* menu);
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool IsRunning() const OVERRIDE;
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Release() OVERRIDE;
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual MenuRunner::RunResult RunMenuAt(Widget* parent,
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                          MenuButton* button,
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                          const gfx::Rect& bounds,
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                          MenuAnchorPosition anchor,
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                          int32 run_types) OVERRIDE;
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Cancel() OVERRIDE;
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual base::TimeDelta GetClosingEventTime() const OVERRIDE;
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~MenuRunnerImplCocoa();
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // The Cocoa menu controller that this instance is bridging.
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::scoped_nsobject<MenuController> menu_controller_;
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Set if |running_| and Release() has been invoked.
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool delete_after_run_;
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // The timestamp of the event which closed the menu - or 0.
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::TimeDelta closing_event_time_;
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(MenuRunnerImplCocoa);
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace internal
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace views
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_IMPL_COCOA_H_
52