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