// Copyright © 2013 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
{
///
/// Supports creation and modification of menus. See for the command ids that have default implementations.
/// All user-defined command ids should be between and .
/// The methods of this class can only be accessed on the CEF UI thread, which by default is not the same as your application UI thread.
///
public interface IMenuModel
{
///
/// Returns the number of items in this menu.
///
int Count { get; }
///
/// Remove all menu items. Can be used to disable the context menu. Returns true on success.
///
/// Returns true on success
bool Clear();
///
/// Returns the label at the specified index or empty if not found due to
/// invalid range or the index being a separator.
///
/// specified index
/// Label or empty if not found due to invalid range or the index being a separator.
string GetLabelAt(int index);
///
/// Returns the command id at the specified index or -1 if not found due to invalid range or the index being a separator.
///
/// the index
/// Command or -1 if not found due to invalid range or the index being a separator.
CefMenuCommand GetCommandIdAt(int index);
///
/// Removes the item with the specified commandId.
///
/// the command Id
/// Returns true on success
bool Remove(CefMenuCommand commandId);
///
/// Add an item to the menu.
///
/// the command Id
/// the label of the item
/// Returns true on success.
bool AddItem(CefMenuCommand commandId, string label);
///
/// Add a separator to the menu.
///
/// Returns true on success.
bool AddSeparator();
///
/// Add a check item to the menu.
///
/// the command Id
/// the label of the item
/// Returns true on success.
bool AddCheckItem(CefMenuCommand commandId, string label);
///
/// Add a radio item to the menu. Only a single item with the specified groupId can be checked at a time.
///
/// the command Id
/// the label of the item
/// the group id
/// Returns true on success.
bool AddRadioItem(CefMenuCommand commandId, string label, int groupId);
///
/// Add a sub-menu to the menu. The new sub-menu is returned.
///
/// the command Id
/// the label of the item
/// Returns the newly created .
IMenuModel AddSubMenu(CefMenuCommand commandId, string label);
///
/// Insert a separator in the menu at the specified index.
///
/// index
/// Returns true on success.
bool InsertSeparatorAt(int index);
///
/// Insert an item in the menu at the specified index.
///
/// index
/// the command Id
/// the label of the item
/// Returns true on success.
bool InsertItemAt(int index, CefMenuCommand commandId, string label);
///
/// Insert a check item in the menu at the specified index.
///
/// index
/// the command Id
/// the label of the item
/// Returns true on success.
bool InsertCheckItemAt(int index, CefMenuCommand commandId, string label);
///
/// Insert a radio item in the menu at the specified index.
/// Only a single item with the specified groupId can be checked at a time.
///
/// index
/// the command Id
/// the label of the item
/// the group id
/// Returns true on success.
bool InsertRadioItemAt(int index, CefMenuCommand commandId, string label, int groupId);
///
/// Insert a sub-menu in the menu at the specified index.
///
/// index
/// the command Id
/// the label of the item
/// Returns the newly created .
IMenuModel InsertSubMenuAt(int index, CefMenuCommand commandId, string label);
///
/// Removes the item at the specified index.
///
/// index
/// Returns true on success.
bool RemoveAt(int index);
///
/// Returns the index associated with the specified commandId or -1 if not found due to the command id not existing in the menu.
///
/// the command Id
/// Returns the index associated with the specified commandId or -1 if not found due to the command id not existing in the menu.
int GetIndexOf(CefMenuCommand commandId);
///
/// Sets the command id at the specified index.
///
/// index
/// the command Id
/// Returns true on success.
bool SetCommandIdAt(int index, CefMenuCommand commandId);
///
/// Returns the label for the specified commandId or empty if not found.
///
/// the command Id
/// Returns the label for the specified commandId or empty if not found.
string GetLabel(CefMenuCommand commandId);
///
/// Sets the label for the specified commandId.
///
/// the command Id
/// the label
/// Returns true on success.
bool SetLabel(CefMenuCommand commandId, string label);
///
/// Set the label at the specified index.
///
/// index
/// the label
/// Returns true on success.
bool SetLabelAt(int index, string label);
///
/// Returns the item type for the specified commandId.
///
/// the command Id
/// Returns the item type for the specified commandId.
MenuItemType GetType(CefMenuCommand commandId);
///
/// Returns the item type at the specified index.
///
/// index
/// Returns the item type at the specified index.
MenuItemType GetTypeAt(int index);
///
/// Returns the group id for the specified commandId or -1 if invalid.
///
/// the command Id
/// Returns the group id for the specified commandId or -1 if invalid.
int GetGroupId(CefMenuCommand commandId);
///
/// Returns the group id at the specified index or -1 if invalid.
///
/// index
/// Returns the group id at the specified index or -1 if invalid.
int GetGroupIdAt(int index);
///
/// Sets the group id for the specified commandId.
///
/// the command Id
/// the group id
/// Returns true on success.
bool SetGroupId(CefMenuCommand commandId, int groupId);
///
/// Sets the group id at the specified index.
///
/// index
/// the group id
/// Returns true on success.
bool SetGroupIdAt(int index, int groupId);
///
/// Returns the for the specified commandId or null if invalid.
///
/// the command Id
/// Returns the for the specified commandId or null if invalid.
IMenuModel GetSubMenu(CefMenuCommand commandId);
///
/// Returns the at the specified index or empty if invalid.
///
/// index
/// Returns the for the specified commandId or null if invalid.
IMenuModel GetSubMenuAt(int index);
///
/// Returns true if the specified commandId is visible.
///
/// the command Id
/// Returns true if the specified commandId is visible.
bool IsVisible(CefMenuCommand commandId);
///
/// Returns true if the specified index is visible.
///
/// index
/// Returns true if the specified index is visible.
bool IsVisibleAt(int index);
///
/// Change the visibility of the specified commandId.
///
/// the command Id
/// visible
/// Returns true on success.
bool SetVisible(CefMenuCommand commandId, bool visible);
///
/// Change the visibility at the specified index.
///
/// index
/// visible
/// Returns true on success.
bool SetVisibleAt(int index, bool visible);
///
/// Returns true if the specified commandId is enabled.
///
/// the command Id
/// Returns true if the specified commandId is enabled.
bool IsEnabled(CefMenuCommand commandId);
///
/// Returns true if the specified index is enabled.
///
/// index
/// Returns true if the specified index is enabled.
bool IsEnabledAt(int index);
///
/// Change the enabled status of the specified commandId.
///
/// the command Id
/// is enabled
/// Returns true on success.
bool SetEnabled(CefMenuCommand commandId, bool enabled);
///
/// Change the enabled status at the specified index.
///
/// index
/// is enabled
/// Returns true on success.
bool SetEnabledAt(int index, bool enabled);
///
/// Returns true if the specified commandId is checked. Only applies to check and radio items.
///
/// the command Id
/// Returns true if the specified commandId is checked. Only applies to check and radio items.
bool IsChecked(CefMenuCommand commandId);
///
/// Returns true if the specified index is checked. Only applies to check and radio items.
///
/// index
/// Returns true if the specified index is checked. Only applies to check and radio items.
bool IsCheckedAt(int index);
///
/// Check the specified commandId. Only applies to check and radio items.
///
/// the command Id
/// set checked
/// Returns true on success.
bool SetChecked(CefMenuCommand commandId, bool isChecked);
///
/// Check the specified index. Only applies to check and radio items.
///
/// index
/// set checked
/// Returns true on success.
bool SetCheckedAt(int index, bool isChecked);
///
/// Returns true if the specified commandId has a keyboard accelerator assigned.
///
/// the command Id
/// Returns true if the specified commandId has a keyboard accelerator assigned.
bool HasAccelerator(CefMenuCommand commandId);
///
/// Returns true if the specified index has a keyboard accelerator assigned.
///
/// index
/// Returns true if the specified index has a keyboard accelerator assigned.
bool HasAcceleratorAt(int index);
///
/// Set the keyboard accelerator for the specified commandId.
///
/// the command Id
/// keyCode can be any key or character value.
/// shift key pressed
/// ctrl key pressed
/// alt key pressed
/// Returns true on success.
bool SetAccelerator(CefMenuCommand commandId, int keyCode, bool shiftPressed, bool ctrlPressed, bool altPressed);
///
/// Set the keyboard accelerator at the specified index. keyCode can be any key or character value.
///
/// index
/// keyCode can be any key or character value.
/// shift key pressed
/// ctrl key pressed
/// alt key pressed
/// Returns true on success.
bool SetAcceleratorAt(int index, int keyCode, bool shiftPressed, bool ctrlPressed, bool altPressed);
///
/// Remove the keyboard accelerator for the specified commandId.
///
/// the command Id
/// Returns true on success.
bool RemoveAccelerator(CefMenuCommand commandId);
///
/// Remove the keyboard accelerator at the specified index.
///
/// index
/// Returns true on success.
bool RemoveAcceleratorAt(int index);
///
/// Retrieves the keyboard accelerator for the specified commandId.
///
/// the command Id
/// keyCode can be any key or character value.
/// shift key pressed
/// ctrl key pressed
/// alt key pressed
/// Returns true on success.
bool GetAccelerator(CefMenuCommand commandId, out int keyCode, out bool shiftPressed, out bool ctrlPressed, out bool altPressed);
///
/// Retrieves the keyboard accelerator for the specified index.
///
/// index
/// keyCode can be any key or character value.
/// shift key pressed
/// ctrl key pressed
/// alt key pressed
/// Returns true on success.
bool GetAcceleratorAt(int index, out int keyCode, out bool shiftPressed, out bool ctrlPressed, out bool altPressed);
}
}