control-freak-ide/misc/pocs/GoJS/api/symbols/Tool.html
plastic-hub-dev-node-saturn 538369cff7 latest
2021-05-12 18:35:18 +02:00

2135 lines
101 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GoJS&reg; Tool 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>
<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="../../doc/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">
<!-- ============================== header ================================= -->
<div id="header" class="fineprint mt30">
<b>GoJS</b>&reg; Diagramming Components<br/>version 1.8.5 for JavaScript/HTML<br/>by <a href="https://www.nwoods.com/">Northwoods Software&reg;</a>
</div>
<!-- ============================== class title ============================ -->
<h2 class="classTitle mt30">
Class Tool
</h2>
<!-- ============================== class summary ========================== -->
<span class="hideshowall">
<span class="nodetails"><button id="buttonShow">Show Details</button></span>
<span class="details"><button id="buttonHide">Show Summaries</button></span>
</span>
<p class="classsummary">
Tools handle mouse, keyboard, and touch events.
The currently running tool, <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a>, receives all input events from the <a href="../symbols/Diagram.html" class="linkConstructor">Diagram</a>
via canonicalized <a href="../symbols/InputEvent.html" class="linkConstructor">InputEvent</a>s.
<p class="boxrun">
For more discussion, see <a href="../../intro/tools.html">Introduction to Tools</a>.
See samples that make use of tools in the <a href="../../samples/index.html#tools">samples index</a>.
<p>
Most tools are "mode-less" tools that are managed by the <a href="../symbols/ToolManager.html" class="linkConstructor">ToolManager</a>,
which chooses the current tool based on the kind and position of the mouse event and the parts in the diagram.
The <a href="../symbols/ToolManager.html" class="linkConstructor">ToolManager</a> has properties holding instances of most of the pre-defined <a href="../symbols/Tool.html" class="linkConstructor">Tool</a> classes.
These classes include:
<ul>
<li>In the <a href="../symbols/ToolManager.html#mouseDownTools" class="linkProperty">ToolManager.mouseDownTools</a> <a href="../symbols/List.html" class="linkConstructor">List</a>:
<ul>
<li><a href="../symbols/ActionTool.html" class="linkConstructor">ActionTool</a></li>
<li><a href="../symbols/RelinkingTool.html" class="linkConstructor">RelinkingTool</a></li>
<li><a href="../symbols/LinkReshapingTool.html" class="linkConstructor">LinkReshapingTool</a></li>
<li><a href="../symbols/ResizingTool.html" class="linkConstructor">ResizingTool</a></li>
<li><a href="../symbols/RotatingTool.html" class="linkConstructor">RotatingTool</a></li>
</ul>
</li>
<li>In the <a href="../symbols/ToolManager.html#mouseMoveTools" class="linkProperty">ToolManager.mouseMoveTools</a> <a href="../symbols/List.html" class="linkConstructor">List</a>:
<ul>
<li><a href="../symbols/LinkingTool.html" class="linkConstructor">LinkingTool</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/PanningTool.html" class="linkConstructor">PanningTool</a></li>
</ul>
</li>
<li>In the <a href="../symbols/ToolManager.html#mouseUpTools" class="linkProperty">ToolManager.mouseUpTools</a> <a href="../symbols/List.html" class="linkConstructor">List</a>:
<ul>
<li><a href="../symbols/ContextMenuTool.html" class="linkConstructor">ContextMenuTool</a></li>
<li><a href="../symbols/TextEditingTool.html" class="linkConstructor">TextEditingTool</a></li>
<li><a href="../symbols/ClickCreatingTool.html" class="linkConstructor">ClickCreatingTool</a></li>
<li><a href="../symbols/ClickSelectingTool.html" class="linkConstructor">ClickSelectingTool</a></li>
</ul>
</li>
</ul>
The ToolManager chooses a tool to run as the diagram's current tool by finding in its lists of tools the first tool
whose <a href="../symbols/Tool.html#canStart" class="linkMethod">canStart</a> method returns true. The ToolManager then sets <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> to be that tool.
<p>
A tool is in the "running" state when it is the value of <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a>.
The <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> property setter will call <a href="../symbols/Tool.html#doStop" class="linkMethod">doStop</a> on the old tool
and then call <a href="../symbols/Tool.html#doStart" class="linkMethod">doStart</a> on the new tool.
<p>
A tool can then go into the "active" state once it decides it can actually do something.
This happens with a call to <a href="../symbols/Tool.html#doActivate" class="linkMethod">doActivate</a>, normally called by the ToolManager.
Later it is deactivated (<a href="../symbols/Tool.html#doDeactivate" class="linkMethod">doDeactivate</a>) and then stopped.
<a href="../symbols/Tool.html#isActive" class="linkProperty">isActive</a> should be true when the tool is "active".
Often tools should ignore certain common events, such as calls to <a href="../symbols/Tool.html#doMouseMove" class="linkMethod">doMouseMove</a>,
unless the tool <a href="../symbols/Tool.html#isActive" class="linkProperty">isActive</a>.
<p>
You can prevent a "mode-less" tool (i.e. one managed by the <a href="../symbols/ToolManager.html" class="linkConstructor">ToolManager</a>)
from being started by the ToolManager by setting <a href="../symbols/Tool.html#isEnabled" class="linkProperty">isEnabled</a> to false.
<p>
You can also go into a particular "mode" by setting <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> explicitly,
thereby circumventing the normal operation of the <a href="../symbols/ToolManager.html" class="linkConstructor">ToolManager</a>.
This ignores the <a href="../symbols/Tool.html#isEnabled" class="linkProperty">isEnabled</a> property and does not call the <a href="../symbols/Tool.html#canStart" class="linkMethod">canStart</a> predicate.
The behavior will depend on the tool -- not all of the predefined tools support operating as a "modal" tool.
<p>
Tools cannot be shared amongst multiple Diagrams.
<p>
If you define a Tool subclass, you may override any of the methods whose names start with "do"
and any other methods that are documented to be overridable, such as <a href="../symbols/Tool.html#canStart" class="linkMethod">canStart</a>.
However you must seriously consider calling the base method in order to gets its default behavior.
There may be situations where not calling the base method may cause subtle bugs.
But that depends on the method and the tool.
Please read the Introduction page on <a href="../../intro/extensions.html">Extensions</a> for how to override methods and how to call the base method.
</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 Tool.">
<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">
Tool()
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Don't construct this directly -- this is an abstract class.
</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 Tool.">
<thead>
<tr>
<th scope="col" class="name">Name, Value Type</th>
<th scope="col" class="description">Description</th>
</tr>
</thead>
<tbody>
<tr id="diagram" >
<td class="name">
<div class="name">
diagram
</div>
<div class="attributes">
<span class="light">{<a href="../symbols/Diagram.html" class="linkConstructor">Diagram</a>}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp <p> -->
<p>This read-only property returns the <a href="../symbols/Diagram.html" class="linkConstructor">Diagram</a> that owns this tool and
for which this tool is handling input events.
</div>
</td>
</tr>
<tr id="isActive" >
<td class="name">
<div class="name">
isActive
</div>
<div class="attributes">
<span class="light">{boolean}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp <p> -->
<p>Gets or sets whether this tool is started and is actively doing something.<span class="nodetails" id="xpropisActive"><a class="morelink" onclick="hst('propisActive')">More...</a></span> <span class="details" id="propisActive">
</span><div class="details" id="dpropisActive"><p>
You can set this to true after your tool is started (i.e. when it is the
<a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> and <a href="../symbols/Tool.html#doStart" class="linkMethod">doStart</a>
had been called), but when it is not yet in a state
that it is actually "doing" something, because it is waiting for the right
circumstances. This is typically only important when the tool is used in
a modal fashion.
<p>
The default value is false.
This is normally set by <a href="../symbols/Tool.html#doActivate" class="linkMethod">doActivate</a> and <a href="../symbols/Tool.html#doDeactivate" class="linkMethod">doDeactivate</a>.</div>
</div>
</td>
</tr>
<tr id="isEnabled" >
<td class="name">
<div class="name">
isEnabled
</div>
<div class="attributes">
<span class="light">{boolean}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp <p> -->
<p>Gets or sets whether this tool can be started by a mouse event.<span class="nodetails" id="xpropisEnabled"><a class="morelink" onclick="hst('propisEnabled')">More...</a></span> <span class="details" id="propisEnabled">
</span><div class="details" id="dpropisEnabled"><p>
Set this to false to prevent <a href="../symbols/Tool.html#canStart" class="linkMethod">canStart</a> from returning true.
Setting this property to false should prevent this tool from being used in a mode-less fashion
by the <a href="../symbols/ToolManager.html" class="linkConstructor">ToolManager</a> with a mouse down/move/up event.
However, even when this property is false, this tool can still be used in a modal fashion:
it can still be started by explicitly setting the
<a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> property to this tool.
<p>
The default value is true.</div>
</div>
</td>
</tr>
<tr id="name" >
<td class="name">
<div class="name">
name
</div>
<div class="attributes">
<span class="light">{string}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp <p> -->
<p>Gets or sets the name of this tool.<span class="nodetails" id="xpropname"><a class="morelink" onclick="hst('propname')">More...</a></span> <span class="details" id="propname">
The default name is an empty string,
but the constructor for each instance of a subclass of Tool will initialize it appropriately.
For example, the name of the <a href="../symbols/DragSelectingTool.html" class="linkConstructor">DragSelectingTool</a> is "DragSelecting".
</span><div class="details" id="dpropname"><p>
This name is sometimes used by tools that use <a href="../symbols/Adornment.html" class="linkConstructor">Adornment</a>s as the <a href="../symbols/Part.html#category" class="linkProperty">Part.category</a> for their Adornments.
It is also sometimes used by tools that conduct transactions as the transaction name.</div>
</div>
</td>
</tr>
<tr id="transactionResult" >
<td class="name">
<div class="name">
transactionResult
</div>
<div class="attributes">
<span class="light">{string|null}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp <p> -->
<p>Gets or sets the name of the transaction to be committed by <a href="../symbols/Tool.html#stopTransaction" class="linkMethod">stopTransaction</a>;
if null, the transaction will be rolled back.<span class="nodetails" id="xproptransactionResult"><a class="morelink" onclick="hst('proptransactionResult')">More...</a></span> <span class="details" id="proptransactionResult">
</span><div class="details" id="dproptransactionResult"><p>
If this is non-null at the time of a call to <a href="../symbols/Tool.html#stopTransaction" class="linkMethod">stopTransaction</a>,
it calls <a href="../symbols/Diagram.html#commitTransaction" class="linkMethod">Diagram.commitTransaction</a> with this transaction name;
if this is null at that time, it calls <a href="../symbols/Diagram.html#rollbackTransaction" class="linkMethod">Diagram.rollbackTransaction</a>.
<p>
The default value is null; <a href="../symbols/Tool.html#startTransaction" class="linkMethod">startTransaction</a> will also set this to null.
Because a value of null when <a href="../symbols/Tool.html#stopTransaction" class="linkMethod">stopTransaction</a> is called will rollback the transaction,
it is important that your code sets this property to a non-null value when it thinks it has succeeded.
<p>
This property exists so that no matter what execution path occurs to end the usage of a tool,
any ongoing transaction can be properly committed or rolled-back.</div>
</div>
</td>
</tr>
</tbody>
</table>
</div><!-- class="table-responsive">-->
<!-- ============================== 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 Tool.">
<thead>
<tr>
<th scope="col" class="name">Name, Return Type</th>
<th scope="col" class="description">Description</th>
</tr>
</thead>
<tbody>
<tr id="cancelWaitAfter">
<td class="name">
<div class="name">
cancelWaitAfter()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>This is called to cancel any running "WaitAfter" timer.<span class="nodetails" id="xmethcancelWaitAfter"><a class="morelink" onclick="hst('methcancelWaitAfter')">More...</a></span> <span class="details" id="methcancelWaitAfter">
</span><div class="details" id="dmethcancelWaitAfter"><p>
This is called when a tool is stopped.
<p>
This method is rarely overridden.
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>
</div>
</td>
</tr>
<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 predicate is used by the <a href="../symbols/ToolManager.html" class="linkConstructor">ToolManager</a> to decide if this tool can be started mode-lessly
by mouse and touch events.<span class="nodetails" id="xmethcanStart"><a class="morelink" onclick="hst('methcanStart')">More...</a></span> <span class="details" id="methcanStart">
Implementations of this method can look at <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a> to get the mouse
event and input state.
</span><div class="details" id="dmethcanStart"><p>
By default this method returns <a href="../symbols/Tool.html#isEnabled" class="linkProperty">isEnabled</a>.
This method may be overridden.
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">Returns:</dt>
<dt><span class="light fixedFont">{boolean}</span> true if <a href="../symbols/Tool.html#isEnabled" class="linkProperty">isEnabled</a> is true and
if the <a href="../symbols/Diagram.html#toolManager" class="linkProperty">Diagram.toolManager</a> can make this tool the <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> and
then call the <a href="../symbols/Tool.html#doStart" class="linkMethod">doStart</a> method.</dt>
</dl>
</div>
</td>
</tr>
<tr id="canStartMultiTouch">
<td class="name">
<div class="name">
canStartMultiTouch()
</div>
<div class="attributes">
<span class="light">{boolean}</span>
<span class="since" title="since">1.5</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Called by <a href="../symbols/ToolManager.html#doMouseDown" class="linkMethod">ToolManager.doMouseDown</a> and <a href="../symbols/ToolManager.html#doMouseMove" class="linkMethod">ToolManager.doMouseMove</a>,
this method determines whether or not to allow pinch zooming from a multi-touch event.<span class="nodetails" id="xmethcanStartMultiTouch"><a class="morelink" onclick="hst('methcanStartMultiTouch')">More...</a></span> <span class="details" id="methcanStartMultiTouch">
By default this predicate just returns true.
This method may be overridden.
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.</span>
</p><div class="seealso">See also:
<ul class="seealsolist">
<li><a href="../symbols/Tool.html#standardPinchZoomStart" class="linkMethod">standardPinchZoomStart</a></li>
<li><a href="../symbols/Tool.html#standardPinchZoomMove" class="linkMethod">standardPinchZoomMove</a></li>
</ul></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>The Diagram calls this method after setting <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a>,
to make the new tool active.<span class="nodetails" id="xmethdoActivate"><a class="morelink" onclick="hst('methdoActivate')">More...</a></span> <span class="details" id="methdoActivate">
This should set <a href="../symbols/Tool.html#isActive" class="linkProperty">isActive</a> to true.
Overrides of this method might call <a href="../symbols/Tool.html#startTransaction" class="linkMethod">startTransaction</a>,
if this tool's activity involves modification of the model.
Implementations of this method can look at <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a> to get the mouse
event and input state.
</span><div class="details" id="dmethdoActivate"><p>
You should call this method only after setting <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> to the Tool that you want to activate.
<p>
By default this only sets <a href="../symbols/Tool.html#isActive" class="linkProperty">isActive</a> to true.
This method may be overridden.
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>
</div>
</td>
</tr>
<tr id="doCancel">
<td class="name">
<div class="name">
doCancel()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>The diagram will call this method when the user wishes to cancel the
current tool's operation.<span class="nodetails" id="xmethdoCancel"><a class="morelink" onclick="hst('methdoCancel')">More...</a></span> <span class="details" id="methdoCancel">
Typically this is called when the user hits the ESCAPE key.
This should restore the original state of what was modified by this tool, and then it should call <a href="../symbols/Tool.html#stopTool" class="linkMethod">stopTool</a>.
This method is not responsible for cleaning up any side-effects that should be performed
by <a href="../symbols/Tool.html#doDeactivate" class="linkMethod">doDeactivate</a> and/or <a href="../symbols/Tool.html#doStop" class="linkMethod">doStop</a>, which will always be called whether the tool stops normally or abnormally.
</span><div class="details" id="dmethdoCancel"><p>
By default this method just calls <a href="../symbols/Tool.html#stopTool" class="linkMethod">stopTool</a>.
You will want to override this method even in tools that call <a href="../symbols/Tool.html#startTransaction" class="linkMethod">startTransaction</a> and <a href="../symbols/Tool.html#stopTransaction" class="linkMethod">stopTransaction</a>,
because the <a href="../symbols/UndoManager.html" class="linkConstructor">UndoManager</a> might not be enabled.
This method may be overridden.
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>
</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>The Diagram calls this method on the old tool when
<a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> is set to a new tool.<span class="nodetails" id="xmethdoDeactivate"><a class="morelink" onclick="hst('methdoDeactivate')">More...</a></span> <span class="details" id="methdoDeactivate">
This needs to set <a href="../symbols/Tool.html#isActive" class="linkProperty">isActive</a> to false.
Overrides of this method might call <a href="../symbols/Tool.html#stopTransaction" class="linkMethod">stopTransaction</a>,
if this tool's activity involves modification of the model.
</span><div class="details" id="dmethdoDeactivate"><p>
You should have no reason to call this method, because it is automatically called by the
<a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> property setter on the old tool.
<p>
By default this only sets <a href="../symbols/Tool.html#isActive" class="linkProperty">isActive</a> to false.
This method may be overridden.
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>
</div>
</td>
</tr>
<tr id="doKeyDown">
<td class="name">
<div class="name">
doKeyDown()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>The diagram will call this method upon a key down event.<span class="nodetails" id="xmethdoKeyDown"><a class="morelink" onclick="hst('methdoKeyDown')">More...</a></span> <span class="details" id="methdoKeyDown">
By default this just calls <a href="../symbols/Tool.html#doCancel" class="linkMethod">doCancel</a> if the key is the ESCAPE key.
Implementations of this method can look at <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a> to get the key.
</span><div class="details" id="dmethdoKeyDown"><p>
This method may be overridden.
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>
</div>
</td>
</tr>
<tr id="doKeyUp">
<td class="name">
<div class="name">
doKeyUp()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>The diagram will call this method upon a key up event.<span class="nodetails" id="xmethdoKeyUp"><a class="morelink" onclick="hst('methdoKeyUp')">More...</a></span> <span class="details" id="methdoKeyUp">
Implementations of this method can look at <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a> to get the key.
</span><div class="details" id="dmethdoKeyUp"><p>
By default this method does nothing.
This method may be overridden.
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>
</div>
</td>
</tr>
<tr id="doMouseDown">
<td class="name">
<div class="name">
doMouseDown()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>The diagram will call this method upon a mouse down event.<span class="nodetails" id="xmethdoMouseDown"><a class="morelink" onclick="hst('methdoMouseDown')">More...</a></span> <span class="details" id="methdoMouseDown">
This is normally overridden for mouse-down tools;
it is not called for mouse-move or mouse-up tools.
However it may also be called when the tool is run in a modal fashion,
when code explicitly sets the diagram's <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a>.
Implementations of this method can look at <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a> to get the mouse
event and input state.
</span><div class="details" id="dmethdoMouseDown"><p>
By default this method checks <a href="../symbols/Tool.html#isActive" class="linkProperty">isActive</a>; if that is false it calls <a href="../symbols/Tool.html#canStart" class="linkMethod">canStart</a>.
If that in turn is true, this calls <a href="../symbols/Tool.html#doActivate" class="linkMethod">doActivate</a>.
This method may be overridden.
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>
</div>
</td>
</tr>
<tr id="doMouseMove">
<td class="name">
<div class="name">
doMouseMove()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>The diagram will call this method upon a mouse move event.<span class="nodetails" id="xmethdoMouseMove"><a class="morelink" onclick="hst('methdoMouseMove')">More...</a></span> <span class="details" id="methdoMouseMove">
This is normally overridden for mouse-move tools;
it is not called for mouse-up tools.
However it may also be called when the tool is run in a modal fashion,
when code explicitly sets the diagram's <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a>.
An override of this method usually does nothing when <a href="../symbols/Tool.html#isActive" class="linkProperty">isActive</a> is false.
Implementations of this method can look at <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a> to get the mouse
event and input state.
</span><div class="details" id="dmethdoMouseMove"><p>
By default this method does nothing.
This method may be overridden.
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>
</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>The diagram will call this method upon a mouse up event.<span class="nodetails" id="xmethdoMouseUp"><a class="morelink" onclick="hst('methdoMouseUp')">More...</a></span> <span class="details" id="methdoMouseUp">
This is normally overridden for mouse-up tools.
An override of this method usually does nothing when <a href="../symbols/Tool.html#isActive" class="linkProperty">isActive</a> is false,
except for calling <a href="../symbols/Tool.html#stopTool" class="linkMethod">stopTool</a>.
Tools normally stop upon a mouse up, by calling <a href="../symbols/Tool.html#stopTool" class="linkMethod">stopTool</a>.
If you want to handle multiple mouse down-up gestures in one tool activation,
you will need to override this method to only stop the tool when you want.
Implementations of this method can look at <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a> to get the mouse
event and input state.
</span><div class="details" id="dmethdoMouseUp"><p>
By default this method just calls <a href="../symbols/Tool.html#stopTool" class="linkMethod">stopTool</a>.
This method may be overridden.
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>
</div>
</td>
</tr>
<tr id="doMouseWheel">
<td class="name">
<div class="name">
doMouseWheel()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>The diagram will call this method as the mouse wheel is rotated.<span class="nodetails" id="xmethdoMouseWheel"><a class="morelink" onclick="hst('methdoMouseWheel')">More...</a></span> <span class="details" id="methdoMouseWheel">
Implementations of this method can look at <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a> to get the mouse
event and input state.
</span><div class="details" id="dmethdoMouseWheel"><p>
By default this method does nothing.
(But the <a href="../symbols/ToolManager.html#doMouseWheel" class="linkMethod">ToolManager.doMouseWheel</a> override will call <a href="../symbols/Tool.html#standardMouseWheel" class="linkMethod">Tool.standardMouseWheel</a>.)
This method may be overridden.
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>
</div>
</td>
</tr>
<tr id="doStart">
<td class="name">
<div class="name">
doStart()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>The Diagram calls this method when this tool becomes the current tool; you should not call this method.<span class="nodetails" id="xmethdoStart"><a class="morelink" onclick="hst('methdoStart')">More...</a></span> <span class="details" id="methdoStart">
Tool implementations should perform their per-use initialization here, such
as setting up internal data structures, or capturing the mouse.
Implementations of this method can look at <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a> to get the mouse
event and input state.
</span><div class="details" id="dmethdoStart"><p>
You should not call this method -- only the <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> property setter should call this method.
<p>
By default this method does nothing.
This method may be overridden.
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>
</div>
</td>
</tr>
<tr id="doStop">
<td class="name">
<div class="name">
doStop()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>The Diagram calls this method when this tool stops being the current tool; you should not call this method.<span class="nodetails" id="xmethdoStop"><a class="morelink" onclick="hst('methdoStop')">More...</a></span> <span class="details" id="methdoStop">
Tool implementations should perform their per-use cleanup here,
such as releasing mouse capture.
</span><div class="details" id="dmethdoStop"><p>
You should not call this method -- only the <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> property setter should call this method.
If you want to stop a tool unexpectedly, you should call <a href="../symbols/Tool.html#doCancel" class="linkMethod">doCancel</a>.
If your implementation of a tool wants to stop itself, you should call <a href="../symbols/Tool.html#stopTool" class="linkMethod">stopTool</a>.
<p>
By default this method does nothing.
This method may be overridden.
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>
</div>
</td>
</tr>
<tr id="doWaitAfter">
<td class="name">
<div class="name">
doWaitAfter(event)
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>This is called a certain delay after a call to <a href="../symbols/Tool.html#standardWaitAfter" class="linkMethod">standardWaitAfter</a> if there
has not been any call to <a href="../symbols/Tool.html#cancelWaitAfter" class="linkMethod">cancelWaitAfter</a>.<span class="nodetails" id="xmethdoWaitAfter"><a class="morelink" onclick="hst('methdoWaitAfter')">More...</a></span> <span class="details" id="methdoWaitAfter">
The <a href="../symbols/ToolManager.html" class="linkConstructor">ToolManager</a> overrides this method in order to implement support for mouse-hover behavior and tooltips.
</span><div class="details" id="dmethdoWaitAfter"><p>
By default this does nothing.
This method may be overridden.
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/InputEvent.html" class="linkConstructor">InputEvent</a>=}</span> <b>event</b>
</dt>
<dd>The event that caused <a href="../symbols/Tool.html#standardWaitAfter" class="linkMethod">standardWaitAfter</a>.</dd>
</dl>
</div>
</td>
</tr>
<tr id="findToolHandleAt">
<td class="name">
<div class="name">
findToolHandleAt(p, category)
</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>This convenience function finds the front-most <a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a>
that is at a given point and that is an element of an <a href="../symbols/Adornment.html" class="linkConstructor">Adornment</a>
that is of a given category.<span class="nodetails" id="xmethfindToolHandleAt"><a class="morelink" onclick="hst('methfindToolHandleAt')">More...</a></span> <span class="details" id="methfindToolHandleAt">
The tool handle must be an immediate element of the Adornment,
not a GraphObject that is nested within Panels within the Adornment.
</span><div class="details" id="dmethfindToolHandleAt"><p>
This method is very infrequently overridden.
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/Point.html" class="linkConstructor">Point</a>}</span> <b>p</b>
</dt>
<dd>a Point in document coordinates.</dd>
<dt>
<span class="light fixedFont">{string}</span> <b>category</b>
</dt>
<dd>the required <a href="../symbols/Part.html#category" class="linkProperty">Part.category</a> of the <a href="../symbols/Adornment.html" class="linkConstructor">Adornment</a>.</dd>
</dl>
<dl class="detailList">
<dt class="heading">Returns:</dt>
<dt><span class="light fixedFont">{<a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a>}</span> </dt>
</dl>
</div>
</td>
</tr>
<tr id="isBeyondDragSize">
<td class="name">
<div class="name">
isBeyondDragSize(first, last)
</div>
<div class="attributes">
<span class="light">{boolean}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Return true when the last mouse point is far enough away from the first mouse down point
to constitute a drag operation instead of just a potential click.<span class="nodetails" id="xmethisBeyondDragSize"><a class="morelink" onclick="hst('methisBeyondDragSize')">More...</a></span> <span class="details" id="methisBeyondDragSize">
</span><div class="details" id="dmethisBeyondDragSize"><p>
This uses the value of <a href="../symbols/ToolManager.html#dragSize" class="linkProperty">ToolManager.dragSize</a>.
On touch devices the value is automatically increased to accommodate the unavoidable movement of fingers.
<p>
This method may be overridden.
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/Point.html" class="linkConstructor">Point</a>=}</span> <b>first</b>
</dt>
<dd>Point in view coordinates, defaults to <a href="../symbols/Diagram.html#firstInput" class="linkProperty">Diagram.firstInput</a>'s <a href="../symbols/InputEvent.html#viewPoint" class="linkProperty">InputEvent.viewPoint</a>.</dd>
<dt>
<span class="light fixedFont">{<a href="../symbols/Point.html" class="linkConstructor">Point</a>=}</span> <b>last</b>
</dt>
<dd>Point in view coordinates, defaults to <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a>'s <a href="../symbols/InputEvent.html#viewPoint" class="linkProperty">InputEvent.viewPoint</a>.</dd>
</dl>
<dl class="detailList">
<dt class="heading">Returns:</dt>
<dt><span class="light fixedFont">{boolean}</span> </dt>
</dl>
</div>
</td>
</tr>
<tr id="standardMouseClick">
<td class="name">
<div class="name">
standardMouseClick(navig, pred)
</div>
<div class="attributes">
<span class="light">{boolean}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Implement the standard behavior for mouse clicks,
searching for and calling click handler functions on <a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a>s
or on <a href="../symbols/Diagram.html" class="linkConstructor">Diagram</a>,
and raising the corresponding <a href="../symbols/DiagramEvent.html" class="linkConstructor">DiagramEvent</a>.<span class="nodetails" id="xmethstandardMouseClick"><a class="morelink" onclick="hst('methstandardMouseClick')">More...</a></span> <span class="details" id="methstandardMouseClick">
</span><div class="details" id="dmethstandardMouseClick"><p>
A click on a <a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a> of the diagram will raise one of the following <a href="../symbols/DiagramEvent.html" class="linkConstructor">DiagramEvent</a>s:
"ObjectSingleClicked", "ObjectDoubleClicked", or "ObjectContextClicked".
This will also look at the corresponding click property:
<a href="../symbols/GraphObject.html#click" class="linkProperty">GraphObject.click</a>, <a href="../symbols/GraphObject.html#doubleClick" class="linkProperty">GraphObject.doubleClick</a>, or <a href="../symbols/GraphObject.html#contextClick" class="linkProperty">GraphObject.contextClick</a>.
If the value is a function, this will call it, passing the current <a href="../symbols/InputEvent.html" class="linkConstructor">InputEvent</a>
and the GraphObject.
If the value is null, it tries looking at the parent <a href="../symbols/GraphObject.html#panel" class="linkProperty">GraphObject.panel</a>,
and so on, walking up the visual tree until it finds the appropriate function to call.
After calling the click function, if the value of <a href="../symbols/InputEvent.html#handled" class="linkProperty">InputEvent.handled</a> is false,
this method will continue walking up the visual tree looking for more click functions
to call.
Once it has looked at the top-level object (a <a href="../symbols/Part.html" class="linkConstructor">Part</a>)
for a click function, this method stops.
<p>
A click in the background of the diagram will raise one of the following <a href="../symbols/DiagramEvent.html" class="linkConstructor">DiagramEvent</a>s:
"BackgroundSingleClicked", "BackgroundDoubleClicked", or "BackgroundContextClicked".
This will also look at the corresponding click property:
<a href="../symbols/Diagram.html#click" class="linkProperty">Diagram.click</a>, <a href="../symbols/Diagram.html#doubleClick" class="linkProperty">Diagram.doubleClick</a>, or <a href="../symbols/Diagram.html#contextClick" class="linkProperty">Diagram.contextClick</a>.
If the value is a function, this will call it, passing the current <a href="../symbols/InputEvent.html" class="linkConstructor">InputEvent</a>.
<p>
This method is not responsible for selecting or deselecting any parts.
Call <a href="../symbols/Tool.html#standardMouseSelect" class="linkMethod">standardMouseSelect</a> for that functionality.
<p>
Note that this calls <a href="../symbols/GraphObject.html#isEnabledObject" class="linkMethod">GraphObject.isEnabledObject</a> on the target object;
if it returns false, no click action will occur.
<p>
The <a href="../symbols/ClickSelectingTool.html" class="linkConstructor">ClickSelectingTool</a> calls this method in its override of <a href="../symbols/Tool.html#doMouseUp" class="linkMethod">doMouseUp</a> in order to raise "click" events.
Note that by default GraphObjects in Layers that are <a href="../symbols/Layer.html#isTemporary" class="linkProperty">Layer.isTemporary</a> will not be "clicked".
To change that behavior it is easiest to set <a href="../symbols/GraphObject.html#isActionable" class="linkProperty">GraphObject.isActionable</a> to true on those objects for which you wish to handle "click" events.
Then the <a href="../symbols/ActionTool.html" class="linkConstructor">ActionTool</a>'s <a href="../symbols/Tool.html#doMouseUp" class="linkMethod">doMouseUp</a> override will raise the standard "click" events.
<p>
This method may be overridden, but you should consider calling this base method in order to get all of its functionality.
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">{function(GraphObject):GraphObject | null=}</span> <b>navig</b>
</dt>
<dd>An optional custom navigation
function to find target objects.</dd>
<dt>
<span class="light fixedFont">{function(GraphObject):boolean | null=}</span> <b>pred</b>
</dt>
<dd>An optional custom predicate
function to find target objects. No value means that only objects in layers holding permanent objects.</dd>
</dl>
<dl class="detailList">
<dt class="heading">Returns:</dt>
<dt><span class="light fixedFont">{boolean}</span> true if <a href="../symbols/InputEvent.html#handled" class="linkProperty">InputEvent.handled</a> had been set to true on the <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a>.</dt>
</dl>
</div>
</td>
</tr>
<tr id="standardMouseOver">
<td class="name">
<div class="name">
standardMouseOver()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Implement the standard behavior for mouse enter, over, and leave events,
where the mouse is moving but no button is pressed.<span class="nodetails" id="xmethstandardMouseOver"><a class="morelink" onclick="hst('methstandardMouseOver')">More...</a></span> <span class="details" id="methstandardMouseOver">
This should be called by mouse move event handlers when wanting to
detect and invoke mouse enter/over/leave event handlers.
</span><div class="details" id="dmethstandardMouseOver"><p>
The <a href="../symbols/GraphObject.html#mouseEnter" class="linkProperty">GraphObject.mouseEnter</a> property provides a function to call
when the mouse first enters an object or any of its contained objects
(if the object is actually a <a href="../symbols/Panel.html" class="linkConstructor">Panel</a>).
<p>
The <a href="../symbols/GraphObject.html#mouseLeave" class="linkProperty">GraphObject.mouseLeave</a> property provides a function to call
when the mouse leaves an object and all of its contained objects
(if the object is actually a <a href="../symbols/Panel.html" class="linkConstructor">Panel</a>).
<p>
The <a href="../symbols/GraphObject.html#mouseOver" class="linkProperty">GraphObject.mouseOver</a> property and <a href="../symbols/Diagram.html#mouseOver" class="linkProperty">Diagram.mouseOver</a>
properties provide functions to call when the mouse moves but stays
within the same <a href="../symbols/GraphObject.html" class="linkConstructor">GraphObject</a> or when the mouse moves in the
background of the <a href="../symbols/Diagram.html" class="linkConstructor">Diagram</a>.
<p>
This method is also responsible for updating the <a href="../symbols/Diagram.html#currentCursor" class="linkProperty">Diagram.currentCursor</a>
according to the value of <a href="../symbols/GraphObject.html#cursor" class="linkProperty">GraphObject.cursor</a> and <a href="../symbols/Diagram.html#defaultCursor" class="linkProperty">Diagram.defaultCursor</a>.
<p>
This method may be overridden, but you should consider calling this base method in order to get all of its functionality.
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>
</div>
</td>
</tr>
<tr id="standardMouseSelect">
<td class="name">
<div class="name">
standardMouseSelect()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Implement the standard behavior for selecting parts with the mouse,
depending on the control and shift modifier keys.<span class="nodetails" id="xmethstandardMouseSelect"><a class="morelink" onclick="hst('methstandardMouseSelect')">More...</a></span> <span class="details" id="methstandardMouseSelect">
</span><div class="details" id="dmethstandardMouseSelect"><p>
Control-clicking on a part will select it if it wasn't already,
and will deselect if it had been selected.
Shift-clicking on a part will add it to the selection (if it wasn't already).
Otherwise, clicking on a part will select it (if it wasn't already).
<p>
Note that there are restrictions on selection.
For example, a part cannot be selected in this manner if <a href="../symbols/Part.html#selectable" class="linkProperty">Part.selectable</a> is false,
or if <a href="../symbols/Diagram.html#maxSelectionCount" class="linkProperty">Diagram.maxSelectionCount</a> would be exceeded.
<p>
A left click in the background of the diagram with no modifier keys clears the selection.
<p>
This method does not implement any click event behavior -- that is implemented by <a href="../symbols/Tool.html#standardMouseClick" class="linkMethod">standardMouseClick</a>.
<p>
The <a href="../symbols/ClickSelectingTool.html" class="linkConstructor">ClickSelectingTool</a> calls this method in its override of <a href="../symbols/Tool.html#doMouseUp" class="linkMethod">doMouseUp</a> in order to change the selection.
<p>
This method may be overridden, but you should consider calling this base method in order to get all of its functionality.
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>
</div>
</td>
</tr>
<tr id="standardMouseWheel">
<td class="name">
<div class="name">
standardMouseWheel()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Implement the standard behavior for mouse wheel events.<span class="nodetails" id="xmethstandardMouseWheel"><a class="morelink" onclick="hst('methstandardMouseWheel')">More...</a></span> <span class="details" id="methstandardMouseWheel">
<a href="../symbols/ToolManager.html#doMouseWheel" class="linkMethod">ToolManager.doMouseWheel</a> calls this method.
</span><div class="details" id="dmethstandardMouseWheel"><p>
Turning the mouse wheel if <a href="../symbols/Diagram.html#allowVerticalScroll" class="linkProperty">Diagram.allowVerticalScroll</a> is true
causes the diagram to scroll up or down.
If <a href="../symbols/InputEvent.html#shift" class="linkProperty">InputEvent.shift</a> and <a href="../symbols/Diagram.html#allowHorizontalScroll" class="linkProperty">Diagram.allowHorizontalScroll</a> are true,
the diagram scrolls left or right.
<p>
If <a href="../symbols/InputEvent.html#control" class="linkProperty">InputEvent.control</a> and <a href="../symbols/Diagram.html#allowZoom" class="linkProperty">Diagram.allowZoom</a> are true,
turning the mouse wheel changes the diagram's scale,
zooming in or out while trying to keep the point in the model
at the same point as the mouse.
<p>
The value of <a href="../symbols/ToolManager.html#mouseWheelBehavior" class="linkProperty">ToolManager.mouseWheelBehavior</a> affects what operations might occur
upon mouse wheel events.
<p>
This method may be overridden, but you should consider calling this base method in order to get all of its functionality.
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>
</div>
</td>
</tr>
<tr id="standardPinchZoomMove">
<td class="name">
<div class="name">
standardPinchZoomMove()
</div>
<div class="attributes">
<span class="since" title="since">1.5</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Continues pinch-zooming (started by <a href="../symbols/Tool.html#standardPinchZoomStart" class="linkMethod">standardPinchZoomStart</a> on multi-touch devices.<span class="nodetails" id="xmethstandardPinchZoomMove"><a class="morelink" onclick="hst('methstandardPinchZoomMove')">More...</a></span> <span class="details" id="methstandardPinchZoomMove">
</span><div class="details" id="dmethstandardPinchZoomMove"><p>
This is called by <a href="../symbols/ToolManager.html#doMouseMove" class="linkMethod">ToolManager.doMouseMove</a> if the <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a> has <a href="../symbols/InputEvent.html#isMultiTouch" class="linkProperty">InputEvent.isMultiTouch</a>
set to true and <a href="../symbols/Tool.html#canStartMultiTouch" class="linkMethod">canStartMultiTouch</a> returns true.
By default this calls <a href="../symbols/Tool.html#doCancel" class="linkMethod">doCancel</a> in order to cancel the regular tool behavior caused by the multitouch events.
This then calculates the appropriate zoom level and calls <a href="../symbols/CommandHandler.html#canResetZoom" class="linkMethod">CommandHandler.canResetZoom</a> to decide
whether to call <a href="../symbols/CommandHandler.html#resetZoom" class="linkMethod">CommandHandler.resetZoom</a> to actually set <a href="../symbols/Diagram.html#scale" class="linkProperty">Diagram.scale</a>.
This method may be overridden.
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>
</p><div class="seealso">See also:
<ul class="seealsolist">
<li><a href="../symbols/Tool.html#canStartMultiTouch" class="linkMethod">canStartMultiTouch</a></li>
<li><a href="../symbols/Tool.html#standardPinchZoomStart" class="linkMethod">standardPinchZoomStart</a></li>
</ul></div>
</div>
</td>
</tr>
<tr id="standardPinchZoomStart">
<td class="name">
<div class="name">
standardPinchZoomStart()
</div>
<div class="attributes">
<span class="since" title="since">1.5</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Initiates pinch-zooming on multi-touch devices.<span class="nodetails" id="xmethstandardPinchZoomStart"><a class="morelink" onclick="hst('methstandardPinchZoomStart')">More...</a></span> <span class="details" id="methstandardPinchZoomStart">
</span><div class="details" id="dmethstandardPinchZoomStart"><p>
This is called by <a href="../symbols/ToolManager.html#doMouseDown" class="linkMethod">ToolManager.doMouseDown</a> if the <a href="../symbols/Diagram.html#lastInput" class="linkProperty">Diagram.lastInput</a> has <a href="../symbols/InputEvent.html#isMultiTouch" class="linkProperty">InputEvent.isMultiTouch</a>
set to true and <a href="../symbols/Tool.html#canStartMultiTouch" class="linkMethod">canStartMultiTouch</a> returns true.
This method may be overridden.
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>
</p><div class="seealso">See also:
<ul class="seealsolist">
<li><a href="../symbols/Tool.html#canStartMultiTouch" class="linkMethod">canStartMultiTouch</a></li>
<li><a href="../symbols/Tool.html#standardPinchZoomMove" class="linkMethod">standardPinchZoomMove</a></li>
</ul></div>
</div>
</td>
</tr>
<tr id="standardWaitAfter">
<td class="name">
<div class="name">
standardWaitAfter(delay, event)
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>This is called to start a new timer to call <a href="../symbols/Tool.html#doWaitAfter" class="linkMethod">doWaitAfter</a> after a given delay.<span class="nodetails" id="xmethstandardWaitAfter"><a class="morelink" onclick="hst('methstandardWaitAfter')">More...</a></span> <span class="details" id="methstandardWaitAfter">
It first cancels any previously running "WaitAfter" timer, by calling <a href="../symbols/Tool.html#cancelWaitAfter" class="linkMethod">cancelWaitAfter</a>.
</span><div class="details" id="dmethstandardWaitAfter"><p>
This is normally used to implement mouse hover and mouse hold events.
If the mouse has moved, it must not have moved beyond the distance as determined by
<a href="../symbols/Tool.html#isBeyondDragSize" class="linkMethod">Tool.isBeyondDragSize</a> for it be considered "stationary".
So the regular <a href="../symbols/ToolManager.html#doMouseMove" class="linkMethod">ToolManager.doMouseMove</a> implementation only calls
this method when the mouse has moved beyond the drag size.
<p>
This method is rarely overridden.
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">{number}</span> <b>delay</b>
</dt>
<dd>The delay, in milliseconds.</dd>
<dt>
<span class="light fixedFont">{<a href="../symbols/InputEvent.html" class="linkConstructor">InputEvent</a>=}</span> <b>event</b>
</dt>
<dd>An optional event that caused this timer.
This gets passed on to <a href="../symbols/Tool.html#doWaitAfter" class="linkMethod">doWaitAfter</a>.</dd>
</dl>
</div>
</td>
</tr>
<tr id="startTransaction">
<td class="name">
<div class="name">
startTransaction(tname)
</div>
<div class="attributes">
<span class="light">{boolean}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>Call <a href="../symbols/Diagram.html#startTransaction" class="linkMethod">Diagram.startTransaction</a> with the given transaction name.<span class="nodetails" id="xmethstartTransaction"><a class="morelink" onclick="hst('methstartTransaction')">More...</a></span> <span class="details" id="methstartTransaction">
This always sets <a href="../symbols/Tool.html#transactionResult" class="linkProperty">transactionResult</a> to null.
</span><div class="details" id="dmethstartTransaction"><p>
This is normally called in an override of <a href="../symbols/Tool.html#doActivate" class="linkMethod">doActivate</a>, if the tool modifies the model,
along with a call to <a href="../symbols/Tool.html#stopTransaction" class="linkMethod">stopTransaction</a> in an override of <a href="../symbols/Tool.html#doDeactivate" class="linkMethod">doDeactivate</a>.
Alternatively, you can surround a block of code that sets the <a href="../symbols/Tool.html#transactionResult" class="linkProperty">transactionResult</a>
with calls to startTransaction and stopTransaction.</div>
<dl class="detailList">
<dt class="heading">Parameters:</dt>
<dt>
<span class="light fixedFont">{string=}</span> <b>tname</b>
</dt>
<dd>a string describing the transaction.</dd>
</dl>
<dl class="detailList">
<dt class="heading">Returns:</dt>
<dt><span class="light fixedFont">{boolean}</span> the value of the call to <a href="../symbols/Diagram.html#startTransaction" class="linkMethod">Diagram.startTransaction</a>.</dt>
</dl>
</div>
</td>
</tr>
<tr id="stopTool">
<td class="name">
<div class="name">
stopTool()
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>If the <a href="../symbols/Diagram.html#currentTool" class="linkProperty">Diagram.currentTool</a> is this tool,
stop this tool and start the <a href="../symbols/Diagram.html#defaultTool" class="linkProperty">Diagram.defaultTool</a>
by making it be the new current tool.<span class="nodetails" id="xmethstopTool"><a class="morelink" onclick="hst('methstopTool')">More...</a></span> <span class="details" id="methstopTool">
The implementation of various tool methods can call this method to stop the current tool.
This will call <a href="../symbols/Tool.html#doStop" class="linkMethod">doStop</a> -- you should not call that method directly.
</span><div class="details" id="dmethstopTool"><p>
If you want to stop the current tool and have it restore the original state, call <a href="../symbols/Tool.html#doCancel" class="linkMethod">doCancel</a>.
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>
</div>
</td>
</tr>
<tr id="stopTransaction">
<td class="name">
<div class="name">
stopTransaction()
</div>
<div class="attributes">
<span class="light">{boolean}</span>
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>If <a href="../symbols/Tool.html#transactionResult" class="linkProperty">transactionResult</a> is null, call <a href="../symbols/Diagram.html#rollbackTransaction" class="linkMethod">Diagram.rollbackTransaction</a>,
otherwise call <a href="../symbols/Diagram.html#commitTransaction" class="linkMethod">Diagram.commitTransaction</a>.<span class="nodetails" id="xmethstopTransaction"><a class="morelink" onclick="hst('methstopTransaction')">More...</a></span> <span class="details" id="methstopTransaction">
</span><div class="details" id="dmethstopTransaction"><p>
This is normally called in an override of <a href="../symbols/Tool.html#doDeactivate" class="linkMethod">doDeactivate</a>,
if <a href="../symbols/Tool.html#startTransaction" class="linkMethod">startTransaction</a> was called in <a href="../symbols/Tool.html#doActivate" class="linkMethod">doActivate</a>.
Alternatively, you can surround a block of code that sets the <a href="../symbols/Tool.html#transactionResult" class="linkProperty">transactionResult</a>
with calls to startTransaction and stopTransaction.</div>
<dl class="detailList">
<dt class="heading">Returns:</dt>
<dt><span class="light fixedFont">{boolean}</span> the result of the call to rollback or commit the transaction.</dt>
</dl>
</div>
</td>
</tr>
<tr id="updateAdornments">
<td class="name">
<div class="name">
updateAdornments(part)
</div>
<div class="attributes">
</div>
</td>
<td class="description">
<div class="description">
<!--newp--><p><p>The diagram asks each tool to update any adornments the tool might
use for a given part.<span class="nodetails" id="xmethupdateAdornments"><a class="morelink" onclick="hst('methupdateAdornments')">More...</a></span> <span class="details" id="methupdateAdornments">
If the tool uses its own tool handles,
this should display them or hide them as appropriate.
Typically this should only show them if the part is selected.
</span><div class="details" id="dmethupdateAdornments"><p>
By default this method does nothing.
This method may be overridden.
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/Part.html" class="linkConstructor">Part</a>}</span> <b>part</b>
</dt>
<dd></dd>
</dl>
</div>
</td>
</tr>
</tbody>
</table>
</div><!-- class="table-responsive">-->
<!-- ============================== events summary ======================== -->
<!-- ============================== fields summary ===================== -->
<!-- ============================== constructor details ==================== -->
</div> <!-- end contentBody -->
</div> <!-- end container-fluid -->
<!-- ============================== footer ================================= -->
<div id="footer" class="fineprint" style="clear:both">
Copyright &copy; 1998-2017 by <a href="https://www.nwoods.com/">Northwoods Software Corporation.</a>
</div>
</body>
</html>