// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_TOUCH_SELECTION_TOUCH_SELECTION_MENU_RUNNER_H_ #define UI_TOUCH_SELECTION_TOUCH_SELECTION_MENU_RUNNER_H_ #include "base/macros.h" #include "ui/touch_selection/ui_touch_selection_export.h" namespace aura { class Window; } namespace gfx { class Rect; class Size; } namespace ui { // Client interface for TouchSelectionMenuRunner. class UI_TOUCH_SELECTION_EXPORT TouchSelectionMenuClient { public: virtual ~TouchSelectionMenuClient() {} virtual bool IsCommandIdEnabled(int command_id) const = 0; virtual void ExecuteCommand(int command_id, int event_flags) = 0; // Called when the quick menu needs to run a context menu. Depending on the // implementation, this may run the context menu synchronously, or request the // menu to show up in which case the menu will run asynchronously at a later // time. virtual void RunContextMenu() = 0; }; // An interface for the singleton object responsible for running touch selection // quick menu. class UI_TOUCH_SELECTION_EXPORT TouchSelectionMenuRunner { public: virtual ~TouchSelectionMenuRunner(); static TouchSelectionMenuRunner* GetInstance(); // Checks whether there is any command available to show in the menu. virtual bool IsMenuAvailable( const TouchSelectionMenuClient* client) const = 0; // Creates and displays the quick menu, if there is any command available. // |anchor_rect| is in screen coordinates. virtual void OpenMenu(TouchSelectionMenuClient* client, const gfx::Rect& anchor_rect, const gfx::Size& handle_image_size, aura::Window* context) = 0; virtual void CloseMenu() = 0; virtual bool IsRunning() const = 0; protected: TouchSelectionMenuRunner(); private: DISALLOW_COPY_AND_ASSIGN(TouchSelectionMenuRunner); }; } // namespace ui #endif // UI_TOUCH_SELECTION_TOUCH_SELECTION_MENU_RUNNER_H_