// Copyright © 2014 The CefSharp Authors. All rights reserved.
//
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
namespace CefSharp
{
///
/// Implement this interface to handle context menu events.
///
public interface IContextMenuHandler
{
///
/// Called before a context menu is displayed. The model can be cleared to show no context menu or
/// modified to show a custom menu.
///
/// the ChromiumWebBrowser control
/// the browser object
/// The frame the request is coming from
/// provides information about the context menu state
/// initially contains the default context menu
void OnBeforeContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
IMenuModel model);
///
/// Called to execute a command selected from the context menu. See
/// cef_menu_id_t for the command ids that have default implementations. All
/// user-defined command ids should be between MENU_ID_USER_FIRST and
/// MENU_ID_USER_LAST.
///
/// the ChromiumWebBrowser control
/// the browser object
/// The frame the request is coming from
/// will have the same values as what was passed to
/// menu command id
/// event flags
/// Return true if the command was handled or false for the default implementation.
bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
CefMenuCommand commandId, CefEventFlags eventFlags);
///
/// Called when the context menu is dismissed irregardless of whether the menu
/// was empty or a command was selected.
///
/// the ChromiumWebBrowser control
/// the browser object
/// The frame the request is coming from
void OnContextMenuDismissed(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame);
///
/// Called to allow custom display of the context menu.
/// For custom display return true and execute callback either synchronously or asynchronously with the selected command Id.
/// For default display return false. Do not keep references to parameters or model outside of this callback.
///
/// the ChromiumWebBrowser control
/// the browser object
/// The frame the request is coming from
/// provides information about the context menu state
/// contains the context menu model resulting from OnBeforeContextMenu
/// the callback to execute for custom display
/// For custom display return true and execute callback either synchronously or asynchronously with the selected command ID.
bool RunContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback);
}
}