markgojs
Version:
Interactive diagrams, charts, and graphs, such as trees, flowcharts, orgcharts, UML, BPMN, or business diagrams
1,520 lines (499 loc) • 64.8 kB
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GoJS® LinkingTool Class</title>
<script src="../../assets/js/jquery.min.js"></script>
<script src="../../assets/js/bootstrap.min.js"></script>
<script src="../../assets/js/highlight.js"></script>
<script src="../../assets/js/api.js"></script>
<script src="../../assets/js/fuse.min.js"></script>
<link href="../../assets/css/bootstrap.min.css" rel="stylesheet" >
<!-- custom CSS after bootstrap -->
<link href="../../assets/css/main.css" rel="stylesheet" type="text/css"/>
<link href="../../assets/css/api.css" rel="stylesheet" type="text/css"/>
<!--<link rel="stylesheet" href="../../assets/css/api.css" type="text/css" media="all" />-->
<link rel="stylesheet" href="../../assets/css/highlight.css" type="text/css" media="all" />
</head>
<body>
<!-- non-fixed navbar -->
<nav id="non-fixed-nav" class="navbar navbar-inverse navbar-top">
<div class="container-fluid">
<div class="navbar-header">
<div class="navheader-container">
<div class="navheader-collapse" data-toggle="collapse" data-target="#navbar">
<a id="toplogo" class="navbar-brand" href="../../index.html">GoJS</a>
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
</div>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="../../index.html">Home</a></li>
<li><a href="../../learn/index.html">Learn</a></li>
<li><a href="../../samples/index.html">Samples</a></li>
<li><a href="../../intro/index.html">Intro</a></li>
<li><a href="../../api/index.html">API</a></li>
<li><a href="https://www.nwoods.com/components/evalform.htm">Register</a></li>
<li><a href="../../download.html">Download</a></li>
<li><a href="https://forum.nwoods.com/c/gojs">Forum</a></li>
<li><a href="https://www.nwoods.com/contact.html" onclick="ga('send','event','Outbound Link','click','contact');">Contact</a></li>
<li class="buy"><a href="https://www.nwoods.com/sales/index.html" onclick="ga('send','event','Outbound Link','click','buy');">Buy</a></li>
<li class="activate"><a href="https://www.nwoods.com/app/activate.aspx?sku=gojs">Activate</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<div class="container-fluid">
<!-- ============================== classes index ============================ -->
<div id="navindex" class="col-md-2">
<!-- begin publish.classesIndex -->
<!-- <div><a href="../index.html">GoJS Class Index</a></div> -->
<div class="sidebar-nav">
<div class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<div class="navheader-container">
<div class="navheader-collapse" data-toggle="collapse" data-target="#DiagramNavbar">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#DiagramNavbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<span class="navbar-brand">Diagram Classes</span>
</div>
</div>
<div id="DiagramNavbar" class="navbar-collapse collapse sidebar-navbar-collapse">
<ul class="classList nav navbar-nav">
<li><a href="../symbols/Adornment.html" class="linkConstructor">Adornment</a></li>
<li><a href="../symbols/AnimationManager.html" class="linkConstructor">AnimationManager</a></li>
<li><a href="../symbols/CommandHandler.html" class="linkConstructor">CommandHandler</a></li>
<li><a href="../symbols/Diagram.html" class="linkConstructor">Diagram</a></li>
<li><a href="../symbols/DiagramEvent.html" class="linkConstructor">DiagramEvent</a></li>
<li><a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a></li>
<li><a href="../symbols/Group.html" class="linkConstructor">Group</a></li>
<li><a href="../symbols/InputEvent.html" class="linkConstructor">InputEvent</a></li>
<li><a href="../symbols/Layer.html" class="linkConstructor">Layer</a></li>
<li><a href="../symbols/Link.html" class="linkConstructor">Link</a></li>
<li><a href="../symbols/Node.html" class="linkConstructor">Node</a></li>
<li><a href="../symbols/Overview.html" class="linkConstructor">Overview</a></li>
<li><a href="../symbols/Palette.html" class="linkConstructor">Palette</a></li>
<li><a href="../symbols/Panel.html" class="linkConstructor">Panel</a></li>
<li><a href="../symbols/Part.html" class="linkConstructor">Part</a></li>
<li><a href="../symbols/Picture.html" class="linkConstructor">Picture</a></li>
<li><a href="../symbols/Placeholder.html" class="linkConstructor">Placeholder</a></li>
<li><a href="../symbols/RowColumnDefinition.html" class="linkConstructor">RowColumnDefinition</a></li>
<li><a href="../symbols/Shape.html" class="linkConstructor">Shape</a></li>
<li><a href="../symbols/TextBlock.html" class="linkConstructor">TextBlock</a></li>
</ul>
</div>
</div>
<div class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<div class="navheader-container">
<div class="navheader-collapse" data-toggle="collapse" data-target="#GeometryNavbar">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#GeometryNavbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<span class="navbar-brand">Geometry Classes</span>
</div>
</div>
<div id="GeometryNavbar" class="navbar-collapse collapse sidebar-navbar-collapse">
<ul class="classList nav navbar-nav">
<li><a href="../symbols/Brush.html" class="linkConstructor">Brush</a></li>
<li><a href="../symbols/Geometry.html" class="linkConstructor">Geometry</a></li>
<li><a href="../symbols/Margin.html" class="linkConstructor">Margin</a></li>
<li><a href="../symbols/PathFigure.html" class="linkConstructor">PathFigure</a></li>
<li><a href="../symbols/PathSegment.html" class="linkConstructor">PathSegment</a></li>
<li><a href="../symbols/Point.html" class="linkConstructor">Point</a></li>
<li><a href="../symbols/Rect.html" class="linkConstructor">Rect</a></li>
<li><a href="../symbols/Size.html" class="linkConstructor">Size</a></li>
<li><a href="../symbols/Spot.html" class="linkConstructor">Spot</a></li>
</ul>
</div>
</div>
<div class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<div class="navheader-container">
<div class="navheader-collapse" data-toggle="collapse" data-target="#ModelNavbar">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#ModelNavbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<span class="navbar-brand">Model Classes</span>
</div>
</div>
<div id="ModelNavbar" class="navbar-collapse collapse sidebar-navbar-collapse">
<ul class="classList nav navbar-nav">
<li><a href="../symbols/Binding.html" class="linkConstructor">Binding</a></li>
<li><a href="../symbols/ChangedEvent.html" class="linkConstructor">ChangedEvent</a></li>
<li><a href="../symbols/GraphLinksModel.html" class="linkConstructor">GraphLinksModel</a></li>
<li><a href="../symbols/Model.html" class="linkConstructor">Model</a></li>
<li><a href="../symbols/Transaction.html" class="linkConstructor">Transaction</a></li>
<li><a href="../symbols/TreeModel.html" class="linkConstructor">TreeModel</a></li>
<li><a href="../symbols/UndoManager.html" class="linkConstructor">UndoManager</a></li>
</ul>
</div>
</div>
<div class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<div class="navheader-container">
<div class="navheader-collapse" data-toggle="collapse" data-target="#LayoutNavbar">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#LayoutNavbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<span class="navbar-brand">Layout Classes</span>
</div>
</div>
<div id="LayoutNavbar" class="navbar-collapse collapse sidebar-navbar-collapse">
<ul class="classList nav navbar-nav">
<li><a href="../symbols/CircularLayout.html" class="linkConstructor">CircularLayout</a></li>
<li><a href="../symbols/ForceDirectedLayout.html" class="linkConstructor">ForceDirectedLayout</a></li>
<li><a href="../symbols/GridLayout.html" class="linkConstructor">GridLayout</a></li>
<li><a href="../symbols/LayeredDigraphLayout.html" class="linkConstructor">LayeredDigraphLayout</a></li>
<li><a href="../symbols/Layout.html" class="linkConstructor">Layout</a></li>
<li><a href="../symbols/LayoutNetwork.html" class="linkConstructor">LayoutNetwork</a></li>
<li><a href="../symbols/TreeLayout.html" class="linkConstructor">TreeLayout</a></li>
</ul>
</div>
</div>
<div class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<div class="navheader-container">
<div class="navheader-collapse" data-toggle="collapse" data-target="#ToolNavbar">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#ToolNavbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<span class="navbar-brand">Tool Classes</span>
</div>
</div>
<div id="ToolNavbar" class="navbar-collapse collapse sidebar-navbar-collapse">
<ul class="classList nav navbar-nav">
<li><a href="../symbols/ActionTool.html" class="linkConstructor">ActionTool</a></li>
<li><a href="../symbols/ClickCreatingTool.html" class="linkConstructor">ClickCreatingTool</a></li>
<li><a href="../symbols/ClickSelectingTool.html" class="linkConstructor">ClickSelectingTool</a></li>
<li><a href="../symbols/ContextMenuTool.html" class="linkConstructor">ContextMenuTool</a></li>
<li><a href="../symbols/DraggingTool.html" class="linkConstructor">DraggingTool</a></li>
<li><a href="../symbols/DragSelectingTool.html" class="linkConstructor">DragSelectingTool</a></li>
<li><a href="../symbols/HTMLInfo.html" class="linkConstructor">HTMLInfo</a></li>
<li><a href="../symbols/LinkingBaseTool.html" class="linkConstructor">LinkingBaseTool</a></li>
<li><a href="../symbols/LinkingTool.html" class="linkConstructor">LinkingTool</a></li>
<li><a href="../symbols/LinkReshapingTool.html" class="linkConstructor">LinkReshapingTool</a></li>
<li><a href="../symbols/PanningTool.html" class="linkConstructor">PanningTool</a></li>
<li><a href="../symbols/RelinkingTool.html" class="linkConstructor">RelinkingTool</a></li>
<li><a href="../symbols/ResizingTool.html" class="linkConstructor">ResizingTool</a></li>
<li><a href="../symbols/RotatingTool.html" class="linkConstructor">RotatingTool</a></li>
<li><a href="../symbols/TextEditingTool.html" class="linkConstructor">TextEditingTool</a></li>
<li><a href="../symbols/Tool.html" class="linkConstructor">Tool</a></li>
<li><a href="../symbols/ToolManager.html" class="linkConstructor">ToolManager</a></li>
</ul>
</div>
</div>
<div class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<div class="navheader-container">
<div class="navheader-collapse" data-toggle="collapse" data-target="#CollectionNavbar">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#CollectionNavbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<span class="navbar-brand">Collection Classes</span>
</div>
</div>
<div id="CollectionNavbar" class="navbar-collapse collapse sidebar-navbar-collapse">
<ul class="classList nav navbar-nav">
<li><a href="../symbols/Iterable.html" class="linkConstructor">Iterable</a></li>
<li><a href="../symbols/Iterator.html" class="linkConstructor">Iterator</a></li>
<li><a href="../symbols/List.html" class="linkConstructor">List</a></li>
<li><a href="../symbols/Map.html" class="linkConstructor">Map</a></li>
<li><a href="../symbols/Set.html" class="linkConstructor">Set</a></li>
</ul>
</div>
</div>
</div> <!-- /class="sidebar-nav -->
<!-- end publish.classesIndex -->
</div>
<div id="contentBody" class="col-md-10">
<div class="searchsumm">
<div class="table-wrap">
<div class="table-cell" id="apisearch" data-base="../">
<div class="title">Search API</div>
<div class="field">
<label for="search-field" class="search-icon"></label>
<input id="search-field" type="text" />
</div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li>
</ul>
</div>
<div class="table-cell" id="apisumm">
<input type="checkbox" id="showsumms" />
<label class="apisumms" for="showsumms">Show Summaries</label>
</div>
</div>
</div>
<!-- ============================== header ================================= -->
<div id="header" class="fineprint">
<b>GoJS</b>® Diagramming Components<br/>version 1.8.36 for JavaScript/HTML<br/>by <a href="https://www.nwoods.com/">Northwoods Software®</a>
</div>
<!-- ============================== class title ============================ -->
<h2 class="classTitle">
Class LinkingTool
</h2>
<!-- ============================== class summary ========================== -->
<p class="classsummary">
<span class="extends"> Extends
<a href="../symbols/LinkingBaseTool.html" class="linkConstructor">LinkingBaseTool</a>.</span>
The LinkingTool lets a user draw a new <a href="../symbols/Link.html" class="linkConstructor">Link</a> between two ports,
using a mouse-drag operation.
<p>
By default an instance of this tool is installed as a mouse-move tool in the
<a href="../symbols/Diagram.html#toolManager" class="linkProperty">Diagram.toolManager</a> as the <a href="../symbols/ToolManager.html#linkingTool" class="linkProperty">ToolManager.linkingTool</a>.
However this tool may be used modally, as described below.
<p>
<a href="../symbols/LinkingTool.html#canStart" class="linkMethod">canStart</a> calls <a href="../symbols/LinkingTool.html#findLinkablePort" class="linkMethod">findLinkablePort</a> to find a valid "port" element
from which (or to which) the user may interactively draw a new link.
<a href="../symbols/LinkingTool.html#doActivate" class="linkMethod">doActivate</a> sets up a temporary link and two temporary nodes,
one at the start port and one following the mouse.
<p class="boxread">
For a general discussion of validation, see <a href="../../intro/validation.html">Introduction to Validation</a>.
<p>
This tool does not utilize any <a href="../symbols/Adornment.html" class="linkConstructor">Adornment</a>s or tool handles.
<p>
This tool conducts a transaction while the tool is active.
A successful linking will result in a "LinkDrawn" <a href="../symbols/DiagramEvent.html" class="linkConstructor">DiagramEvent</a> and a "Linking" transaction.
<p>
If you want to programmatically start a new user mouse-gesture to draw a new link
from a given <a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a> that may be a "port" or may be within
the visual tree of a "port", set the <a href="../symbols/LinkingTool.html#startObject" class="linkProperty">startObject</a> property
to let <a href="../symbols/LinkingTool.html#findLinkablePort" class="linkMethod">findLinkablePort</a> find the real "port" element.
Then start and activate this tool:
<pre>
var tool = myDiagram.toolManager.linkingTool;
tool.startObject = ...;
myDiagram.currentTool = tool;
tool.doActivate();
</pre>
</p>
<!-- ============================== constructor summary ==================== -->
<h2 id="constructor" class="summaryCaption"> Constructor <span class="nodetails"> Summary</span><span class="details"> Details</span></h2>
<div class="table-responsive">
<table class="summaryTable table table-bordered table-condensed" summary="A summary of the constructor documented in the class LinkingTool.">
<thead>
<tr>
<th scope="col" class="name">Name</th>
<th scope="col" class="description">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name" >
<div class="name">
LinkingTool()
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>You do not normally need to create an instance of this tool
because one already exists as the <a href="../symbols/ToolManager.html#linkingTool" class="linkProperty">ToolManager.linkingTool</a>, which you can modify.<span class="nodetails" id="xconLinkingTool"><a class="morelink" onclick="hst('conLinkingTool')">More...</a></span> <span class="details" id="conLinkingTool">
</span><div class="details" id="dconLinkingTool"><p>
The <a href="../symbols/Tool.html#name" class="linkProperty">Tool.name</a> of this tool is "Linking".</div>
</div>
</td>
</tr>
</tbody>
</table>
</div><!-- class="table-responsive">-->
<!-- ============================== properties summary ===================== -->
<h2 class="summaryCaption">Properties<span class="nodetails"> Summary</span><span class="details"> Details</span></h2>
<div class="table-responsive">
<table class="summaryTable table table-bordered table-condensed" summary="A summary of the properties documented in the class LinkingTool.">
<thead>
<tr>
<th scope="col" class="name">Name, Value Type</th>
<th scope="col" class="description">Description</th>
</tr>
</thead>
<tbody>
<tr id="archetypeLabelNodeData" >
<td class="name">
<div class="name">
archetypeLabelNodeData
</div>
<div class="attributes">
<span class="light">{Object}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp <p> -->
<p>Gets or sets an optional node data object representing a link label, that is copied by <a href="../symbols/LinkingTool.html#insertLink" class="linkMethod">insertLink</a>
and added to the <a href="../symbols/GraphLinksModel.html" class="linkConstructor">GraphLinksModel</a> when creating a new <a href="../symbols/Link.html" class="linkConstructor">Link</a>.<span class="nodetails" id="xproparchetypeLabelNodeData"><a class="morelink" onclick="hst('proparchetypeLabelNodeData')">More...</a></span> <span class="details" id="proparchetypeLabelNodeData">
</span><div class="details" id="dproparchetypeLabelNodeData"><p>
The default value is null, which causes no such label node data to be added to the model
along with the new link data.
<p>
<a href="../symbols/LinkingTool.html#insertLink" class="linkMethod">insertLink</a> calls <a href="../symbols/GraphLinksModel.html#addLabelKeyForLinkData" class="linkMethod">GraphLinksModel.addLabelKeyForLinkData</a>
to associate the label node data with the link data.
<p>
Setting this property does not raise any events.
This property is ignored if the <a href="../symbols/Diagram.html#model" class="linkProperty">Diagram.model</a> is not a <a href="../symbols/GraphLinksModel.html" class="linkConstructor">GraphLinksModel</a>.</div>
</div>
</td>
</tr>
<tr id="archetypeLinkData" >
<td class="name">
<div class="name">
archetypeLinkData
</div>
<div class="attributes">
<span class="light">{Object}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp <p> -->
<p>Gets or sets a data object that is copied by <a href="../symbols/LinkingTool.html#insertLink" class="linkMethod">insertLink</a>
and added to the <a href="../symbols/GraphLinksModel.html" class="linkConstructor">GraphLinksModel</a> when creating a new <a href="../symbols/Link.html" class="linkConstructor">Link</a>.<span class="nodetails" id="xproparchetypeLinkData"><a class="morelink" onclick="hst('proparchetypeLinkData')">More...</a></span> <span class="details" id="proparchetypeLinkData">
The default value is an empty Object, which will be copied.
The value must be an Object for the linking operation to succeed.
A null value will cause <a href="../symbols/LinkingTool.html#insertLink" class="linkMethod">insertLink</a> to fail.
</span><div class="details" id="dproparchetypeLinkData"><p>
The copied link data's <a href="../symbols/GraphLinksModel.html#linkFromKeyProperty" class="linkProperty">GraphLinksModel.linkFromKeyProperty</a>
and <a href="../symbols/GraphLinksModel.html#linkToKeyProperty" class="linkProperty">GraphLinksModel.linkToKeyProperty</a> properties are set to
the corresponding node's data's key values.
If the ports have <a href="../symbols/GraphObject.html#portId" class="linkProperty">GraphObject.portId</a> values that are not null,
the link data's <a href="../symbols/GraphLinksModel.html#linkFromPortIdProperty" class="linkProperty">GraphLinksModel.linkFromPortIdProperty</a>
and <a href="../symbols/GraphLinksModel.html#linkToPortIdProperty" class="linkProperty">GraphLinksModel.linkToPortIdProperty</a> properties are also set.
<p>
Setting this property does not raise any events.
This property is ignored if the <a href="../symbols/Diagram.html#model" class="linkProperty">Diagram.model</a> is not a <a href="../symbols/GraphLinksModel.html" class="linkConstructor">GraphLinksModel</a>.</div>
</div>
</td>
</tr>
<tr id="direction" >
<td class="name">
<div class="name">
direction
</div>
<div class="attributes">
<span class="light">{EnumValue}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp <p> -->
<p>Gets or sets the direction in which new links may be drawn.<span class="nodetails" id="xpropdirection"><a class="morelink" onclick="hst('propdirection')">More...</a></span> <span class="details" id="propdirection">
Possible values are <a href="../symbols/LinkingTool.html#ForwardsOnly" class="linkConstant">LinkingTool.ForwardsOnly</a>, <a href="../symbols/LinkingTool.html#BackwardsOnly" class="linkConstant">LinkingTool.BackwardsOnly</a>, or <a href="../symbols/LinkingTool.html#Either" class="linkConstant">LinkingTool.Either</a>.
This defaults to <a href="../symbols/LinkingTool.html#Either" class="linkConstant">LinkingTool.Either</a>.
Setting this property does not raise any events.</span>
</div>
</td>
</tr>
<tr id="startObject" >
<td class="name">
<div class="name">
startObject
</div>
<div class="attributes">
<span class="light">{<a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a>}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp <p> -->
<p>Gets or sets the <a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a> at which <a href="../symbols/LinkingTool.html#findLinkablePort" class="linkMethod">findLinkablePort</a> should start its search.<span class="nodetails" id="xpropstartObject"><a class="morelink" onclick="hst('propstartObject')">More...</a></span> <span class="details" id="propstartObject">
The default value is null.
Setting this property does not raise any events.
</span><div class="details" id="dpropstartObject"><p>
If you want to explicitly start a new user mouse-gesture to draw a new link
from a given <a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a> that may be a "port" object or may be within
the visual tree of a "port" object, set this property to that object
to let <a href="../symbols/LinkingTool.html#findLinkablePort" class="linkMethod">findLinkablePort</a> find the real "port" object.
Then start and activate this tool:
<pre>
var tool = myDiagram.toolManager.linkingTool;
tool.startObject = ...;
myDiagram.currentTool = tool;
tool.doActivate();
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</div><!-- class="table-responsive">-->
<dl class="inheritsList">
<dt>Properties borrowed from class <a href="../symbols/LinkingBaseTool.html" class="linkConstructor">LinkingBaseTool</a>: </dt><dd><a href="../symbols/LinkingBaseTool.html#isForwards" class="linkProperty">isForwards</a>, <a href="../symbols/LinkingBaseTool.html#isUnconnectedLinkValid" class="linkProperty">isUnconnectedLinkValid</a>, <a href="../symbols/LinkingBaseTool.html#linkValidation" class="linkProperty">linkValidation</a>, <a href="../symbols/LinkingBaseTool.html#originalFromNode" class="linkProperty">originalFromNode</a>, <a href="../symbols/LinkingBaseTool.html#originalFromPort" class="linkProperty">originalFromPort</a>, <a href="../symbols/LinkingBaseTool.html#originalLink" class="linkProperty">originalLink</a>, <a href="../symbols/LinkingBaseTool.html#originalToNode" class="linkProperty">originalToNode</a>, <a href="../symbols/LinkingBaseTool.html#originalToPort" class="linkProperty">originalToPort</a>, <a href="../symbols/LinkingBaseTool.html#portGravity" class="linkProperty">portGravity</a>, <a href="../symbols/LinkingBaseTool.html#portTargeted" class="linkProperty">portTargeted</a>, <a href="../symbols/LinkingBaseTool.html#targetPort" class="linkProperty">targetPort</a>, <a href="../symbols/LinkingBaseTool.html#temporaryFromNode" class="linkProperty">temporaryFromNode</a>, <a href="../symbols/LinkingBaseTool.html#temporaryFromPort" class="linkProperty">temporaryFromPort</a>, <a href="../symbols/LinkingBaseTool.html#temporaryLink" class="linkProperty">temporaryLink</a>, <a href="../symbols/LinkingBaseTool.html#temporaryToNode" class="linkProperty">temporaryToNode</a>, <a href="../symbols/LinkingBaseTool.html#temporaryToPort" class="linkProperty">temporaryToPort</a></dd><dt>Properties borrowed from class <a href="../symbols/Tool.html" class="linkConstructor">Tool</a>: </dt><dd><a href="../symbols/Tool.html#diagram" class="linkProperty">diagram</a>, <a href="../symbols/Tool.html#isActive" class="linkProperty">isActive</a>, <a href="../symbols/Tool.html#isEnabled" class="linkProperty">isEnabled</a>, <a href="../symbols/Tool.html#name" class="linkProperty">name</a>, <a href="../symbols/Tool.html#transactionResult" class="linkProperty">transactionResult</a></dd>
</dl>
<!-- ============================== methods summary ======================== -->
<h2 class="summaryCaption">Method <span class="nodetails"> Summary</span><span class="details"> Details</span></h2>
<div class="table-responsive">
<table class="summaryTable table table-bordered table-condensed" summary="A summary of the methods documented in the class LinkingTool.">
<thead>
<tr>
<th scope="col" class="name">Name, Return Type</th>
<th scope="col" class="description">Description</th>
</tr>
</thead>
<tbody>
<tr id="canStart">
<td class="name">
<div class="name">
canStart()
</div>
<div class="attributes">
<span class="light">{boolean}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>This tool can run when the diagram allows linking, the model is modifiable,
the left-button mouse drag has moved far enough away to not be a click, and
when <a href="../symbols/LinkingTool.html#findLinkablePort" class="linkMethod">findLinkablePort</a> has returned a valid port
or when <a href="../symbols/LinkingTool.html#startObject" class="linkProperty">startObject</a> is a valid port.<span class="nodetails" id="xmethcanStart"><a class="morelink" onclick="hst('methcanStart')">More...</a></span> <span class="details" id="methcanStart">
</span><div class="details" id="dmethcanStart"><p>
This method may be overridden, but we recommend that you call this base method.</div>
<dl class="detailList">
<dt class="heading">Returns:</dt>
<dt><span class="light fixedFont">{boolean}</span> </dt>
</dl>
</div>
</td>
</tr>
<tr id="doActivate">
<td class="name">
<div class="name">
doActivate()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Start the linking operation.<span class="nodetails" id="xmethdoActivate"><a class="morelink" onclick="hst('methdoActivate')">More...</a></span> <span class="details" id="methdoActivate">
</span><div class="details" id="dmethdoActivate"><p>
If the <a href="../symbols/LinkingTool.html#startObject" class="linkProperty">startObject</a> is already set, it uses that object to find the starting port.
If it is not set, this calls <a href="../symbols/LinkingTool.html#findLinkablePort" class="linkMethod">findLinkablePort</a> and remembers it as the starting port.
<p>
It then start a transaction, captures the mouse, and changes the cursor.
Next it initializes and adds the <a href="../symbols/LinkingBaseTool.html#temporaryFromNode" class="linkProperty">LinkingBaseTool.temporaryFromNode</a>,
<a href="../symbols/LinkingBaseTool.html#temporaryToNode" class="linkProperty">LinkingBaseTool.temporaryToNode</a>, and <a href="../symbols/LinkingBaseTool.html#temporaryLink" class="linkProperty">LinkingBaseTool.temporaryLink</a> to the diagram.
The temporary nodes that are positioned and sized to be like the real <a href="../symbols/LinkingBaseTool.html#originalFromPort" class="linkProperty">LinkingBaseTool.originalFromPort</a>
and <a href="../symbols/LinkingBaseTool.html#originalToPort" class="linkProperty">LinkingBaseTool.originalToPort</a> ports.
The temporary link connects the two temporary ports, of course.
<p>
This method may be overridden, but we recommend that you call this base method.</div>
</div>
</td>
</tr>
<tr id="doDeactivate">
<td class="name">
<div class="name">
doDeactivate()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Finishing the linking operation stops the transaction, releases the mouse, and resets the cursor.<span class="nodetails" id="xmethdoDeactivate"><a class="morelink" onclick="hst('methdoDeactivate')">More...</a></span> <span class="details" id="methdoDeactivate">
</span><div class="details" id="dmethdoDeactivate"><p>
This method may be overridden, but we recommend that you call this base method.</div>
</div>
</td>
</tr>
<tr id="doMouseUp">
<td class="name">
<div class="name">
doMouseUp()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>A mouse-up ends the linking operation; if there is a valid <a href="../symbols/LinkingBaseTool.html#targetPort" class="linkProperty">targetPort</a> nearby,
this adds a new <a href="../symbols/Link.html" class="linkConstructor">Link</a> by calling <a href="../symbols/LinkingTool.html#insertLink" class="linkMethod">insertLink</a>.<span class="nodetails" id="xmethdoMouseUp"><a class="morelink" onclick="hst('methdoMouseUp')">More...</a></span> <span class="details" id="methdoMouseUp">
</span><div class="details" id="dmethdoMouseUp"><p>
If there is a new link, it is selected and the "LinkDrawn" <a href="../symbols/DiagramEvent.html" class="linkConstructor">DiagramEvent</a> is raised
with the new link as the <a href="../symbols/DiagramEvent.html#subject" class="linkProperty">DiagramEvent.subject</a>.
If there is no new link, this calls <a href="../symbols/LinkingTool.html#doNoLink" class="linkMethod">doNoLink</a>.
In any case this stops the tool.
<p>
This method may be overridden, but we recommend that you call this base method.
It is usually easier to override <a href="../symbols/LinkingTool.html#insertLink" class="linkMethod">insertLink</a> or just set <a href="../symbols/LinkingTool.html#archetypeLinkData" class="linkProperty">archetypeLinkData</a>.
It is also common to implement a "LinkDrawn" <a href="../symbols/DiagramEvent.html" class="linkConstructor">DiagramEvent</a> listener on the <a href="../symbols/Diagram.html" class="linkConstructor">Diagram</a>.</div>
</div>
</td>
</tr>
<tr id="doNoLink">
<td class="name">
<div class="name">
doNoLink(fromnode, fromport, tonode, toport)
</div>
<div class="attributes">
<span class="since" title="since">1.7</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>This method is called upon a mouse up when no new link is drawn,
either because no valid <a href="../symbols/LinkingBaseTool.html#targetPort" class="linkProperty">LinkingBaseTool.targetPort</a> was found or because
<a href="../symbols/LinkingTool.html#insertLink" class="linkMethod">insertLink</a> returned null.<span class="nodetails" id="xmethdoNoLink"><a class="morelink" onclick="hst('methdoNoLink')">More...</a></span> <span class="details" id="methdoNoLink">
</span><div class="details" id="dmethdoNoLink"><p>
This method may be overridden. By default this method does nothing.
If you want to successfully perform any side-effects, you will need to set <a href="../symbols/Tool.html#transactionResult" class="linkProperty">Tool.transactionResult</a> to a string;
otherwise this tool's transaction will be rolled-back.
Please read the Introduction page on <a href="../../intro/extensions.html">Extensions</a> for how to override methods and how to call this base method.</div>
<dl class="detailList">
<dt class="heading">Parameters:</dt>
<dt>
<span class="light fixedFont">{<a href="../symbols/Node.html" class="linkConstructor">Node</a>}</span> <b>fromnode</b>
</dt>
<dd></dd>
<dt>
<span class="light fixedFont">{<a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a>}</span> <b>fromport</b>
</dt>
<dd>the from-port, or null to use the node itself</dd>
<dt>
<span class="light fixedFont">{<a href="../symbols/Node.html" class="linkConstructor">Node</a>}</span> <b>tonode</b>
</dt>
<dd></dd>
<dt>
<span class="light fixedFont">{<a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a>}</span> <b>toport</b>
</dt>
<dd>the to-port, or null to use the node itself</dd>
</dl>
</div>
</td>
</tr>
<tr id="findLinkablePort">
<td class="name">
<div class="name">
findLinkablePort()
</div>
<div class="attributes">
<span class="light">{<a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a>}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Return the <a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a> at the mouse-down point,
if it is part of a node and if it is valid to link with it.<span class="nodetails" id="xmethfindLinkablePort"><a class="morelink" onclick="hst('methfindLinkablePort')">More...</a></span> <span class="details" id="methfindLinkablePort">
</span><div class="details" id="dmethfindLinkablePort"><p>
This method may be overridden, but we reco