Class ContextMenuTool
The ContextMenuTool is used to create and show a context menu. It automatically disables any browser context menu.
Namespace: Northwoods.Go.Tools
Assembly: Northwoods.GoDiagram.Avalonia.dll
Syntax
public class ContextMenuTool : Tool
Remarks
Define context menus on individual GraphObjects by setting ContextMenu. Define a context menu for the diagram background by setting ContextMenu.
This tool is a standard mouse-down tool, the ContextMenuTool.
This tool does not utilize any tool handles. This tool does not modify the model or conduct any transaction, although any code invoked by context menu commands might do so.
There are examples of customizing this tool in the Custom Context Menu and HTML LightBox Context Menu samples.
If you want to programmatically show a context menu for a particular GraphObject or for the whole diagram, call ShowContextMenu(IHasContextMenu). That command method is also invoked by the Menu key on the keyboard.
Normally this shows a context menu (if available) on a right-mouse-up event. If you want it to happen on a right-mouse-down event, you'll need to move this tool from the MouseUpTools list to the MouseDownTools list:
myDiagram.ToolManager.MouseDownTools.Add(myDiagram.ToolManager.ReplaceTool("ContextMenu", null));
Constructors
ContextMenuTool()
You do not normally need to create an instance of this tool because one already exists as the ContextMenuTool, which you can modify.
The Name of this tool is "ContextMenu".
Declaration
public ContextMenuTool()
Properties
CurrentContextMenu
Gets or sets the currently showing context menu, or null if there is none.
Declaration
public IShowHidable CurrentContextMenu { get; set; }
Property Value
Type | Description |
---|---|
IShowHidable |
Remarks
This is typically only set in ShowContextMenu(IShowHidable, GraphObject) and not by the user. It is also typically set to null in HideContextMenu().
CurrentElement
Gets or sets the GraphObject found at the mouse point that has a context menu.
Declaration
public GraphObject CurrentElement { get; set; }
Property Value
Type | Description |
---|---|
GraphObject |
Remarks
This property remembers the result returned by FindElementWithContextMenu(IHasContextMenu) if it is a GraphObject. This value is passed to ShowContextMenu(IShowHidable, GraphObject) as the second argument. The value will be null if the context menu is for the diagram rather than for a particular GraphObject.
DefaultTouchContextMenu
Gets or sets the Adornment that acts as the default touch context menu.
Declaration
public IShowHidable DefaultTouchContextMenu { get; set; }
Property Value
Type | Description |
---|---|
IShowHidable |
Remarks
On touch devices, this context menu will appear even there is no context menu defined.
You can disable this functionality by setting this property to null.
By default, this is null.
MouseDownPoint
This read-only property returns the original mouse-down point in document coordinates.
Declaration
public Point MouseDownPoint { get; }
Property Value
Type | Description |
---|---|
Point |
Methods
CanStart()
Return true if it's a single mouse right click that hasn't moved IsBeyondDragSize(Point?, Point?) and that is on a GraphObject with a ContextMenu. This is also true if the mouse right click is in the diagram background and the diagram's ContextMenu is non-null.
Declaration
public override bool CanStart()
Returns
Type | Description |
---|---|
bool |
Overrides
Remarks
On touch devices, a special default context menu will appear even if no object with a context menu is found.
This method may be overridden. Please read the Introduction page on Extensions for how to override methods and how to call this base method.
DoActivate()
Do nothing, activation is special and relies on DoMouseUp.
Declaration
public override void DoActivate()
Overrides
DoMouseDown()
Activate this but also execute the normal behavior that would happen on a mouse-up if this tool is in the MouseDownTools list. Perform DoMouseDown() if a ContextMenuButton was hit.
Declaration
public override void DoMouseDown()
Overrides
DoMouseMove()
Handle mouse-enter, mouse-over, and mouse-leave events, as well as tooltips.
Declaration
public override void DoMouseMove()
Overrides
DoMouseUp()
If there is something found by FindElementWithContextMenu(IHasContextMenu), call ShowContextMenu(IShowHidable, GraphObject) with that object"s ContextMenu or the ContextMenu.
Declaration
public override void DoMouseUp()
Overrides
Remarks
Once a context menu is being shown, if a click occurs on a part of the context menu, call StandardMouseClick(Func<GraphObject, GraphObject>). Otherwise if the click occurs elsewhere, just stop this tool. Unlike most tools, the first mouse-up should not stop this tool.
FindElementWithContextMenu(IHasContextMenu)
Find a GraphObject at the current mouse point with a ContextMenu, or return the Diagram if there is a ContextMenu.
Declaration
public virtual IHasContextMenu FindElementWithContextMenu(IHasContextMenu obj = null)
Parameters
Type | Name | Description |
---|---|---|
IHasContextMenu | obj | Optional GraphObject with which to start searching for a context menu. If null, the Diagram will be used. If no argument is specified, this method will look for an element at the current mouse point. |
Returns
Type | Description |
---|---|
IHasContextMenu | something with a |
Remarks
This method may be overridden. Please read the Introduction page on Extensions for how to override methods and how to call this base method.
HideContextMenu()
Hide any context menu.
Declaration
public virtual void HideContextMenu()
Remarks
This method may be overridden. Please read the Introduction page on Extensions for how to override methods and how to call this base method.
HideDefaultContextMenu()
This is the Hide(Diagram, Tool) method for the DefaultTouchContextMenu.
Declaration
public virtual void HideDefaultContextMenu()
Remarks
This method may be overridden. Please read the Introduction page on Extensions for how to override methods and how to call this base method.
PositionContextMenu(Adornment, GraphObject)
This is called by ShowContextMenu(IShowHidable, GraphObject) to position the context menu within the viewport.
Declaration
public virtual void PositionContextMenu(Adornment contextmenu, GraphObject obj)
Parameters
Type | Name | Description |
---|---|---|
Adornment | contextmenu | |
GraphObject | obj | The GraphObject getting the context menu, or null if the context menu is for the diagram background. |
Remarks
It normally goes just below the cursor. But if the mouse is too close to the right edge or the bottom edge of the viewport, it is positioned left and/or above the cursor.
This method only operates if the context menu, an Adornment, does not have a Placeholder. When there is a Placeholder in the context menu, that Adornment is automatically positioned so that the Placeholder is positioned at the adorned object, the second argument to this method.
This method may be overridden. Please read the Introduction page on Extensions for how to override methods and how to call this base method.
If you override this method to position the context menu, the context menu has already been measured but not arranged, so you can use its MeasuredBounds width and height but not its ActualBounds.
ShowContextMenu(IShowHidable, GraphObject)
Show an IShowHidable (such as an Adornment) as a context menu.
Declaration
public virtual void ShowContextMenu(IShowHidable contextmenu, GraphObject obj)
Parameters
Type | Name | Description |
---|---|---|
IShowHidable | contextmenu | |
GraphObject | obj | the GraphObject for which the context menu is being shown; this is null if the contextmenu is being shown for the diagram background. |
Remarks
This method is called by the context click (DoMouseDown()) and ShowContextMenu(IHasContextMenu). If you want to programmatically show a context menu for a particular GraphObject or for the whole diagram, do not call this method, which only does one small piece of the process of bringing up a context menu. Instead call ShowContextMenu(IHasContextMenu), which will start this tool and eventually call this method and handle additional input events.
For Adornment context menus: If the object's containing Part is data-bound,
this sets the context menu's Part.Data
to the same value.
The AdornedElement property is set to the GraphObject for which the menu is being shown.
This method sets the CurrentContextMenu.
This method may be overridden. Please read the Introduction page on Extensions for how to override methods and how to call this base method.
ShowDefaultContextMenu()
This is the Show(GraphObject, Diagram, Tool) method for the DefaultTouchContextMenu.
Declaration
public virtual void ShowDefaultContextMenu()
Remarks
If the object's containing Part is data-bound,
set the context menu's Part.Data
to the same value.
The AdornedElement property is set to the GraphObject
for which the menu is being shown.
This method may be overridden. Please read the Introduction page on Extensions for how to override methods and how to call this base method.