- I
Remarks
This class delegates most of the work to minor IInputMode implementations. However, it contains a number of properties that influence the general behavior:
- selectableItems – Determines the types of items that can be selected at all.
- selectablePredicate – Allows to further constrain selectableItems with a predicate.
- marqueeSelectableItems – Determines the types of items that can be selected with marquee selection and lasso selection.
- clickSelectableItems – Determines the types of items that can be selected by clicking or tapping them.
- detailSelectionRecognizer – Determines when to use a detail click selection mode, which allows for selecting the item that is directly under the mouse without taking into account the clickHitTestOrder.
- clickHitTestOrder – Determines the priorities for hit tests during mouse or stylus clicks or touch taps to determine which items should get click events.
- doubleClickHitTestOrder – Determines the priorities for hit tests when double-clicking items.
- movableSelectedItems – Determines the type of the items that can be moved with the mouse.
- showHandleItems – Determines the type of the items whose IHandles should be shown and movable by the handleInputMode.
- deletableItems – Determines the type of the items that can be deleted by deleteSelection.
- deletablePredicate – Allows to further constrain deletableItems with a predicate.
- labelEditableItems – Determines the type of the items that can have their labels edited.
- allowGroupingOperations – Determines whether this input mode should allow grouping operations at all.
- allowGroupSelection – Determines whether this input mode should allow grouping the current selection.
- allowUngroupSelection – Determines whether this input mode should allow ungrouping the current selection.
- allowClearSelection – Determines whether this input mode should allow clearing the selection. This has implications both for the DESELECT_ALL and for click/marquee selection which usually clear the selection unless the multiSelectionRecognizer is pressed.
- allowClipboardOperations – Determines whether this input mode should enable graph clipboard operations.
- allowDuplicate – Determines whether this input mode should enable GraphClipboard's duplicate operation.
- allowEditLabel – Determines whether this input mode should allow editing labels.
- allowReparentNodes – Determines whether this input mode should allow reparenting nodes to other groups.
- allowReparentToNonGroupNodes – Determines whether this input mode should allow reparenting nodes to other nodes which are not group nodes, transforming these into group nodes.
- allowAdjustGroupNodeSize – Determines whether the ADJUST_GROUP_NODE_SIZE command should be handled.
- allowCreateNode – Determines whether this input mode should allow creating new nodes via left mouse button clicks, stylus clicks or touch taps.
- allowCreateEdge – Determines whether createEdgeInputMode should be enabled to allow for creating new edges.
- allowEditLabelOnDoubleClick – Determines whether labels should be editable on otherwise unhandled double clicks or taps.
- allowReverseEdge – Determines whether edges can be reversed.
- allowCreateBend – Determines whether the createBendInputMode should be enabled to allow for creating new bends.
- allowEnterGroup – Determines whether the mode allows for entering group nodes in IFoldingViews.
- allowExitGroup – Determines whether the mode allows for exiting the current group node in IFoldingViews.
- allowCollapseGroup – Determines whether the mode allows for collapsing group nodes in IFoldingViews.
- allowExpandGroup – Determines whether the mode allows for expanding group nodes in IFoldingViews.
- hoverItems – Determines which items should be reported as being hovered through the corresponding event in this instance's ItemHoverInputMode.
By default, GraphEditorInputMode supports the following commands. Most of them have default keybindings:
- UNDO (Ctrl+Z) – Undoes the last operation. Can be disabled with allowUndoOperations.
- REDO (Ctrl+Y) – Redoes the last operation that was undone. Can be disabled with allowUndoOperations.
- SELECT_ALL (Ctrl+A) – Selects all items. Can be configured with selectableItems and selectablePredicate.
- DESELECT_ALL (Ctrl+Shift+A) – Clears the current selection. Can be disabled with allowClearSelection.
- CUT (Ctrl+X, Shift+Del) – Cuts the current selection and places it in the clipboard. Can be disabled with allowClipboardOperations.
- COPY (Ctrl+C, Ctrl+Ins) – Copies the current selection to the clipboard. Can be disabled with allowClipboardOperations.
- PASTE (Ctrl+V, Shift+Ins) – Pastes the current clipboard contents into the graph. Can be disabled with allowClipboardOperations.
- DUPLICATE (Ctrl+D) – Duplicates the current selection. Can be disabled with allowDuplicate.
- DELETE (Del) – Deletes the current selection. Can be configured with deletablePredicate and deletableItems.
- ADD_LABEL (Shift+F2) – Adds a new label to the selected item. Can be configured with labelEditableItems and disabled with allowAddLabel.
- EDIT_LABEL (F2) – Edits an existing label or adds a new one to the selected item. Can be configured with labelEditableItems and disabled with allowEditLabel.
- REVERSE_EDGE (Ctrl+R) – Reverses the direction of the selected edges. Can be disabled with allowReverseEdge.
- GROUP_SELECTION (Ctrl+G) – Creates a new group node and places the currently selected nodes into it. Can be disabled with allowGroupingOperations and allowGroupSelection.
- UNGROUP_SELECTION (Ctrl+U) – Makes each of the currently selected nodes a direct child of the root group. Can be disabled with allowGroupingOperations and allowUngroupSelection.
- ADJUST_GROUP_NODE_SIZE (Ctrl+Shift+G) – Adjusts the sizes of the selected group nodes to fit exactly around their contents. Can be disabled with allowGroupingOperations and allowAdjustGroupNodeSize.
- RAISE – Raises the visual representations of IModelItems.
- LOWER – Lowers the visual representations of IModelItems.
- TO_FRONT – Raises the visual representations of IModelItems to the front.
- TO_BACK – Lowers the visual representations of IModelItems to the back.
All commands can also be selectively disabled by using the availableCommands collection. Furthermore, there are a few commands provided by navigationInputMode:
- COLLAPSE_GROUP (Alt+Left) – Collapses the currently selected group nodes. Can be disabled with allowCollapseGroup of navigationInputMode.
- EXPAND_GROUP (Alt+Right) – Expands the currently selected group nodes. Can be disabled with allowExpandGroup of navigationInputMode.
- TOGGLE_EXPANSION_STATE (Alt+Shift+Left or Alt+Shift+Right) – Collapses expanded group nodes and expands collapsed group nodes in the current selection. Can be disabled with allowCollapseGroup and allowExpandGroup of navigationInputMode.
- ENTER_GROUP (Alt+Down) – Replaces the currently displayed graph with the contents of the selected group node. Can be disabled with allowEnterGroup of navigationInputMode.
- EXIT_GROUP (Alt+Up) – Replaces the currently displayed graph with the contents of the parent of the group node whose contents are currently displayed. Can be disabled with allowExitGroup of navigationInputMode.
GraphEditorInputMode can be configured to automatically adjust the content bounds of the graphComponent whenever the graph is changed using gestures.
This class contains a number of public methods that can be used to programmatically perform the corresponding actions, too.
Setting the nodeCreator to another instance or null changes the way nodes are created. Also, the various minor IInputMode instances can be disabled, to change the behavior, too.
This input mode manages a set of specialized input modes, each handling a specific part of the interaction with the graph. The following list details those along with their default priorities. Lower priorities come earlier when handling events.
- waitInputMode (−1) – Disables this input mode when layouts or animations run.
- keyboardInputMode (0) – Handles commands and arbitrary keyboard shortcuts.
- handleInputMode (10) – Deals with displaying handles on or around items and interacting with them.
- clickInputMode (20) – Handles mouse and stylus clicks and double-clicks as well as touch taps and double-taps.
- createEdgeInputMode (100) – Allows creating edges
- moveViewportInputMode (105) – Allows panning the viewport.
- moveSelectedItemsInputMode (110) – Allows moving selected items.
- moveUnselectedItemsInputMode (120) – Allows moving unselected items.
- createBendInputMode (130) – Allows creating bends on edges.
- lassoSelectionInputMode (150) – Allows dragging a lasso path to select items within it. Disabled by default.
- marqueeSelectionInputMode (160) – Allows dragging a rectangle to select items within it.
- itemHoverInputMode (200) – Provides events to indicate that the mouse pointer hovers over an item.
- navigationInputMode (210) – Provides general navigation facilities, such as navigating from one item to another with the arrow keys, collapsing, expanding, entering or exiting groups, as well as providing commands for those tasks.
- contextMenuInputMode (220) – Handles querying the context menu contents based on a location as well as preparing the menu for display.
- nodeDropInputMode (300) – Allows dropping nodes on the graphComponent, e.g. for dragging items from a palette.
- labelDropInputMode (310) – Allows dropping labels on the graphComponent, e.g. for dragging items from a palette.
- portDropInputMode (320) – Allows dropping ports on the graphComponent, e.g. for dragging items from a palette.
- toolTipInputMode (400) – Handles tool tips.
- editLabelInputMode (500) – Handles editing labels.
To enable single selection mode, disable MarqueeSelectionInputMode and set multiSelectionRecognizer to NEVER. Remove SELECT_ALL and TOGGLE_ITEM_SELECTION from availableCommands and from navigationInputMode.availableCommands. An example can be found in Demo.yFiles.Graph.Input.SingleSelection.
Examples
The GraphEditorInputMode can be installed by setting it as inputMode on the graphComponent it handles.
graphComponent.inputMode = new GraphEditorInputMode({
allowGroupingOperations: true,
snapContext: new GraphSnapContext(),
orthogonalEdgeEditingContext: new OrthogonalEdgeEditingContext({
enabled: false,
}),
})Note that the GraphEditorInputMode also supports grouping operations. This functionality, however, is disabled by default and has to be enabled. The following example shows how to enable grouping operations on the GraphEditorInputMode together with some detail settings:
// first and foremost: enable grouping operations at all
geim.allowGroupingOperations = true
// support grouping but not ungrouping the currently selected nodes
geim.allowGroupSelection = true
geim.allowUngroupSelection = false
// forbid adjusting the size with Ctrl-Shift-G
geim.allowAdjustGroupNodeSize = false
// allow adding nodes to other group nodes by moving
geim.allowReparentNodes = true
// also allow to add nodes to non-group nodes, transforming these into groups
geim.allowReparentToNonGroupNodes = true
// support navigation like opening and closing groups
geim.navigationInputMode.allowExpandGroup = true
geim.navigationInputMode.allowCollapseGroup = true
// forbid entering and exiting groups
geim.navigationInputMode.allowEnterGroup = false
geim.navigationInputMode.allowExitGroup = falseSelecting multiple items is supported by default. Enabling selection for only one or no selected item at once is described in the Developer's Guide and shown in the following example:
// disable marquee and lasso selection
geim.marqueeSelectionInputMode.enabled = false
geim.lassoSelectionInputMode.enabled = false
// disable multi selection with Ctrl-Click
geim.multiSelectionRecognizer = EventRecognizers.NEVER
// deactivate commands that can lead to multi selection
geim.availableCommands.remove(Command.TOGGLE_ITEM_SELECTION)
geim.availableCommands.remove(Command.SELECT_ALL)
geim.navigationInputMode.availableCommands.remove(
Command.EXTEND_SELECTION_LEFT,
)
geim.navigationInputMode.availableCommands.remove(
Command.EXTEND_SELECTION_UP,
)
geim.navigationInputMode.availableCommands.remove(
Command.EXTEND_SELECTION_DOWN,
)
geim.navigationInputMode.availableCommands.remove(
Command.EXTEND_SELECTION_RIGHT,
)
// disable selection of (possibly multiple) items
mode.pasteSelectableItems = GraphItemTypes.NONESee Also
- An overview of this input mode is given in the section Editing Graphs. Additionally, specific support for graph hierarchies is discussed in Supported User Interactions: Grouping .
Developer's Guide
API
- createEdgeInputMode, createBendInputMode, nodeDropInputMode
Demos
- Shows the multitude of events provided by the classes
IGraph,GraphComponent, and the Input Modes. - Shows the graph editing features of the graph component.
- Shows how to configure GraphEditorInputMode for single selection mode.
- Shows the default interaction gestures that are provided by class GraphEditorInputMode.
Members
Constructors
Parameters
Properties
Gets or sets a predicate that is queried to determine whether a label can be added to the given IModelItem.
Examples
mode.addLabelPredicate = (item) =>
item instanceof ILabelOwner && item.labels.size == 0See Also
Developer's Guide
Gets or sets a property that determines whether and how this instance should automatically adjust the contentBounds if the graph changes.
Property Value
Gets or sets a value determining whether the ADD_LABEL command should be handled.
true pressing Shift+F2 will start the label editor. By default, this feature is enabled.Examples
// forbid adding new labels
mode.allowAddLabel = false
// allow editing existing labels
mode.allowEditLabel = true
// start label editing on double click
mode.allowEditLabelOnDoubleClick = true
// only support editing node labels
mode.labelEditableItems = GraphItemTypes.NODE | GraphItemTypes.NODE_LABELSee Also
Developer's Guide
API
- ADD_LABEL
Gets or sets a value determining whether the ADJUST_GROUP_NODE_SIZE command should be handled.
This setting has no effect if grouping operations are generally disallowed by setting allowGroupingOperations to false.
The default value is true.
Examples
GraphEditorInputMode. Note that general grouping support has to be enabled explicitly with allowGroupingOperations:// first and foremost: enable grouping operations at all
geim.allowGroupingOperations = true
// support grouping but not ungrouping the currently selected nodes
geim.allowGroupSelection = true
geim.allowUngroupSelection = false
// forbid adjusting the size with Ctrl-Shift-G
geim.allowAdjustGroupNodeSize = false
// allow adding nodes to other group nodes by moving
geim.allowReparentNodes = true
// also allow to add nodes to non-group nodes, transforming these into groups
geim.allowReparentToNonGroupNodes = trueSee Also
Developer's Guide
API
- allowGroupingOperations, adjustGroupNodeSizes, adjustGroupNodeSize
Gets or sets a value determining whether the DESELECT_ALL command should be handled.
true.Examples
mode.allowClearSelection = truetrueExamples
mode.allowClipboardOperations = falseDefined in
GraphInputMode.allowClipboardOperationsGets or sets a value determining whether bend creation should be enabled.
This property delegates to createBendInputMode's enabled property.
The default value is true.
Examples
mode.allowCreateBend = true
mode.allowCreateEdge = true
mode.allowCreateNode = trueSee Also
Developer's Guide
Gets or sets a value determining whether edge creation should be enabled.
This property delegates to createEdgeInputMode's enabled property.
The default value is true.
Examples
mode.allowCreateBend = true
mode.allowCreateEdge = true
mode.allowCreateNode = trueSee Also
Developer's Guide
Gets or sets a value determining whether node creation by clicking on an empty canvas location is enabled.
To disable node creation via drag and drop gestures, the nodeDropInputMode must be disabled, too. However, it is disabled by default.
The default value is true.
Examples
mode.allowCreateBend = true
mode.allowCreateEdge = true
mode.allowCreateNode = trueSee Also
Developer's Guide
API
- nodeCreator, createNode
Gets or sets a value determining whether the DUPLICATE command should be handled.
This setting has no effect if clipboard operations are generally disallowed by setting allowClipboardOperations to false.
The default value is true.
Examples
mode.allowClipboardOperations = true
mode.allowDuplicate = true
mode.allowPaste = trueSee Also
Developer's Guide
Gets or sets a value determining whether the EDIT_LABEL command should be handled.
true pressing F2 will start the label editor. By default, this feature is enabled.Examples
// forbid adding new labels
mode.allowAddLabel = false
// allow editing existing labels
mode.allowEditLabel = true
// start label editing on double click
mode.allowEditLabelOnDoubleClick = true
// only support editing node labels
mode.labelEditableItems = GraphItemTypes.NODE | GraphItemTypes.NODE_LABELSee Also
Developer's Guide
API
- startLabelEditing, EDIT_LABEL
If enabled, double-clicking an item will automatically execute the EDIT_LABEL command.
This setting has no effect if label editing is generally disallowed by setting allowEditLabel to false.
The default value is true.
Examples
// forbid adding new labels
mode.allowAddLabel = false
// allow editing existing labels
mode.allowEditLabel = true
// start label editing on double click
mode.allowEditLabelOnDoubleClick = true
// only support editing node labels
mode.labelEditableItems = GraphItemTypes.NODE | GraphItemTypes.NODE_LABELSee Also
If enabled, starting to type will automatically edit the current label or create a new label with the typed text.
This setting has no effect if label editing is generally disallowed by setting allowEditLabel to false.
The default value is true.
See Also
Gets or sets a value indicating whether grouping operations like grouping selected nodes or moving nodes into group nodes should be enabled.
Setting this property to false effectively disables handling of all grouping commands. If this property is set to true the related properties allowGroupSelection, allowUngroupSelection, and allowReparentNodes allow for selectively enabling or disabling only certain grouping operations.
The default value is true.
Property Value
Examples
GraphEditorInputMode together with some detail settings:// first and foremost: enable grouping operations at all
geim.allowGroupingOperations = true
// support grouping but not ungrouping the currently selected nodes
geim.allowGroupSelection = true
geim.allowUngroupSelection = false
// forbid adjusting the size with Ctrl-Shift-G
geim.allowAdjustGroupNodeSize = false
// allow adding nodes to other group nodes by moving
geim.allowReparentNodes = true
// also allow to add nodes to non-group nodes, transforming these into groups
geim.allowReparentToNonGroupNodes = trueSee Also
Developer's Guide
API
- allowGroupSelection, allowUngroupSelection, allowAdjustGroupNodeSize, allowReparentNodes
Gets or sets a value determining whether the GROUP_SELECTION command should be handled.
This setting has no effect if grouping operations are generally disallowed by setting allowGroupingOperations to false.
The default value is true.
Examples
GraphEditorInputMode. Note that general grouping support has to be enabled explicitly with allowGroupingOperations:// first and foremost: enable grouping operations at all
geim.allowGroupingOperations = true
// support grouping but not ungrouping the currently selected nodes
geim.allowGroupSelection = true
geim.allowUngroupSelection = false
// forbid adjusting the size with Ctrl-Shift-G
geim.allowAdjustGroupNodeSize = false
// allow adding nodes to other group nodes by moving
geim.allowReparentNodes = true
// also allow to add nodes to non-group nodes, transforming these into groups
geim.allowReparentToNonGroupNodes = trueSee Also
Developer's Guide
API
- allowGroupingOperations, groupSelection
Gets or sets a value determining whether the PASTE command should be handled.
This setting has no effect if clipboard operations are generally disallowed by setting allowClipboardOperations to false.
The default value is true.
Examples
mode.allowClipboardOperations = true
mode.allowDuplicate = true
mode.allowPaste = trueSee Also
Developer's Guide
If set to false the reparentNodeHandler will effectively be disabled and not called anymore for reparenting operations.
This setting has no effect if grouping operations are generally disallowed by setting allowGroupingOperations to false.
The default value is true.
Examples
GraphEditorInputMode. Note that general grouping support has to be enabled explicitly with allowGroupingOperations:// first and foremost: enable grouping operations at all
geim.allowGroupingOperations = true
// support grouping but not ungrouping the currently selected nodes
geim.allowGroupSelection = true
geim.allowUngroupSelection = false
// forbid adjusting the size with Ctrl-Shift-G
geim.allowAdjustGroupNodeSize = false
// allow adding nodes to other group nodes by moving
geim.allowReparentNodes = true
// also allow to add nodes to non-group nodes, transforming these into groups
geim.allowReparentToNonGroupNodes = trueSee Also
Developer's Guide
API
- reparentNodeHandler
Gets or sets a value indicating whether moving nodes into non-group nodes is allowed to convert them into group nodes.
If reparenting nodes is allowed in general and this property is enabled, users may reparent nodes not only to groups and folders but also to non-group nodes. Still, the decision about the final acceptance of the reparenting and the actual execution are delegated to the reparentNodeHandler.
This setting has no effect if grouping operations are generally disallowed by setting allowGroupingOperations to false.
The default value is false.
Examples
GraphEditorInputMode. Note that general grouping support has to be enabled explicitly with allowGroupingOperations:// first and foremost: enable grouping operations at all
geim.allowGroupingOperations = true
// support grouping but not ungrouping the currently selected nodes
geim.allowGroupSelection = true
geim.allowUngroupSelection = false
// forbid adjusting the size with Ctrl-Shift-G
geim.allowAdjustGroupNodeSize = false
// allow adding nodes to other group nodes by moving
geim.allowReparentNodes = true
// also allow to add nodes to non-group nodes, transforming these into groups
geim.allowReparentToNonGroupNodes = trueSee Also
Gets or sets a value indicating whether the REVERSE_EDGE command should be handled.
If set to false the methods reverseEdge, reverseEdges, and reverseSelectedEdges do nothing.
The default value is true.
Note that even if this feature is enabled, an UndoEngine needs to be available in the parentInputModeContext in order to work.
Setting this property to false effectively disables handling of the commands UNDO and REDO. Note that this property is not respected when calling undo or redo directly.
The default value is true.
See Also
Gets or sets a value determining whether the UNGROUP_SELECTION command should be handled.
This setting has no effect if grouping operations are generally disallowed by setting allowGroupingOperations to false.
The default value is true.
Examples
GraphEditorInputMode. Note that general grouping support has to be enabled explicitly with allowGroupingOperations:// first and foremost: enable grouping operations at all
geim.allowGroupingOperations = true
// support grouping but not ungrouping the currently selected nodes
geim.allowGroupSelection = true
geim.allowUngroupSelection = false
// forbid adjusting the size with Ctrl-Shift-G
geim.allowAdjustGroupNodeSize = false
// allow adding nodes to other group nodes by moving
geim.allowReparentNodes = true
// also allow to add nodes to non-group nodes, transforming these into groups
geim.allowReparentToNonGroupNodes = trueSee Also
Developer's Guide
API
- allowGroupingOperations, ungroupSelection
Gets a collection of commands that this input mode will handle.
Defined in
GraphInputMode.availableCommandsGets or sets which types of items should be reported through the item click events.
This also affects taps.
The default is ALL.
Examples
mode.clickableItems = GraphItemTypes.NODE | GraphItemTypes.EDGESee Also
Defined in
GraphInputMode.clickableItemsGets or sets a predicate that is queried to determine whether an item can be clicked.
See Also
Defined in
GraphInputMode.clickablePredicateGets or sets the order of the types of items that should be used to determine what item has been clicked or tapped.
Change this field to adjust which items will be selected if there are multiple items at a given location. The default order is the Z-Order but with a prioritization for elements behind labels. shouldSkipHitLabel.
Arrays that contain strings describing the name of GraphItemTypes are converted to an array of GraphItemTypes. For example:
['node', 'edge']
['NODE', 'EDGE']Examples
mode.clickHitTestOrder = [
GraphItemTypes.BEND,
GraphItemTypes.NODE | GraphItemTypes.EDGE,
GraphItemTypes.LABEL,
]See Also
Defined in
GraphInputMode.clickHitTestOrderGets or sets the ClickInputMode that is used by this instance to determine clicks.
Whenever the mode detects a click, this mode will use the IHitTester from the parentInputModeContext to determine the items being hit. If they match the clickableItems type, the item-clicked event will be triggered. If they are focusable, the item will be set as the current item.
Upon change, the onClickInputModeChanged method will be called.
By default, this input mode has a priority of 20.
Examples
mode.clickInputMode.enabled = falseSee Also
Defined in
GraphInputMode.clickInputModeGets or sets which types of items should be selectable by mouse clicks.
Examples
// Nodes, edges, and bends are selectable
mode.selectableItems =
GraphItemTypes.NODE | GraphItemTypes.EDGE | GraphItemTypes.BEND
// Only nodes and bends are selectable by marquee selection
mode.marqueeSelectableItems = GraphItemTypes.NODE | GraphItemTypes.BEND
// Only nodes and edges are selectable by click selection
mode.clickSelectableItems = GraphItemTypes.NODE | GraphItemTypes.EDGESee Also
Defined in
GraphInputMode.clickSelectableItemsGets or sets a predicate that is queried to determine whether an item should be selected when clicked with the primary mouse button.
See Also
Defined in
GraphInputMode.clickSelectablePredicateGets or sets the margins to use for updateContentBounds in adjustContentBounds calls.
Gets or sets the ContextMenuInputMode which handles context menus on a CanvasComponent.
Upon change, the onContextMenuInputModeChanged method will be called.
By default, this input mode has a priority of 220.
Examples
mode.contextMenuInputMode.enabled = false// mode is either an instance of GraphEditorInputMode or GraphViewerInputMode
mode.contextMenuItems = GraphItemTypes.NODE
mode.addEventListener('populate-item-context-menu', (evt) => {
// Get the node which is handled or null if the item is not a node
const node = evt.item
// Create the context menu items
if (node !== null) {
// Create a menu item to delete the node
// Show the menu
evt.contextMenu = [
{ label: 'Delete Item', action: () => graph.remove(node) },
]
}
})Defined in
GraphInputMode.contextMenuInputModeGets or sets the types of items a context menu should be queried for.
Examples
// mode is either an instance of GraphEditorInputMode or GraphViewerInputMode
mode.contextMenuItems = GraphItemTypes.NODE
mode.addEventListener('populate-item-context-menu', (evt) => {
// Get the node which is handled or null if the item is not a node
const node = evt.item
// Create the context menu items
if (node !== null) {
// Create a menu item to delete the node
// Show the menu
evt.contextMenu = [
{ label: 'Delete Item', action: () => graph.remove(node) },
]
}
})Defined in
GraphInputMode.contextMenuItemsGets the installed controller.
Defined in
MultiplexingInputMode.controllerGets or sets the CreateBendInputMode which handles interactive bend creation on existing edges.
Upon change, the onCreateBendInputModeChanged method will be called.
By default, this input mode has a priority of 130.
Examples
mode.createBendInputMode.enabled = falseNote that in order to disable interactive bend creation, one has to disable bend creation during edge creation, too:
// mode is an instance of GraphEditorInputMode
mode.createBendInputMode.enabled = false
mode.createEdgeInputMode.allowCreateBend = falseBy default, dragging on selected edges will move the edge. In order to start bend creation on selected edges, too, the CreateBendInputMode has to be set to a higher priority than the MoveInputMode which handles moving the edge.
mode.createBendInputMode.priority =
mode.moveSelectedItemsInputMode.priority - 1See Also
Developer's Guide
Gets or sets the CreateEdgeInputMode which handles interactive edge creation.
Upon change, the onCreateEdgeInputModeChanged method will be called.
By default, this input mode has a priority of 100.
Examples
mode.createEdgeInputMode.enabled = falseSee Also
- An overview of this input mode is given in the section Creating Edges. Additionally, customization of edge creation is discussed in section Customizing User Interaction: Creating Edges .
Developer's Guide
Gets or sets which types of items should be selected after creation.
Examples
mode.creationSelectableItems = GraphItemTypes.NODE | GraphItemTypes.EDGESee Also
Gets or sets the event recognizer that determines if a click or tap should cycle through all the items that are currently under the mouse cursor.
If the recognizer determines that the user wanted to use the cyclic click selection behavior, the hitTester will be queried for the given item and previously reported items will be ignored. E.g. if multiple nodes are overlapping each other, clicking on them will report the first item for the first click, the second one for the second click and so on. If all elements have been reported previously, the first one is going to be reported again. If the order of the elements at the clicked location changes, the cyclic selection is restarted anew.
The default is ALT_IS_DOWN.
Property Value
Sample Graphs
Defined in
GraphInputMode.cyclicSelectionRecognizerGets or sets the cursor to use whenever no child mode prefers a different cursor.
nullSee Also
Developer's Guide
API
- adjustCursor
Defined in
MultiplexingInputMode.defaultCursorGets or sets which types of items may be deleted using the deleteSelection action.
Examples
mode.deletableItems = GraphItemTypes.NODE | GraphItemTypes.EDGESee Also
Developer's Guide
API
- deletablePredicate
Gets or sets a predicate that is queried to determine whether an IModelItem can be deleted or not.
Examples
mode.selectablePredicate = (item: IModelItem): boolean =>
item.tag === 'I am selectable'See Also
Developer's Guide
Gets or sets the event recognizer that determines if a click or tap should select the item that is currently visible under the pointer cursor, without giving more important items higher priority.
If the recognizer determines that the user wanted to use the detail clicking behavior, the hitTester will be queried for the given item and the first item that is returned will be considered a hit. Otherwise, all hit items are examined and are prioritized by item type. E.g. by default clicking on a node will select the node, even if there is a node label which has been clicked at the same point. If detail selection is recognized, the label will be selected.
The default is SHIFT_IS_DOWN.
Property Value
Examples
mode.detailSelectionRecognizer = EventRecognizers.SHIFT_IS_DOWNSample Graphs
Defined in
GraphInputMode.detailSelectionRecognizerGets or sets a predicate that is queried to determine whether an item can be double clicked.
See Also
Defined in
GraphInputMode.doubleClickablePredicateGets or sets the order of the types of items that should be used to determine what item has been double-clicked or double-tapped.
Change this field to adjust which items will be considered when double-clicked if there are multiple items at a given location. The default order is
Arrays that contain strings describing the name of GraphItemTypes are converted to an array of GraphItemTypes. For example:
['node', 'edge']
['NODE', 'EDGE']Examples
mode.doubleClickHitTestOrder = [
GraphItemTypes.BEND,
GraphItemTypes.NODE | GraphItemTypes.EDGE,
GraphItemTypes.LABEL,
]See Also
Defined in
GraphInputMode.doubleClickHitTestOrderGets or sets the EditLabelInputMode which handles label editing.
Upon change, the onEditLabelInputModeChanged method will be called.
By default, this input mode has a priority of 500.
Examples
mode.editLabelInputMode.enabled = falseSee Also
Developer's Guide
Gets or sets a predicate that is queried to determine whether the given label or a label owned by the given owner should be edited in response to a EDIT_LABEL command.
Examples
mode.editLabelPredicate = (item) => item.tag == 'I am editable'See Also
Developer's Guide
Defined in
MultiplexingInputMode.enabledThe value of this property will be delegated to the exclusive property of the controller.
If this mode is marked as exclusive and has the mutex, all other modes added to the same MultiplexingInputMode will be deactivated. Otherwise, it will always run concurrently with all other modes.
Defined in
MultiplexingInputMode.exclusiveGets or sets the items that can be given focus via the setCurrentItem method.
Examples
mode.focusableItems = GraphItemTypes.NODE | GraphItemTypes.EDGEDefined in
GraphInputMode.focusableItemsGets or sets a predicate that is queried to determine whether an item should be set to the current item.
See Also
Defined in
GraphInputMode.focusablePredicateGets the graph instance from the parentInputModeContext.
Gets the graphComponent instance this mode is working on or null.
null.Gets the graph selection from the parentInputModeContext.
Defined in
GraphInputMode.graphSelectionGets or sets the HandleInputMode as child input mode.
Upon change, the onHandleInputModeChanged method will be called.
By default, this input mode has a priority of 10.
Examples
mode.handleInputMode.enabled = falsemode.handleInputMode.addEventListener('drag-finished', () => {
for (const item of mode.handleInputMode.affectedItems) {
// these items have been moved
}
})Gets or sets the hitTester property.
Defined in
GraphInputMode.hitTesterfalse the invisible elements are not selectable by mouse clicks or marquee selection since their hit testable always returns false.Property Value
true if void styles should be ignored for selection and focus; false otherwise. Default is true.Defined in
GraphInputMode.ignoreVoidStylesGets or sets the ItemHoverInputMode that is provided by this instance to detect when the cursor hovers over a graph item.
Note that initially the hoverItems property is set to NONE, which effectively disables the functionality of the mode initially. In order to get the mode to fire events, the property should be set to a corresponding value.
If the backing field has not yet been initialized upon first access, a new instance will be assigned. Upon change, onItemHoverInputModeChanged will be called.
By default, this input mode has a priority of 200.
Examples
mode.itemHoverInputMode.enabled = falsenull. One can also configure the item types which are reported:// mode is either an instance of GraphEditorInputMode or GraphViewerInputMode
// enable the ItemHoverInputMode and let it handle edges and nodes
mode.itemHoverInputMode.enabled = true
mode.itemHoverInputMode.hoverItems =
GraphItemTypes.EDGE | GraphItemTypes.NODE
// handle changes on the hovered items
mode.itemHoverInputMode.addEventListener(
'hovered-item-changed',
(evt) => {
const oldItem = evt.oldItem
// e.g. remove the highlight from oldItem here
const newItem = evt.item
// e.g. add a highlight to newItem here
},
)Defined in
GraphInputMode.itemHoverInputModeGets or sets the KeyboardInputMode associated with this instance.
0.Property Value
Examples
mode.keyboardInputMode.enabled = false// Execute the command if the Insert key is pressed
graphEditorInputMode.keyboardInputMode.addKeyBinding(
'Insert',
ModifierKeys.NONE,
() => {
graphEditorInputMode.createNode(
graphEditorInputMode.graphComponent!.viewport.center,
)
},
)Defined in
GraphInputMode.keyboardInputModeGets or sets the LabelDropInputMode that is responsible for handling drag and drop operations of labels onto the graphComponent.
The mode by default is disabled and needs to be enabled to work, first. Upon change the onLabelDropInputModeChanged method will be called.
By default, this input mode has a priority of 310.
Examples
mode.labelDropInputMode.enabled = falseExamples
// forbid adding new labels
mode.allowAddLabel = false
// allow editing existing labels
mode.allowEditLabel = true
// start label editing on double click
mode.allowEditLabelOnDoubleClick = true
// only support editing node labels
mode.labelEditableItems = GraphItemTypes.NODE | GraphItemTypes.NODE_LABELSee Also
Developer's Guide
API
- editLabelPredicate
Gets or sets the LassoSelectionInputMode which handles the selection of multiple elements by drawing a polygon around them.
Upon change, the onLassoSelectionInputModeChanged method will be called.
The lassoSelectionInputMode respects the selectableItems and the marqueeSelectableItems used by marqueeSelectablePredicate.
By default, this input mode has a priority of 150 and is disabled.
Defined in
GraphInputMode.lassoSelectionInputModeGets or sets which types of items should be selected during marquee selections or lasso selection.
Examples
// Nodes, edges, and bends are selectable
mode.selectableItems =
GraphItemTypes.NODE | GraphItemTypes.EDGE | GraphItemTypes.BEND
// Only nodes and bends are selectable by marquee selection
mode.marqueeSelectableItems = GraphItemTypes.NODE | GraphItemTypes.BEND
// Only nodes and edges are selectable by click selection
mode.clickSelectableItems = GraphItemTypes.NODE | GraphItemTypes.EDGESee Also
Defined in
GraphInputMode.marqueeSelectableItemsSee Also
Gets or sets the MarqueeSelectionInputMode which handles the selection of multiple elements by drawing a rectangle around them.
Upon change, the onMarqueeSelectionInputModeChanged method will be called.
The marqueeSelectionInputMode respects the selectableItems and the marqueeSelectableItems used by marqueeSelectablePredicate.
By default, this input mode has a priority of 160.
For GraphViewerInputMode, the default values of beginRecognizer and subtractSelectionRecognizer conflict, so in this case you will usually want to change one of these recognizers.
Examples
mode.marqueeSelectionInputMode.enabled = falseDefined in
GraphInputMode.marqueeSelectionInputModeGets or sets which types of items should be movable using the moveSelectedItemsInputMode.
Examples
mode.movableSelectedItems = GraphItemTypes.NODE | GraphItemTypes.EDGESee Also
Developer's Guide
API
- movableSelectedItemsPredicate
Gets or sets a predicate that is queried to determine whether moving an item is allowed.
This predicate determines whether an item can be moved by the moveSelectedItemsInputMode.
The default value returns the result of the movableSelectedItems property for the given item.
See Also
Developer's Guide
API
- movableUnselectedItemsPredicate, movableSelectedItems, moveSelectedItemsInputMode
Gets or sets which types of items should be movable using the moveUnselectedItemsInputMode.
Examples
mode.movableSelectedItems = GraphItemTypes.NODE | GraphItemTypes.EDGESee Also
Developer's Guide
API
- movableUnselectedItemsPredicate
Gets or sets a predicate that is queried to determine whether moving an item is allowed when it is not selected.
This predicate determines whether an item can be moved by moveUnselectedItemsInputMode.
The default value returns the result of the movableUnselectedItems property for the given item.
See Also
Developer's Guide
API
- movableUnselectedItems, moveUnselectedItemsInputMode
Gets or sets the MoveInputMode as child mode.
Upon change, the onMoveSelectedItemsInputModeChanged method will be called. The newly created input mode is configured to handle selected items.
The moveSelectedItemsInputMode by default only handles selected items. The moveUnselectedItemsInputMode by default handles unselected items, too.
The moveSelectedItemsInputMode respects movableSelectedItems and method movableSelectedItemsPredicate.
By default, this input mode has a priority of 110.
Examples
mode.moveSelectedItemsInputMode.enabled = falsemode.moveSelectedItemsInputMode.addEventListener('drag-finished', () => {
for (const item of mode.moveSelectedItemsInputMode.affectedItems) {
// these items have been moved
}
})See Also
Developer's Guide
API
- movableSelectedItemsPredicate, movableSelectedItems, moveUnselectedItemsInputMode
Gets or sets the MoveInputMode which handles unselected graph items.
Upon change, the onMoveUnselectedItemsInputModeChanged method will be called.
The moveUnselectedItemsInputMode respects movableUnselectedItems and movableUnselectedItemsPredicate.
By default, this input mode has a priority of 120 and is enabled. Also, its beginRecognizerTouch property is configured to only start when the user holds the touch device for a short amount of time to initiate the gesture of moving elements that are not selected.
Examples
mode.moveUnselectedItemsInputMode.enabled = truemode.moveSelectedItemsInputMode.enabled = false
// Enable the move input mode for unselected items
const moveUnselectedItemsInputMode = mode.moveUnselectedItemsInputMode
moveUnselectedItemsInputMode.enabled = true
// Use a modifier recognizer for shift key not held down.
const defaultPressedRecognizer =
moveUnselectedItemsInputMode.beginRecognizer
moveUnselectedItemsInputMode.beginRecognizer = (evt, sender) =>
defaultPressedRecognizer(evt, sender) &&
!EventRecognizers.SHIFT_IS_DOWN(evt, sender)
const defaultHoverRecognizer =
moveUnselectedItemsInputMode.hoverRecognizer
moveUnselectedItemsInputMode.hoverRecognizer = (evt, sender) =>
defaultHoverRecognizer(evt, sender) &&
!EventRecognizers.SHIFT_IS_DOWN(evt, sender)
// Set a higher priority than CreateEdgeInputMode
moveUnselectedItemsInputMode.priority =
mode.createEdgeInputMode.priority - 1See Also
Developer's Guide
API
- movableUnselectedItemsPredicate
Gets or sets the MoveViewportInputMode associated with this instance.
Upon change, the onMoveViewportInputModeChanged method will be called.
By default, this input mode has a priority of 190.
Examples
mode.moveViewportInputMode.enabled = falseDefined in
GraphInputMode.moveViewportInputModeGets or sets the event recognizer that determines if a click or tap is deemed a multi-selection gesture.
If the multiSelectionRecognizer returns true for the current gesture, the element which is selected with that gesture will be added to the current selection. Otherwise, the selection will be cleared before adding the newly selected element.
The default detects the current system and delegates either to META_IS_DOWN (macOS) or CTRL_IS_DOWN (other systems).
Defined in
GraphInputMode.multiSelectionRecognizerGets the IInputMode that currently owns the mutex.
Property Value
null.Defined in
MultiplexingInputMode.mutexOwnerUpon change the onNavigationInputModeChanged method will be called.
By default, this input mode has a priority of 210.
Examples
mode.navigationInputMode.enabled = falseThe navigationInputMode supports e.g. opening and closing group nodes. These actions can be configured in details:
// mode is either an instance of GraphEditorInputMode or GraphViewerInputMode
// enable expanding and collapsing group nodes
mode.navigationInputMode.allowCollapseGroup = true
mode.navigationInputMode.allowExpandGroup = true
// do not fit the content after expand/collapse
mode.navigationInputMode.fitContentAfterGroupActions = false
// expand/collapse group nodes in a way that their
// top right corner stays at its current coordinates
mode.navigationInputMode.autoGroupNodeAlignmentPolicy =
NodeAlignmentPolicy.TOP_RIGHTIt also reports when groups are opened or collapsed interactively by raising the following events:
// mode is either an instance of GraphEditorInputMode or GraphViewerInputMode
mode.navigationInputMode.addEventListener('group-expanding', (evt) => {
const node = evt.item
// do something with the node before it will be expanded
})
mode.navigationInputMode.addEventListener('group-expanded', (evt) => {
const node = evt.item
// do something with the node after it has been expanded
})
mode.navigationInputMode.addEventListener('group-collapsing', () => {
/* same for collapse operations */
})
mode.navigationInputMode.addEventListener('group-collapsed', () => {
/* same for collapse operations */
})Defined in
GraphInputMode.navigationInputModeGets or sets the callback that is responsible for creating a new node, for instance, in response to a mouse or stylus click or touch tap.
A null value will disable node creation using mouse clicks, just as setting allowCreateNode to false.
When a Promise is returned, this mode will wait until it is resolved, thereby blocking any user interaction.
Examples
// set a custom node creator which creates a label on the new node
graphEditorInputMode.nodeCreator = (
context: IInputModeContext,
graph: IGraph,
location: Point,
parent: INode | null,
): INode | null | Promise<INode | null> => {
// create a node at the location with the given parent and the default size
const node = graph.createNode(
parent,
new Rect(location, graph.nodeDefaults.size),
)
// add a label
graph.addLabel(node, 'A new node')
// return the new node
return node
}See Also
Developer's Guide
API
- createNode
Gets or sets the NodeDropInputMode that is responsible for handling drag and drop operations of nodes onto the graphComponent.
The mode by default is disabled and needs to be enabled to work, first. Upon change the onNodeDropInputModeChanged method will be called.
By default, this input mode has a priority of 300.
Examples
mode.nodeDropInputMode.enabled = falseGets or sets the policy that controls whether removing bends from an orthogonal edge will keep the edge orthogonal.
Property Value
See Also
Developer's Guide
API
- orthogonalEdgeEditingContext
Gets or sets the orthogonal edge editing context.
Orthogonal edge editing is enabled by default but only used for edges that provide an IOrthogonalEdgeHelper in their context.
For an edge using a PolylineEdgeStyle, it is sufficient to enable its orthogonalEditing property. Alternatively, the fallbackEdgeHelperProvider can be set to an instance supporting orthogonal edge editing that is then used for all edges providing no IOrthogonalEdgeHelper.
Property Value
Examples
mode.orthogonalEdgeEditingContext.fallbackEdgeHelperProvider = (edge) =>
new OrthogonalEdgeHelper(edge)Related Programming Samples
- Orthogonal Edge Editing
- Shows how to enable interactive orthogonal edge editing.
See Also
Developer's Guide
Demos
- Shows how to enable interactive orthogonal edge editing.
Retrieves the IInputModeContext this mode has been installed in.
null if this mode is currently not installed. Use createInputModeContext to obtain a context that has this IInputMode as the inputMode.Gets or sets which types of items should be selected after paste or duplicateSelection.
Examples
mode.pasteSelectableItems = GraphItemTypes.NODE | GraphItemTypes.BENDSee Also
Developer's Guide
API
- pasteSelectablePredicate, smartPasteSelection, setSelected
Gets or sets a predicate that is queried to determine whether an item should be selected after paste or duplicateSelection.
See Also
Gets or sets a predicate that is queried to determine whether a context menu should be shown for an item.
See Also
Gets or sets the PortDropInputMode that is responsible for handling drag and drop operations of ports onto the graphComponent.
The mode by default is disabled and needs to be enabled to work, first. Upon change, the onPortDropInputModeChanged method will be called.
By default, this input mode has a priority of 320.
Examples
mode.portDropInputMode.enabled = falseDefined in
MultiplexingInputMode.priorityGets or sets a predicate that is queried to determine whether a tool tip should be queried for an item.
See Also
Defined in
GraphInputMode.queryToolTipPredicateGets or sets the IReparentNodeHandler that is used for moving nodes out of group nodes or into other group nodes.
This setting has no effect if reparenting nodes is generally disallowed by setting allowReparentNodes to false.
Child input modes will use this IReparentNodeHandler as well, since it is added to childInputModeContextLookup.
Upon changes, the onReparentNodeHandlerChanged method will be called.
See Also
Developer's Guide
API
- allowReparentNodes, ReparentNodeHandler
Gets or sets a predicate that is queried to determine whether an edge should be reversed by reverseEdge, reverseEdges, or reverseEdges.
Gets or sets which types of items should be selectable at all.
Examples
// Nodes, edges, and bends are selectable
mode.selectableItems =
GraphItemTypes.NODE | GraphItemTypes.EDGE | GraphItemTypes.BEND
// Only nodes and bends are selectable by marquee selection
mode.marqueeSelectableItems = GraphItemTypes.NODE | GraphItemTypes.BEND
// Only nodes and edges are selectable by click selection
mode.clickSelectableItems = GraphItemTypes.NODE | GraphItemTypes.EDGESee Also
API
- setSelected
Defined in
GraphInputMode.selectableItemsGets or sets a predicate that is queried to determine whether a given IModelItem is selectable.
Examples
mode.selectablePredicate = (item: IModelItem): boolean =>
item.tag === 'I am selectable'Defined in
GraphInputMode.selectablePredicateGets or sets a predicate that is queried to determine whether an item should be selected after creation.
Gets or sets which types of items should have their IHandles shown.
Examples
mode.showHandleItems = GraphItemTypes.NODE | GraphItemTypes.EDGESee Also
Developer's Guide
API
- showHandlePredicate
Gets or sets a predicate that is queried to determine whether to show the handles for the given item.
See Also
Gets or sets a value that specifies whether during hit testing, labels should be skipped at all.
Since typically users don't want to click a label when it covers a node or edge, but they typically want to click the label, but otherwise the Z-order should be considered, this setting will determine whether shouldSkipHitLabel should be queried during hit test enumeration if labels are hit before other elements.
This is only applicable when the respective clickHitTestOrder or doubleClickHitTestOrder is not explicit about the order.
This setting will influence the ILookup behavior of the IInputModeContext via childInputModeContextLookup so that the IHitTester interface swaps the order of the hits to report skipped labels only after the items behind the labels.
By default, this feature is enabled.
Defined in
GraphInputMode.skipHitLabelsGets or sets whether nodes, edges, labels, and ports should only be selected after paste or duplicateSelection if they were selected when they were initially copied into the clipboard.
Disabling this feature will select all pasteSelectableItems after a paste or duplicate operation.
The default is true.
Examples
mode.smartPasteSelection = falseSee Also
Gets or sets the GraphSnapContext instance that handles interactive snapping of elements during drag operations like movements.
To enable snapping set the enabled property to true.
Setting this property to a GraphSnapContext which is disabled will disable snapping. Child modes will use the instance from their respective IInputModeContexts, if any are set.
Upon change the onSnapContextChanged method is called, which will as a side effect configure the snap context to display the SnapResults in the CanvasComponent.
Default is null.
Examples
mode.snapContext = new GraphSnapContext()See Also
Developer's Guide
Gets or sets the toolTipInputMode which is responsible for displaying Tooltips on a CanvasComponent.
Upon change, the onToolTipInputModeChanged method will be called.
By default, this input mode has a priority of 400.
Examples
mode.toolTipInputMode.enabled = false// mode is either an instance of GraphEditorInputMode or GraphViewerInputMode
mode.toolTipItems = GraphItemTypes.NODE
// register a listener
mode.addEventListener('query-item-tool-tip', (evt) => {
if (evt.handled) {
// A tooltip has already been assigned -> nothing to do.
return
}
// We can safely cast here because we set ToolTipItems to only Node.
const hitNode = evt.item as INode
if (hitNode.labels.size > 0) {
// Show the text of the first label as tooltip.
evt.toolTip = hitNode.labels.get(0).text
// Indicate that the tooltip content has been set.
evt.handled = true
}
})Defined in
GraphInputMode.toolTipInputModeGets or sets the types of the items that should be queried for a tooltip.
Examples
// mode is either an instance of GraphEditorInputMode or GraphViewerInputMode
mode.toolTipItems = GraphItemTypes.NODE
// register a listener
mode.addEventListener('query-item-tool-tip', (evt) => {
if (evt.handled) {
// A tooltip has already been assigned -> nothing to do.
return
}
// We can safely cast here because we set ToolTipItems to only Node.
const hitNode = evt.item as INode
if (hitNode.labels.size > 0) {
// Show the text of the first label as tooltip.
evt.toolTip = hitNode.labels.get(0).text
// Indicate that the tooltip content has been set.
evt.handled = true
}
})Defined in
GraphInputMode.toolTipItemsGets or sets a value indicating whether to use the currentItem as a fallback for the commands if no item is provided in the parameter and the current selection is empty.
true if the current item should be used as a fallback, false otherwise.
This applies to the following commands:
Default is false.
Property Value
true if the current item should be used as a fallback, false otherwise.See Also
Developer's Guide
Setting this property to true will start the waiting process. Setting it to false will end the waiting.
Blocking the user interaction is done by the WaitInputMode. This property has no effect if WaitInputMode is disabled.
Examples
graphEditorInputMode.waiting = true
await longRunningAsyncProcess()
graphEditorInputMode.waiting = falseGets or sets the WaitInputMode that is provided by this instance for those who need to make use of it.
Upon change, the onWaitInputModeChanged method will be called.
By default, this input mode has a priority of -1.
Examples
mode.waitInputMode.enabled = falsegraphEditorInputMode.waiting = true
await longRunningAsyncProcess()
graphEditorInputMode.waiting = falseSee Also
API
- waiting
Defined in
GraphInputMode.waitInputModeMethods
Adds the given mode.
mode.The input modes will be ordered according to their priority: Input modes with lower priority will be installed earlier.
Input modes will run exclusively if the exclusive property of their installed controller is set to true. Otherwise they cannot and will not be deactivated if another IInputMode acquires the mutex.
Parameters
- mode: IInputMode
- The input mode to add to this mode.
Throws
- Exception ({ name: 'ArgumentError' })
- If the same
modeis already added to this instance.
Examples
const multiplexingInputMode = new MultiplexingInputMode()
const waitInputMode = new WaitInputMode()
waitInputMode.priority = 0
multiplexingInputMode.add(waitInputMode)
const moveInputMode = new MoveViewportInputMode()
moveInputMode.priority = 5
multiplexingInputMode.add(moveInputMode)
graphComponent.inputMode = multiplexingInputModeconst mode = new GraphEditorInputMode()
const customInputMode = new CustomInputMode()
customInputMode.priority = 10
mode.add(customInputMode)Defined in
MultiplexingInputMode.addAdjusts the cursor of the CanvasComponent according to the current input mutex owner or the first mode in the list whose ConcurrencyController returns a non-null preferredCursor.
Defined in
MultiplexingInputMode.adjustCursorAdjusts the size of the group nodes in the enumerable.
true.Parameters
- nodes: IEnumerable<INode>
- The nodes to adjust their sizes.
Adjusts the size of the selected group nodes.
See Also
Adjusts the node's layout to adhere to possible size constraints.
Parameters
- node: INode
- The node to possibly adjust the size of.
Defined in
MultiplexingInputMode.cancelCalled by the child context's lookup method.
Parameters
- type: Constructor
- The type argument passed to lookup.
Return Value
- any
- The result of the lookup query, or
null.
Clears the selection on the current graphSelection.
Defined in
GraphInputMode.clearSelectionActually performs the click or tap on the given item.
Parameters
- item: IModelItem
- The item that has been clicked.
- evt: ClickEventArgs
- The original event arguments for the click. Setting its handled property to
truewill indicate that the click was handled. By default, this happens when the clicked item is either selected or focused.
Defined in
GraphInputMode.clickClears the selection on click if the click is not recognized by multiSelectionRecognizer.
This method is only called if no item has been hit and at least one item is currently selected.
This will use the clearSelection method to deselect all items.
Parameters
- context: IInputModeContext
- The context where the click appeared.
Return Value
- boolean
- Whether the selection has been cleared by this method.
Defined in
GraphInputMode.clickClearSelectionCreates a node on a pointer click or tap.
false.Parameters
- context: IInputModeContext
- The context of the current input mode.
- location: Point
- The point where the pointer had been clicked.
Return Value
- boolean
trueif a node was successfully created,falseotherwise.
Yields an IInputModeContext for the child modes of this mode.
Return Value
- IInputModeContext
- A new instance that delegates to the parent's context.
Helper method that yields a suitably configured InputModeEventArgs for this input mode.
Parameters
- context: IInputModeContext
An input mode context that is available in the InputModeEventArgs.
Can be
nullin which case a new context for this instance is created automatically.
Return Value
- InputModeEventArgs
- An input mode event argument that is configured for this instance.
Creates a node at the given location.
This implementation delegates to the current nodeCreator or simply returns null if there is no such callback or allowCreateNode yields false. Finally, it tries to set the node as the current item.
When the nodeCreator returns a Promise, this mode will wait until it is resolved, thereby blocking any user interaction.
Parameters
- location: Point
- The point where the pointer click or tap has occured.
Return Value
- any
- The newly created node,
null, or aPromiseresolving with a node ornull.
See Also
Developer's Guide
API
- onNodeCreated, setCurrentItem
See Also
Developer's Guide
API
- deleting-selection, deleted-item, deleted-selection
Actually performs a double-click on the given item.
trueParameters
- item: IModelItem
- The item that has been double-clicked.
- evt: ClickEventArgs
- The original event arguments for the click. Setting its handled property to
truewill indicate that the double-click was handled and events on other items in the same location are no longer raised.
Overrides
GraphInputMode.doubleClickInitiates the handleInputMode to drag the given bend.
Starts label editing by executing EDIT_LABEL.
Parameters
- item: IModelItem
- The item whose label or the label itself that should be edited upon the double click gesture.
Return Value
- boolean
trueiff the request was handled.
See Also
Used as a callback to find the items hit underneath a certain point.
Parameters
- location: Point
- The location to test.
- tests: GraphItemTypes[]
- An array of GraphItemTypes values that encode for which model items the hit test should be performed for prioritizing. Arrays that contain strings describing the name of GraphItemTypes are converted to an array of GraphItemTypes. For example:
['node', 'edge'] ['NODE', 'EDGE'] - filter?: function(IModelItem): boolean
- The predicate that can be used to filter the results. May be
null.
Return Value
- IEnumerable<IModelItem>
- An enumerable over the items that have been found for the location.
Examples
function HandleItemAtLocation(
context: IInputModeContext,
location: Point,
): void {
const graphEditorInputMode = context.lookup(
GraphEditorInputMode,
) as GraphEditorInputMode
const graphItem = graphEditorInputMode
.findItems(location, [GraphItemTypes.NODE | GraphItemTypes.EDGE])
.at(0)
if (graphItem instanceof INode) {
// ... handle node
} else if (graphItem instanceof IEdge) {
// ... handle edge
}
}Defined in
GraphInputMode.findItemsUsed as a callback to find the items hit underneath a certain point.
Parameters
- context: IInputModeContext
- The context to use for the isHit callback.
- location: Point
- The location to test.
- tests: GraphItemTypes[]
- An array of GraphItemTypes values that encode for which model items the hit test should be performed for prioritizing. Arrays that contain strings describing the name of GraphItemTypes are converted to an array of GraphItemTypes. For example:
['node', 'edge'] ['NODE', 'EDGE'] - filter?: function(IModelItem): boolean
- The predicate that can be used to filter the results. May be
null.
Return Value
- IEnumerable<IModelItem>
- An enumerable over the items that have been found for the location.
Examples
function HandleItemAtLocation(
context: IInputModeContext,
location: Point,
): void {
const graphEditorInputMode = context.lookup(
GraphEditorInputMode,
) as GraphEditorInputMode
const graphItem = graphEditorInputMode
.findItems(location, [GraphItemTypes.NODE | GraphItemTypes.EDGE])
.at(0)
if (graphItem instanceof INode) {
// ... handle node
} else if (graphItem instanceof IEdge) {
// ... handle edge
}
}Defined in
GraphInputMode.findItemsReturns a list of all modes managed by this instance sorted by their priority.
Return Value
- IList<IInputMode>
- A list of the modes.
Defined in
MultiplexingInputMode.getSortedModesCreates a new group for all of the currently selected items.
This method will also clear the selection and select the newly created group node.
The default shortcut for this is Ctrl+G.
Return Value
- INode
- The newly created group node or
null.
See Also
true.Parameters
- context: IInputModeContext
- The context for the click.
- item: IModelItem
- The item that has been clicked.
- location: Point
- The click location.
Return Value
- boolean
- Whether the action has been invoked and handling should be stopped.
See Also
API
- IClickListener, click
Defined in
GraphInputMode.handleClickListenerThis method should not be invoked by subclasses. This will be done automatically upon first installation of this mode.
This code will be executed only once per instance. The parentInputModeContext property will be null when this code is executed. This method should not be used to install this mode into a specific canvas. Subclasses should always call base.Initialize() first.
See Also
API
- install
Defined in
MultiplexingInputMode.initializeInstalls this mode into the provided context.
Parameters
- context: IInputModeContext
- The context to install this mode in and retrieve the graph and selection instance from.
- controller: ConcurrencyController
- The ConcurrencyController for this mode.
Overrides
GraphInputMode.installInvalidates the canvas this mode is currently installed in.
Defined in
MultiplexingInputMode.invalidatePerforms lasso-selection with the given path.
Parameters
- lassoPath: GeneralPath
- The lasso selection path.
- selectionPolicy?: SelectionPolicy
- The policy to use for changing the selection of the elements.
Defined in
GraphInputMode.lassoSelectLowers the visual representations of all selected IModelItems below their current predecessors.
Performs marquee selection with the given rectangle.
Parameters
- marqueeRectangle: Rect
- The selection rectangle.
- selectionPolicy?: SelectionPolicy
- The policy to use for changing the selection of the elements.
Defined in
GraphInputMode.marqueeSelectRaises the canvas-clicked event.
true.Parameters
- evt: ClickEventArgs
- The ClickEventArgs instance that contains the information about the click.
Defined in
GraphInputMode.onCanvasClickedCalled when the clickInputMode property value changes and after initialization of the property.
Parameters
- oldMode: ClickInputMode
- the old value, which may be
nullthe first time - newMode: ClickInputMode
- the new value
Defined in
GraphInputMode.onClickInputModeChangednull and releases the mutex if the mutex is currently owned by this instance. Also, all concurrent child modes will be disabled.onContextMenuInputModeChanged
(oldMode: ContextMenuInputMode, newMode: ContextMenuInputMode)protectedCalled when the ContextMenuInputMode property value changes and after initialization of the property.
onContextMenuInputModeChanged
(oldMode: ContextMenuInputMode, newMode: ContextMenuInputMode)Parameters
- oldMode: ContextMenuInputMode
- the old value, which may be
nullthe first time - newMode: ContextMenuInputMode
- the new value
Called when the createBendInputMode property value changes and after initialization of the property.
Parameters
- oldMode: CreateBendInputMode
- the old value, which may be
nullthe first time - newMode: CreateBendInputMode
- the new value
Examples
mode.createBendInputMode.enabled = falseCalled as soon as CreateBendInputMode created a new bend.
Parameters
- evt: InputModeItemEventArgs<IBend>
- The InputModeItemEventArgs<IBend> that provides the new bend.
- sender: any
- The element on which the event was triggered.
Called when the createEdgeInputMode property value changes and after initialization of the property.
Parameters
- oldMode: CreateEdgeInputMode
- the old value, which may be
nullthe first time - newMode: CreateEdgeInputMode
- the new value
Raises the deleted-item event.
Parameters
- evt: InputModeItemChangedEventArgs<IModelItem, EventArgs>
- The instance containing the event data.
Raises the deleted-selection event.
Raises the deleting-selection event.
Parameters
- evt: SelectionEventArgs<IModelItem>
- The SelectionEventArgs<T> instance containing the event data.
Invoked after an edge's source and/or target ports have been changed as the result of an input gesture.
Parameters
Called when the editLabelInputMode property value changes and after initialization of the property.
Parameters
- oldMode: EditLabelInputMode
- the old value, which may be
nullthe first time - newMode: EditLabelInputMode
- the new value
onGraphComponentChanged
(oldGraphComponent: GraphComponent, newGraphComponent: GraphComponent)protectedCalled when the graphComponent property changes.
onGraphComponentChanged
(oldGraphComponent: GraphComponent, newGraphComponent: GraphComponent)Parameters
- oldGraphComponent: GraphComponent
- The old control.
- newGraphComponent: GraphComponent
- The new control.
Called when the IGraphSelection property changes.
Parameters
- oldSelection: IGraphSelection
- The old selection instance.
- newSelection: IGraphSelection
- The new selection instance.
Raises the grouped-selection event.
Parameters
- evt: SelectionEventArgs<IModelItem>
- The SelectionEventArgs<T> instance containing the event data.
Raises the grouping-selection event.
Parameters
- evt: SelectionEventArgs<IModelItem>
- The SelectionEventArgs<T> instance containing the event data.
Called when the handleInputMode property value changes and after initialization of the property.
Parameters
- oldMode: HandleInputMode
- the old value, which may be
nullthe first time - newMode: HandleInputMode
- the new value
Raises the item-clicked event.
true.Parameters
- evt: ItemClickedEventArgs<IModelItem>
- The ItemClickedEventArgs<T> instance that contains the item that has been clicked.
Defined in
GraphInputMode.onItemClickedRaises the item-double-clicked event.
true.Parameters
- evt: ItemClickedEventArgs<IModelItem>
- The ItemClickedEventArgs<T> instance that contains the item that has been double-clicked.
Defined in
GraphInputMode.onItemDoubleClickedCalled when the itemHoverInputMode property value changes and after initialization of the property.
Parameters
- oldMode: ItemHoverInputMode
- the old value, which may be
nullthe first time - newMode: ItemHoverInputMode
- the new value
Raises the item-left-clicked event.
true.Parameters
- evt: ItemClickedEventArgs<IModelItem>
- The ItemClickedEventArgs<T> instance that contains the item that has been clicked.
Defined in
GraphInputMode.onItemLeftClickedRaises the item-left-double-clicked event.
true.Parameters
- evt: ItemClickedEventArgs<IModelItem>
- The ItemClickedEventArgs<T> instance that contains the item that has been double-clicked.
Defined in
GraphInputMode.onItemLeftDoubleClickedRaises the item-right-clicked event.
true.Parameters
- evt: ItemClickedEventArgs<IModelItem>
- The ItemClickedEventArgs<T> instance that contains the item that has been clicked.
Defined in
GraphInputMode.onItemRightClickedRaises the item-right-double-clicked event.
true.Parameters
- evt: ItemClickedEventArgs<IModelItem>
- The ItemClickedEventArgs<T> instance that contains the item that has been double clicked.
Defined in
GraphInputMode.onItemRightDoubleClickedCalled when the keyboardInputMode changes.
Parameters
- oldMode: KeyboardInputMode
- The old keyboardInputMode.
- newMode: KeyboardInputMode
- The new keyboardInputMode.
Raises the label-added event.
Parameters
- evt: InputModeItemEventArgs<ILabel>
- The InputModeItemEventArgs<TModelItem> instance that contains the ILabel that has been added.
Called when the labelDropInputMode property value changes and after initialization of the property.
Parameters
- oldMode: LabelDropInputMode
- the old value, which may be
nullthe first time - newMode: LabelDropInputMode
- the new value
Called when the labelDropInputMode's item-created event is triggered.
Parameters
- evt: InputModeItemEventArgs<ILabel>
- The event argument instance containing the event data.
- sender: any
- The sender.
Raises the label-edited event.
Parameters
- evt: InputModeItemEventArgs<ILabel>
- The InputModeItemEventArgs<TModelItem> instance that contains the ILabel that has changed the text.
Parameters
- context: IInputModeContext
- The input mode context.
- lassoPath: GeneralPath
- The lasso selection path.
- selectionPolicy: SelectionPolicy
- The policy to use for changing the selection of the elements.
Defined in
GraphInputMode.onLassoSelectonLassoSelectionInputModeChanged
(oldMode: LassoSelectionInputMode, newMode: LassoSelectionInputMode)protectedCalled when the lassoSelectionInputMode property value changes and after initialization of the property.
onLassoSelectionInputModeChanged
(oldMode: LassoSelectionInputMode, newMode: LassoSelectionInputMode)Parameters
- oldMode: LassoSelectionInputMode
- the old value, which may be
nullthe first time - newMode: LassoSelectionInputMode
- the new value
Parameters
- context: IInputModeContext
- The input mode context.
- marqueeRectangle: Rect
- The selection rectangle.
- selectionPolicy: SelectionPolicy
- The policy for changing the selection.
Defined in
GraphInputMode.onMarqueeSelectonMarqueeSelectionInputModeChanged
(oldMode: MarqueeSelectionInputMode, newMode: MarqueeSelectionInputMode)protectedCalled when the marqueeSelectionInputMode property value changes and after initialization of the property.
onMarqueeSelectionInputModeChanged
(oldMode: MarqueeSelectionInputMode, newMode: MarqueeSelectionInputMode)Parameters
- oldMode: MarqueeSelectionInputMode
- the old value, which may be
nullthe first time - newMode: MarqueeSelectionInputMode
- the new value
Called when the moveSelectedItemsInputMode property value changes and after initialization of the property.
Parameters
- oldMode: MoveInputMode
- the old value, which may be
nullthe first time - newMode: MoveInputMode
- the new value
Called when the moveUnselectedItemsInputMode property value changes and after initialization of the property.
Parameters
- oldMode: MoveInputMode
- the old value, which may be
nullthe first time - newMode: MoveInputMode
- the new value
onMoveViewportInputModeChanged
(oldMode: MoveViewportInputMode, newMode: MoveViewportInputMode)protectedCalled when the moveViewportInputMode property value changes and after initialization of the property.
onMoveViewportInputModeChanged
(oldMode: MoveViewportInputMode, newMode: MoveViewportInputMode)Parameters
- oldMode: MoveViewportInputMode
- the old value, which may be
nullthe first time - newMode: MoveViewportInputMode
- the new value
Raises the multi-selection-finished event.
Parameters
- evt: SelectionEventArgs<IModelItem>
- The SelectionEventArgs<IModelItem> that provides the selection.
Defined in
GraphInputMode.onMultiSelectionFinishedRaises the multi-selection-started event.
Parameters
- evt: SelectionEventArgs<IModelItem>
- The SelectionEventArgs<IModelItem> that provides the selection.
Defined in
GraphInputMode.onMultiSelectionStartedParameters
- oldMode: NavigationInputMode
- the old value, which may be
nullthe first time - newMode: NavigationInputMode
- the new value
Raises the node-created event.
true, the reported node can actually be part of the master graph.Parameters
- evt: InputModeItemEventArgs<INode>
- The InputModeItemEventArgs<TModelItem> instance containing the created node.
Called when the nodeDropInputMode property value changes and after initialization of the property.
Parameters
- oldMode: NodeDropInputMode
- the old value, which may be
nullthe first time - newMode: NodeDropInputMode
- the new value
Called when the nodeDropInputMode's item-created event is triggered.
Parameters
- evt: InputModeItemEventArgs<INode>
- The event argument instance containing the event data.
- sender: any
- The sender.
Raises the node-reparented event.
Parameters
- evt: InputModeItemChangedEventArgs<INode, NodeEventArgs>
- The InputModeItemChangedEventArgs<TItem, TDetail> instance containing the event data. The details are of type NodeEventArgs which provide the old parent in its parent property.
See Also
Raises the populate-item-context-menu event.
Parameters
- evt: PopulateItemContextMenuEventArgs<IModelItem>
- The PopulateItemContextMenuEventArgs<TModelItem> instance containing the event data.
Defined in
GraphInputMode.onPopulateItemContextMenuRaises the port-added event.
Parameters
- evt: InputModeItemEventArgs<IPort>
- The InputModeItemEventArgs<TModelItem> instance that contains the IPort that has been added.
Called when the portDropInputMode property value changes and after initialization of the property.
Parameters
- oldMode: PortDropInputMode
- the old value, which may be
nullthe first time - newMode: PortDropInputMode
- the new value
Called when the portDropInputMode's item-created event is triggered.
Parameters
- evt: InputModeItemEventArgs<IPort>
- The event argument instance containing the event data.
- sender: any
- The sender.
Raises the query-item-tool-tip event.
Parameters
- evt: QueryItemToolTipEventArgs<IModelItem>
- The QueryItemToolTipEventArgs<TModelItem> instance containing the event data.
Defined in
GraphInputMode.onQueryItemToolTiponReparentNodeHandlerChanged
(oldMode: IReparentNodeHandler, newMode: IReparentNodeHandler)protectedCalled when the reparentNodeHandler property value changes and after initialization of the property.
onReparentNodeHandlerChanged
(oldMode: IReparentNodeHandler, newMode: IReparentNodeHandler)Parameters
- oldMode: IReparentNodeHandler
- the old value, which may be
nullthe first time - newMode: IReparentNodeHandler
- the new value
Called when the snapContext property context changed.
Parameters
- oldContext: GraphSnapContext
- The old snap context.
- newContext: GraphSnapContext
- The new snap context.
Called when the toolTipInputMode property value changes and after initialization of the property.
Parameters
- oldMode: ToolTipInputMode
- the old value, which may be
nullthe first time - newMode: ToolTipInputMode
- the new value
Defined in
GraphInputMode.onToolTipInputModeChangedRaises the ungrouped-selection event.
Parameters
- evt: SelectionEventArgs<IModelItem>
- The SelectionEventArgs<T> instance containing the event data.
Raises the ungrouping-selection event.
Parameters
- evt: SelectionEventArgs<IModelItem>
- The SelectionEventArgs<T> instance containing the event data.
Called when the waitInputMode property value changes and after initialization of the property.
Parameters
- oldMode: WaitInputMode
- the old value, which may be
nullthe first time - newMode: WaitInputMode
- the new value
Defined in
GraphInputMode.onWaitInputModeChangedPastes the current clipboard contents at the given location.
Parameters
- location: Point
- The location at which the center of the clipboard's contents should be positioned.
Examples
mode.pasteAtLocation(mode.graphComponent!.lastEventLocation)See Also
Developer's Guide
Raises the visual representations of all selected IModelItems above their current successors.
Delegates to the IGraph's UndoEngine's redo method.
This method will return without doing anything if undo has not been enabled on the graphComponent's graph or if the UndoEngine cannot redo operations.
See Also
Removes the given mode from this compound mode.
This causes a query to all implementations of IHandle, IHandleProvider, and IReshapeHandleProvider from the lookupsee> of selected items.
This method is called when the showHandleItems property is changed.
Throws
- Exception ({ name: 'InvalidOperationError' })
- When the handleInputMode is active.
See Also
Developer's Guide
Reverses the given edges.
true and reversableEdgePredicate returns true for the edge. An edge-ports-changed event will be dispatched after the edge has been reversed.Parameters
Reverses the given edges.
The edges will only be reversed if allowReverseEdge is set to true and reversableEdgePredicate returns true for the edge.
For each edge a edge-ports-changed event will be dispatched.
Parameters
- edges: IEnumerable<IEdge>
- The IEdges to reverse.
See Also
API
- REVERSE_EDGE
This implementation invokes reverseEdges providing the selected edges.
The edges will only be reversed if reversableEdgePredicate returns true for each edge.
For each edge an edge-ports-changed event will be dispatched.
See Also
Defined in
GraphInputMode.selectAllLowers the visual representations of all selected IModelItems to the back.
Raises the visual representations of all selected IModelItems to the front.
Selects the node and possible bends of self-loop edges.
Parameters
- node: INode
- The node to select.
See Also
Called by this instance to set the current item on the NavigationInputMode
Parameters
- item: IModelItem
- The item to set as the new "current" item.
Defined in
GraphInputMode.setCurrentItem- An undo unit is enqueued.
- The node is reshaped interactively using the IReshapeHandler implementation found in its lookup. This enables correctly adjusting e.g. affected orthogonal edges and parent group nodes.
- adjustContentBounds is called.
Parameters
See Also
- An undo unit is enqueued.
- The node is moved interactively using the IPositionHandler implementation found in its lookup. This enables correctly adjusting e.g. affected orthogonal edges, children of a group node, and parent group nodes.
- adjustContentBounds is called.
Parameters
See Also
Uses the graphSelection to select the given item.
Parameters
- item: IModelItem
- The item to set the selection state on.
- selected: boolean
- The new selection state.
Defined in
GraphInputMode.setSelectedCallback function that is used during hit testing, when an ILabel was hit tested before another non-label underneath it was reported.
This method can be used to prioritize the hit testing order for items below labels, depending on the label.
This implementation returns false if skipHitLabels is false or if the context's inputMode is not a GraphInputMode or MoveInputMode.
Parameters
- context: IInputModeContext
- The context in which the hit testing is performed.
- hitLabel: ILabel
- The label that was hit before a non-label at the same location.
- location: Point
- The location the label was hit.
Return Value
- boolean
- Whether to first report the non-label during hit testing.
Defined in
GraphInputMode.shouldSkipHitLabelSnaps the node to the grid using the IGridConstraintProvider<T> for INodes queried from the given context.
Parameters
- context: IInputModeContext
- node: INode
See Also
Adds a new label to the given item interactively.
Parameters
- owner: ILabelOwner
- The item to add a label to.
Return Value
- any
- A Promise that fulfills either with the edited label, or with
nullif editing was canceled or the text did not validate.
Starts editing the given label.
Parameters
- label: ILabel
- The label to edit.
Return Value
- any
- A Promise that fulfills either with the edited label, or with
nullif editing was canceled or the text did not validate.
Return Value
- boolean
trueif the editing process was successfully stopped, or if there was no edit in progress to stop; otherwise,false.
Defined in
MultiplexingInputMode.tryStopDelegates to the IGraph's UndoEngine's undo method.
This method will return without doing anything if undo has not been enabled on the graphComponent's graph or if the UndoEngine cannot undo operations.
See Also
Uninstalls this mode from the given context.
Parameters
- context: IInputModeContext
- The context to deregister from. This is the same instance that had been passed to install during installation.
Overrides
GraphInputMode.uninstallEvents
Occurs when the empty canvas area has been clicked or tapped.
true the event will not be propagated anymore.Properties of
ClickEventArgs- altKey: boolean
- Gets a value indicating whether the alt modifier was pressed at the time of the click.
- clickCount: number
- Gets the number of clicks associated with this event.
- context: IInputModeContext
- Gets the context for the current event.
- ctrlKey: boolean
- Gets a value indicating whether the control modifier was pressed at the time of the click.
- handled: booleanwritable
- Gets or sets a value indicating whether this instance has been handled.
- location: Point
- Gets the location of the click.
- metaKey: boolean
- Gets a value indicating whether the meta modifier was pressed at the time of the click.
- modifiers: ModifierKeys
- Gets the state of the modifiers at the time of the click.
- originalEventArgs: PointerEventArgs
- Gets the pointer event args that caused this event.
- pointerButtons: PointerButtons
- Gets the PointerButtons that have changed for this event.
- pointerType: PointerType
- Gets the type of the pointer that was the source of this event.
- shiftKey: boolean
- Gets a value indicating whether the shift modifier was pressed at the time of the click.
See Also
API
- item-clicked
Defined in
GraphInputMode.canvas-clickedOccurs when an item has been deleted interactively by this mode.
Note that this event will not be triggered for items that are removed implicitly, e.g. if the event is triggered for a node, its labels, ports, and adjacent edges will not necessarily be reported separately. In order to be notified of any removal events, the IGraph events should be used instead.
This event is raised after each selected item have been removed. To clean up after deletion, e.g. by applying a new automatic layout, use the deleted-selection event which is raised only once after all items have been deleted.
The deleting-selection event is raised before all items have been removed. The deleted-selection event is raised after all items have been removed.
In addition to the deleted item and its type, the ItemChangedEventArgs<TItem, TValue> provide information about the status before deletion.
Properties of
InputModeItemChangedEventArgs<IModelItem, EventArgs>- context: IInputModeContext
- Gets the context for the current event.
- details: TDetail
- Gets additional information about the state of the item, before it has been deleted.
- item: TItem
- Gets the item which has been created or changed.
Examples
mode.addEventListener('deleted-item', (e) => {
if (e.details instanceof NodeEventArgs) {
const ne = e.details as NodeEventArgs
console.log(`Old parent: ${ne.parent}`)
} else if (e.details instanceof EdgeEventArgs) {
const ee = e.details as EdgeEventArgs
console.log(`Old source port owner: ${ee.sourcePortOwner}`)
console.log(`Old target port owner: ${ee.targetPortOwner}`)
} else if (e.details instanceof PortEventArgs) {
const pe = e.details as PortEventArgs
console.log(`Old port owner: ${pe.owner}`)
} else if (e.details instanceof LabelEventArgs) {
const le = e.details as LabelEventArgs
console.log(`Old label owner: ${le.owner}`)
} else if (e.details instanceof BendEventArgs) {
const be = e.details as BendEventArgs
console.log(`Old bend owner: ${be.owner}`)
}
})See Also
Developer's Guide
API
- deleteSelection, deleting-selection, deleted-selection
Occurs after all selected items have been removed in deleteSelection.
This event is raised after all selected items have been removed. It is recommended to register to this event if one wants to clean up after deletion, e.g. by applying a new automatic layout.
The deleting-selection event is raised before all items have been removed. The deleted-item is raised for each item after it has been removed.
Note that all items which have been removed are not in the selection anymore but are provided as items of the ItemsEventArgs.
Properties of
ItemsEventArgs- context: IInputModeContext
- Gets the context for the current event.
- items: IListEnumerable<IModelItem>
- Gets the items that are the subjects for this event.
Examples
Applying a layout after the selected items have been deleted;
mode.addEventListener('deleted-selection', () => {
mode.graph!.applyLayout(new HierarchicalLayout())
})The deleted items are neither in the selection nor in the graph. One has to retrieve them before deletion:
let selectedItems = new List<IModelItem>()
mode.addEventListener('deleting-selection', (evt) => {
selectedItems = evt.selection.toList()
})
mode.addEventListener('deleted-selection', (evt) => {
// the deleted items are not in the current selection anymore but are provided by the event arguments
const deletedItems = evt.items
})See Also
Developer's Guide
API
- deleteSelection
Occurs just before the deleteSelection method starts its work and will be followed by any number of deleted-item events and finalized by a deleted-selection event.
This event is raised before the deletion starts. It might be used to take a snapshot of the items to delete since there is no access to these afterwards.
The deleted-item is raised for each item after it has been removed. The deleted-selection event is raised after all items have been removed.
Properties of
SelectionEventArgs<IModelItem>- context: IInputModeContext
- Gets the context for the current event.
- selection: IObservableCollection<T>
- Gets the selection these event arguments refer to.
Examples
let selectedItems = new List<IModelItem>()
mode.addEventListener('deleting-selection', (evt) => {
selectedItems = evt.selection.toList()
})
mode.addEventListener('deleted-selection', (evt) => {
// the deleted items are not in the current selection anymore but are provided by the event arguments
const deletedItems = evt.items
})See Also
Developer's Guide
API
- deleteSelection
Occurs after an edge's source and/or target ports have been changed as the result of an input gesture.
Properties of
InputModeItemChangedEventArgs<IEdge, EdgeEventArgs>- context: IInputModeContext
- Gets the context for the current event.
- details: TDetail
- Gets additional information about the state of the item, before it has been deleted.
- item: TItem
- Gets the item which has been created or changed.
See Also
Occurs after the groupSelection method has grouped the selected items.
This event is raised after the items are grouped.
The event is not raised if no items are selected.
Properties of
SelectionEventArgs<IModelItem>- context: IInputModeContext
- Gets the context for the current event.
- selection: IObservableCollection<T>
- Gets the selection these event arguments refer to.
See Also
Occurs just before the groupSelection method starts its work.
This event is raised before the items are grouped.
The event is not raised if no items are selected.
Properties of
SelectionEventArgs<IModelItem>- context: IInputModeContext
- Gets the context for the current event.
- selection: IObservableCollection<T>
- Gets the selection these event arguments refer to.
See Also
Occurs when an item has been clicked or tapped.
If one of the event handlers sets the handled property to true the event will not be propagated anymore.
Button-specific and input type specific events (item-left-clicked and item-right-clicked) will be raised before this event. If one of those is marked handled this event will not be raised anymore.
Properties of
ItemClickedEventArgs<IModelItem>- altKey: boolean
- Gets a value indicating whether the alt modifier was pressed at the time of the click.
- clickCount: number
- Gets the number of clicks associated with this event.
- context: IInputModeContext
- Gets the context for the current event.
- ctrlKey: boolean
- Gets a value indicating whether the control modifier was pressed at the time of the click.
- handled: booleanwritable
- Gets or sets a value indicating whether this instance has been handled.
- item: T
- Gets the item that is the subject of the event.
- location: Point
- Gets the location of the click.
- metaKey: boolean
- Gets a value indicating whether the meta modifier was pressed at the time of the click.
- modifiers: ModifierKeys
- Gets the state of the modifiers at the time of the click.
- originalEventArgs: PointerEventArgs
- Gets the pointer event args that caused this event.
- pointerButtons: PointerButtons
- Gets the PointerButtons that have changed for this event.
- pointerType: PointerType
- Gets the type of the pointer that was the source of this event.
- shiftKey: boolean
- Gets a value indicating whether the shift modifier was pressed at the time of the click.
Examples
mode.addEventListener('item-clicked', (evt) => {
const node = evt.item
if (node !== null) {
doSomethingWithNode(node)
evt.handled = true
}
})See Also
Developer's Guide
API
- clickableItems, item-double-clicked, item-left-clicked, item-right-clicked
Defined in
GraphInputMode.item-clickedOccurs when an item has been double-clicked or double-tapped.
If one of the event handlers sets the handled property to true the event will not be propagated anymore.
Depending on the value of the clickReportingPolicy property of clickInputMode this event may be preceded by no, one, or two item-clicked events (as well as the corresponding button-specific event).
Button-specific and input-type specific events (item-left-double-clicked and item-right-double-clicked) will be raised before this event. If one of those is marked handled this event will not be raised anymore.
Properties of
ItemClickedEventArgs<IModelItem>- altKey: boolean
- Gets a value indicating whether the alt modifier was pressed at the time of the click.
- clickCount: number
- Gets the number of clicks associated with this event.
- context: IInputModeContext
- Gets the context for the current event.
- ctrlKey: boolean
- Gets a value indicating whether the control modifier was pressed at the time of the click.
- handled: booleanwritable
- Gets or sets a value indicating whether this instance has been handled.
- item: T
- Gets the item that is the subject of the event.
- location: Point
- Gets the location of the click.
- metaKey: boolean
- Gets a value indicating whether the meta modifier was pressed at the time of the click.
- modifiers: ModifierKeys
- Gets the state of the modifiers at the time of the click.
- originalEventArgs: PointerEventArgs
- Gets the pointer event args that caused this event.
- pointerButtons: PointerButtons
- Gets the PointerButtons that have changed for this event.
- pointerType: PointerType
- Gets the type of the pointer that was the source of this event.
- shiftKey: boolean
- Gets a value indicating whether the shift modifier was pressed at the time of the click.
Examples
mode.addEventListener('item-double-clicked', (evt) => {
const node = evt.item
if (node !== null) {
doSomethingWithNode(node)
evt.handled = true
}
})See Also
Developer's Guide
API
- item-clicked, clickableItems, item-left-double-clicked, item-right-double-clicked
Defined in
GraphInputMode.item-double-clickedOccurs when an item has been left-clicked.
This event will be raised before the item-clicked event. If one of the event handlers sets the handled property to true the event will not be propagated anymore. This also means that the item-clicked event will not be raised in that case.
The term "left click" refers to a click with the left mouse button or a stylus tap.
Properties of
ItemClickedEventArgs<IModelItem>- altKey: boolean
- Gets a value indicating whether the alt modifier was pressed at the time of the click.
- clickCount: number
- Gets the number of clicks associated with this event.
- context: IInputModeContext
- Gets the context for the current event.
- ctrlKey: boolean
- Gets a value indicating whether the control modifier was pressed at the time of the click.
- handled: booleanwritable
- Gets or sets a value indicating whether this instance has been handled.
- item: T
- Gets the item that is the subject of the event.
- location: Point
- Gets the location of the click.
- metaKey: boolean
- Gets a value indicating whether the meta modifier was pressed at the time of the click.
- modifiers: ModifierKeys
- Gets the state of the modifiers at the time of the click.
- originalEventArgs: PointerEventArgs
- Gets the pointer event args that caused this event.
- pointerButtons: PointerButtons
- Gets the PointerButtons that have changed for this event.
- pointerType: PointerType
- Gets the type of the pointer that was the source of this event.
- shiftKey: boolean
- Gets a value indicating whether the shift modifier was pressed at the time of the click.
Examples
mode.addEventListener('item-left-clicked', (evt) => {
const node = evt.item
if (node !== null) {
doSomethingWithNode(node)
evt.handled = true
}
})See Also
Defined in
GraphInputMode.item-left-clickedOccurs when an item has been left double-clicked.
true the event will not be propagated anymore. This also means that the item-double-clicked event will not be raised in that case.Properties of
ItemClickedEventArgs<IModelItem>- altKey: boolean
- Gets a value indicating whether the alt modifier was pressed at the time of the click.
- clickCount: number
- Gets the number of clicks associated with this event.
- context: IInputModeContext
- Gets the context for the current event.
- ctrlKey: boolean
- Gets a value indicating whether the control modifier was pressed at the time of the click.
- handled: booleanwritable
- Gets or sets a value indicating whether this instance has been handled.
- item: T
- Gets the item that is the subject of the event.
- location: Point
- Gets the location of the click.
- metaKey: boolean
- Gets a value indicating whether the meta modifier was pressed at the time of the click.
- modifiers: ModifierKeys
- Gets the state of the modifiers at the time of the click.
- originalEventArgs: PointerEventArgs
- Gets the pointer event args that caused this event.
- pointerButtons: PointerButtons
- Gets the PointerButtons that have changed for this event.
- pointerType: PointerType
- Gets the type of the pointer that was the source of this event.
- shiftKey: boolean
- Gets a value indicating whether the shift modifier was pressed at the time of the click.
Examples
mode.addEventListener('item-left-double-clicked', (evt) => {
const node = evt.item
if (node !== null) {
doSomethingWithNode(node)
evt.handled = true
}
})See Also
Defined in
GraphInputMode.item-left-double-clickedOccurs when an item has been right-clicked.
true the event will not be propagated anymore. This also means that the item-clicked event will not be raised in that case.Properties of
ItemClickedEventArgs<IModelItem>- altKey: boolean
- Gets a value indicating whether the alt modifier was pressed at the time of the click.
- clickCount: number
- Gets the number of clicks associated with this event.
- context: IInputModeContext
- Gets the context for the current event.
- ctrlKey: boolean
- Gets a value indicating whether the control modifier was pressed at the time of the click.
- handled: booleanwritable
- Gets or sets a value indicating whether this instance has been handled.
- item: T
- Gets the item that is the subject of the event.
- location: Point
- Gets the location of the click.
- metaKey: boolean
- Gets a value indicating whether the meta modifier was pressed at the time of the click.
- modifiers: ModifierKeys
- Gets the state of the modifiers at the time of the click.
- originalEventArgs: PointerEventArgs
- Gets the pointer event args that caused this event.
- pointerButtons: PointerButtons
- Gets the PointerButtons that have changed for this event.
- pointerType: PointerType
- Gets the type of the pointer that was the source of this event.
- shiftKey: boolean
- Gets a value indicating whether the shift modifier was pressed at the time of the click.
Examples
mode.addEventListener('item-right-clicked', (evt) => {
const node = evt.item
if (node !== null) {
doSomethingWithNode(node)
evt.handled = true
}
})See Also
Defined in
GraphInputMode.item-right-clickedOccurs when an item has been right double-clicked.
true the event will not be propagated anymore. This also means that the item-double-clicked event will not be raised in that case.Properties of
ItemClickedEventArgs<IModelItem>- altKey: boolean
- Gets a value indicating whether the alt modifier was pressed at the time of the click.
- clickCount: number
- Gets the number of clicks associated with this event.
- context: IInputModeContext
- Gets the context for the current event.
- ctrlKey: boolean
- Gets a value indicating whether the control modifier was pressed at the time of the click.
- handled: booleanwritable
- Gets or sets a value indicating whether this instance has been handled.
- item: T
- Gets the item that is the subject of the event.
- location: Point
- Gets the location of the click.
- metaKey: boolean
- Gets a value indicating whether the meta modifier was pressed at the time of the click.
- modifiers: ModifierKeys
- Gets the state of the modifiers at the time of the click.
- originalEventArgs: PointerEventArgs
- Gets the pointer event args that caused this event.
- pointerButtons: PointerButtons
- Gets the PointerButtons that have changed for this event.
- pointerType: PointerType
- Gets the type of the pointer that was the source of this event.
- shiftKey: boolean
- Gets a value indicating whether the shift modifier was pressed at the time of the click.
Examples
mode.addEventListener('item-right-double-clicked', (evt) => {
const node = evt.item
if (node !== null) {
doSomethingWithNode(node)
evt.handled = true
}
})See Also
Defined in
GraphInputMode.item-right-double-clickedOccurs when the copy operation finished successfully.
Properties of
ItemsEventArgs- context: IInputModeContext
- Gets the context for the current event.
- items: IListEnumerable<IModelItem>
- Gets the items that are the subjects for this event.
See Also
Developer's Guide
Defined in
GraphInputMode.items-copiedOccurs when the cut operation finished successfully.
Properties of
ItemsEventArgs- context: IInputModeContext
- Gets the context for the current event.
- items: IListEnumerable<IModelItem>
- Gets the items that are the subjects for this event.
See Also
Developer's Guide
Occurs when the duplicateSelection operation finished successfully.
Properties of
ItemsEventArgs- context: IInputModeContext
- Gets the context for the current event.
- items: IListEnumerable<IModelItem>
- Gets the items that are the subjects for this event.
See Also
Developer's Guide
Occurs when the paste operation finished successfully.
Properties of
ItemsEventArgs- context: IInputModeContext
- Gets the context for the current event.
- items: IListEnumerable<IModelItem>
- Gets the items that are the subjects for this event.
See Also
Developer's Guide
Occurs when this mode has triggered the addition of an ILabel, for instance, in response to startLabelAddition.
Properties of
InputModeItemEventArgs<ILabel>- context: IInputModeContext
- Gets the context for the current event.
- item: TModelItem
- Gets the item which has been created or changed.
See Also
Developer's Guide
Occurs when this mode has triggered the edit of an ILabel, for instance, in response to startLabelEditing.
Properties of
InputModeItemEventArgs<ILabel>- context: IInputModeContext
- Gets the context for the current event.
- item: TModelItem
- Gets the item which has been created or changed.
See Also
Developer's Guide
Occurs when a single or multi select operation has been finished.
Properties of
SelectionEventArgs<IModelItem>- context: IInputModeContext
- Gets the context for the current event.
- selection: IObservableCollection<T>
- Gets the selection these event arguments refer to.
Defined in
GraphInputMode.multi-selection-finishedOccurs when a single or multi select operation has been started.
Properties of
SelectionEventArgs<IModelItem>- context: IInputModeContext
- Gets the context for the current event.
- selection: IObservableCollection<T>
- Gets the selection these event arguments refer to.
Defined in
GraphInputMode.multi-selection-startedOccurs when this mode has created a node in response to user interaction.
true, the reported node can actually be part of the master graph.Properties of
InputModeItemEventArgs<INode>- context: IInputModeContext
- Gets the context for the current event.
- item: TModelItem
- Gets the item which has been created or changed.
Examples
mode.addEventListener('node-created', () => {
mode.graph!.applyLayout(new HierarchicalLayout())
})See Also
Developer's Guide
API
- createNode
Occurs when a node has been reparented interactively.
This is triggered whenever the reparentNodeHandler's reparent method has been called to reparent a node interactively.
The details are of type NodeEventArgs which provide the old parent in its parent property.
Properties of
InputModeItemChangedEventArgs<INode, NodeEventArgs>- context: IInputModeContext
- Gets the context for the current event.
- details: TDetail
- Gets additional information about the state of the item, before it has been deleted.
- item: TItem
- Gets the item which has been created or changed.
See Also
Properties of
PopulateItemContextMenuEventArgs<IModelItem>- context: IInputModeContext
- Gets the context for the current event.
- contextMenu: ContextMenuContentwritable
- Gets or sets the context menu content to use.
- handled: booleanwritable
- Gets or sets a value indicating whether this PopulateContextMenuEventArgs has been handled.
- item: TModelItem
- Gets the item for which the context menu is queried.
- queryLocation: Point
- Gets the queried location in world coordinates.
- showMenu: booleanwritable
- Gets or sets a value indicating whether to actually display the context menu.
Examples
// mode is either an instance of GraphEditorInputMode or GraphViewerInputMode
mode.contextMenuItems = GraphItemTypes.NODE
mode.addEventListener('populate-item-context-menu', (evt) => {
// Get the node which is handled or null if the item is not a node
const node = evt.item
// Create the context menu items
if (node !== null) {
// Create a menu item to delete the node
// Show the menu
evt.contextMenu = [
{ label: 'Delete Item', action: () => graph.remove(node) },
]
}
})Occurs when this mode has triggered the addition of an IPort, for instance, in response to portDropInputMode.
Properties of
InputModeItemEventArgs<IPort>- context: IInputModeContext
- Gets the context for the current event.
- item: TModelItem
- Gets the item which has been created or changed.
Occurs when the mouse is hovering over an item to determine the tool tip to display.
Properties of
QueryItemToolTipEventArgs<IModelItem>- context: IInputModeContext
- Gets the context for the current event.
- handled: booleanwritable
- Gets or sets a value indicating whether this QueryToolTipEventArgs has been handled.
- item: TModelItem
- Gets the item for which the tool tip is queried.
- queryLocation: Point
- Gets the query location in world coordinates.
- toolTip: anywritable
- Gets or sets the tooltip content to use.
Examples
// mode is either an instance of GraphEditorInputMode or GraphViewerInputMode
mode.toolTipItems = GraphItemTypes.NODE
// register a listener
mode.addEventListener('query-item-tool-tip', (evt) => {
if (evt.handled) {
// A tooltip has already been assigned -> nothing to do.
return
}
// We can safely cast here because we set ToolTipItems to only Node.
const hitNode = evt.item as INode
if (hitNode.labels.size > 0) {
// Show the text of the first label as tooltip.
evt.toolTip = hitNode.labels.get(0).text
// Indicate that the tooltip content has been set.
evt.handled = true
}
})Defined in
GraphInputMode.query-item-tool-tipOccurs after the ungroupSelection method has ungrouped the selected items.
This event is raised after the items are ungrouped.
The event is not raised if no items are selected.
Properties of
SelectionEventArgs<IModelItem>- context: IInputModeContext
- Gets the context for the current event.
- selection: IObservableCollection<T>
- Gets the selection these event arguments refer to.
See Also
Occurs just before the ungroupSelection method starts its work.
This event is raised before the items are ungrouped.
The event is not raised if no items are selected.
Properties of
SelectionEventArgs<IModelItem>- context: IInputModeContext
- Gets the context for the current event.
- selection: IObservableCollection<T>
- Gets the selection these event arguments refer to.
See Also
Constants
This testable retrieves the GraphEditorInputMode from the lookup in isHit. All items in its selection that are movable and provide an IPositionHandler are queried for their IHitTestable
This testable is the default hitTestable of moveSelectedItemsInputMode and any MoveInputMode using this testable has to be a child mode of an GraphEditorInputMode.
This handler retrieves the GraphEditorInputMode from the lookup in initializeDrag. All items in its selection that are movable are queried for their IPositionHandler or IHandle and these drag handlers are combined afterwards.
This handler is the default positionHandler of moveSelectedItemsInputMode and any MoveInputMode using this position handler has to be a child mode of an GraphEditorInputMode.
An IHitTestable that tests if any model item that is movable is hit.
This testable retrieves the GraphEditorInputMode from the lookup in isHit. and tests if any hit items that is movable provides an IPositionHandler.
This testable is the default hitTestable of moveUnselectedItemsInputMode. Any MoveInputMode using this testable has to be a child mode of an GraphEditorInputMode.
MOVE_UNSELECTED_ITEMS_QUERY_POSITION_HANDLER
: function(QueryPositionHandlerEventArgs, this): voidstaticAn event handler setting the IPositionHandler of the movable unselected model item that is hit at the queryLocation.
MOVE_UNSELECTED_ITEMS_QUERY_POSITION_HANDLER
: function(QueryPositionHandlerEventArgs, this): voidThis handler retrieves the GraphEditorInputMode from the lookup and tests if any item hit at the queryLocation is movable and provides an IPositionHandler. If such an IPositionHandler is found, it is set as positionHandler.
This handler is added per default to the query-position-handler event of moveUnselectedItemsInputMode. Any MoveInputMode using this query handler has to be a child mode of an GraphEditorInputMode.