1// Copyright 2014 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 UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_IMPL_COCOA_H_
6#define UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_IMPL_COCOA_H_
7
8#include "ui/views/controls/menu/menu_runner_impl_interface.h"
9
10#import "base/mac/scoped_nsobject.h"
11#include "base/time/time.h"
12
13@class MenuController;
14
15namespace views {
16namespace internal {
17
18// A menu runner implementation that uses NSMenu to show a context menu.
19class VIEWS_EXPORT MenuRunnerImplCocoa : public MenuRunnerImplInterface {
20 public:
21  explicit MenuRunnerImplCocoa(ui::MenuModel* menu);
22
23  virtual bool IsRunning() const OVERRIDE;
24  virtual void Release() OVERRIDE;
25  virtual MenuRunner::RunResult RunMenuAt(Widget* parent,
26                                          MenuButton* button,
27                                          const gfx::Rect& bounds,
28                                          MenuAnchorPosition anchor,
29                                          int32 run_types) OVERRIDE;
30  virtual void Cancel() OVERRIDE;
31  virtual base::TimeDelta GetClosingEventTime() const OVERRIDE;
32
33 private:
34  virtual ~MenuRunnerImplCocoa();
35
36  // The Cocoa menu controller that this instance is bridging.
37  base::scoped_nsobject<MenuController> menu_controller_;
38
39  // Set if |running_| and Release() has been invoked.
40  bool delete_after_run_;
41
42  // The timestamp of the event which closed the menu - or 0.
43  base::TimeDelta closing_event_time_;
44
45  DISALLOW_COPY_AND_ASSIGN(MenuRunnerImplCocoa);
46};
47
48}  // namespace internal
49}  // namespace views
50
51#endif  // UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_IMPL_COCOA_H_
52