# Class: Tool

## Core.Tools. Tool

Represents the base class for DocumentViewer UI tools.

#### new Tool(docViewer)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `docViewer` | Core.DocumentViewer | An instance of DocumentViewer.

  ##### Properties:

  Name | Type | Argument | Description
  --- | --- | --- | ---
  `docViewer` | Core.DocumentViewer |  | the reference to the current DocumentViewer instance
  `pageCoordinates` | Array.<Core.Tools.PageCoordinate> |  | an array of page coordinates this tool currently holds. The default is index 0 for the mouse left down and index 1 for mouse left up.
  `name` | string | <optional> | The name of the tool
  `cursor` | string |  | The name of the default mouse cursor used when the tool is active

### Extends

- Core.EventHandler

### Members

#### <static> ALLOW_ANNOTS_OUTSIDE_PAGE

  A boolean indicating whether annotations can be dragged outside of the page boundaries. Default is false.

  ##### Type:

  - boolean

#### <static> ENABLE_ANNOTATION_HOVER_CURSORS

  A boolean indicating whether the cursor should change when hovering over annotations. Default is true.

  ##### Type:

  - boolean

#### <static> ENABLE_AUTO_SWITCH

  A boolean indicating whether the text select tool should automatically switch if the cursor is hovering over text or not

  ##### Type:

  - boolean

#### <static> ENABLE_TEXT_SELECTION

  A boolean indicating whether text selection is enabled

  ##### Type:

  - boolean

### Methods

#### <static> allowAnnotationsOutsidePage()

  Annotations will be allowed to be dragged outside of the page boundaries.

#### <static> disableAnnotationHoverCursors()

  The cursor will not change when hovering over annotations.

#### <static> disableAutoSwitch()

  The text select tool will not automatically switch if the cursor is hovering over text.

#### <static> disableTextSelection()

  Disable text selection.

#### <static> disallowAnnotationsOutsidePage()

  Annotations will not be allowed to be dragged outside of the page boundaries.

#### <static> enableAnnotationHoverCursors()

  The cursor will change when hovering over annotations.

#### <static> enableAutoSwitch()

  The text select tool will automatically switch if the cursor is hovering over text.

#### <static> enableTextSelection()

  Enable text selection.

#### addEventListener(type, fn [, options])

  Add a handler to the given event name

  ##### Parameters:

  Name | Type | Argument | Description
  --- | --- | --- | ---
  `type` | string | number |  | The name of the event to listen to
  `fn` | function |  | The handler to be called when the event is triggered
  `options` | object | <optional> | Optional options object for addEventListener ###### Properties
  Name | Type | Description
  --- | --- | ---
  `once` | boolean | If true then the handler will be called only once

  Inherited From:
    - Core.EventHandler#addEventListener

  ##### Returns:

  Returns the object that 'addEventListener' is being called on
  Type
    object

  ##### Example

      myObject.addEventListener('eventName', (eventParameter1, eventParameter2) => {
        ...
      });

#### contextMenu(e)

  The function is called when a context menu should be shown. Use e.preventDefault to disable the default browser context menu.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `e` |  | The event object

#### getDocumentViewer()

  Returns the instance of DocumentViewer for this tool.

  ##### Returns:

  The instance of DocumentViewer for this tool.
  Type
    Core.DocumentViewer

#### getMouseLocation(e)

  Takes an event object from a mouse event and converts the location into window coordinates

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `e` |  | The event object containing mouse coordinates

  ##### Returns:

  Returns an object with x and y coordinates of the mouse cursor in the viewer
  Type
    Core.Math.Point

#### keyDown(e)

  The function is called when a keyboard key is down.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `e` |  | The event object containing keyboard key data.

#### mouseDoubleClick(e)

  The function is called when the mouse left button is double clicked.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `e` |  | The event object containing mouse coordinates.

#### mouseLeftDown(e)

  The function called when the left mouse button is down

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `e` |  | The event object containing mouse coordinates.

#### mouseLeftUp(e)

  The function called when the left mouse button is up. Typically, annotations are created and added to the annotation manager at this point.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `e` |  | The event object containing mouse coordinates.

#### mouseMove(e)

  The function called when the mouse moves.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `e` |  | The event object containing mouse coordinates.

#### mouseRightDown(e)

  The function called when the right mouse button is down.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `e` |  | The event object containing mouse coordinates.

#### off( [type] [, fn])

  Remove a handler of the given event name

  ##### Parameters:

  Name | Type | Argument | Description
  --- | --- | --- | ---
  `type` | string | number | <optional> | The name of the event to remove the handler of. If type is undefined, all the handlers of the object will be removed
  `fn` | function | <optional> | The handler associated with this event to be removed. If fn is undefined, all the handlers of the given event name will be removed

  Inherited From:
    - Core.EventHandler#off
  Deprecated:
    - Since version 8.0. Use removeEventListener instead.

  ##### Returns:

  Returns the object that 'off' is being called on
  Type
    object

  ##### Example

      myObject.off();
      myObject.off('eventName');
      myObject.off('eventName', fn);

#### on(type, fn)

  Add a handler to the given event name

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `type` | string | number | The name of the event to listen to
  `fn` | function | The handler to be called when the event is triggered

  Inherited From:
    - Core.EventHandler#on
  Deprecated:
    - Since version 8.0. Use addEventListener instead.

  ##### Returns:

  Returns the object that 'on' is being called on
  Type
    object

  ##### Example

      myObject.on('eventName', (eventParameter1, eventParameter2) => {
        ...
      });

#### one(type, fn)

  Same as 'on' except the handler will be called only once

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `type` | string | number | The name of the event to listen to
  `fn` | function | The handler to be called when the event is triggered

  Inherited From:
    - Core.EventHandler#one
  Deprecated:
    - Since version 8.0. Use addEventListener with {'once': true} as options instead.

  ##### Returns:

  Returns the object that 'one' is being called on
  Type
    object

  ##### Example

      myObject.one('eventName', (eventParameter1, eventParameter2) => {
       ...
      });

#### removeEventListener( [type] [, fn])

  Remove a handler of the given event name

  ##### Parameters:

  Name | Type | Argument | Description
  --- | --- | --- | ---
  `type` | string | number | <optional> | The name of the event to remove the handler of. If type is undefined, all the handlers of the object will be removed
  `fn` | function | <optional> | The handler associated with this event to be removed. If fn is undefined, all the handlers of the given event name will be removed

  Inherited From:
    - Core.EventHandler#removeEventListener
  Deprecated:
    - for version 9.0. Use [removeEventListener] with fn specified

  ##### Returns:

  Returns the object that 'removeEventListener' is being called on
  Type
    object

  ##### Example

      myObject.removeEventListener();
      myObject.removeEventListener('eventName');
      myObject.removeEventListener('eventName', fn);

#### setName(name)

  Set the name of the tool, which can be accessed by toolObject.name

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `name` | string | Name of the tool

#### setStyles(newStyles)

  Set the style for the tool, which will be applied to annotations drawn afterwards

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `newStyles` | object | function | if an object is used, it should contain properties of the new styles. If a function is used, the current styles will be passed as its argument and the function should return an object which contains properties of the new styles. Example of valid properties: StrokeColor, TextColor, FillColor, FontSize, Opacity, StrokeThickness, Precision, Scale, OverlayText, Style and Dashes.

#### switchIn(oldTool)

  The function is called when this tool is selected. Typically use for changing mouse cursors, and initializing states for the tool.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `oldTool` | Core.Tools.Tool | The Tool class that was previously selected.

#### switchOut(newTool)

  The function is called when this tool is deselected. Typically use for changing mouse cursors, and cleaning up states for the tool.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `newTool` | Core.Tools.Tool | The Tool class that was newly selected.

#### trigger(type [, data])

  Calls the handlers of the event name with given data

  ##### Parameters:

  Name | Type | Argument | Description
  --- | --- | --- | ---
  `type` | string | number |  | event name of which the handlers will be called.
  `data` | * | <optional> | data that will be passed to the handlers. If data is an array, it will be spread and then passed to the handlers

  Inherited From:
    - Core.EventHandler#trigger

  ##### Returns:

  Returns the object that 'trigger' is being called on
  Type
    object

  ##### Example

      myObject.trigger('eventName');
      myObject.trigger('eventName', [eventParameter1, eventParameter2]);

#### Search results