# Class TimeNavigator

java.lang.Object
uk.ac.starlink.ttools.plot2.geom.TimeNavigator

All Implemented Interfaces:
  `Navigator<TimeAspect>`

public class TimeNavigator extends Object implements Navigator<TimeAspect>
Navigator for use with time plot.

Since:
  4 Oct 2013
Author:
  Mark Taylor

## Field Summary

Fields
Modifier and Type
Field
Description
`static final ConfigKey<boolean[]>`
`NAVAXES_KEY`
Config key to select which axes zoom will operate on.

## Constructor Summary

Constructors
Constructor
Description
`TimeNavigator(double zoomFactor, boolean tZoom, boolean yZoom, boolean tPan, boolean yPan)`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`NavAction<TimeAspect>`
`click(Surface surface, Point pos, int ibutt, Supplier<CoordSequence> dposSupplier)`
Mouse click gesture.
`static TimeNavigator`
`createNavigator(ConfigMap config)`
Creates a navigator instance from a config map.
`NavAction<TimeAspect>`
`drag(Surface surface, Point point, int ibutt, Point origin)`
Drag gesture.
`NavAction<TimeAspect>`
`endDrag(Surface surface, Point pos, int ibutt, Point origin)`
Terminating drag gesture.
`static ConfigKey<?>[]`
`getConfigKeys()`
Returns the config keys for use with this navigator.
`static Map<Gesture,String>`
`getNavOptions(boolean tUse, boolean yUse)`
Returns a description of available navigator options for a time plot, given X/Y zoom flags.
`Map<Gesture,String>`
`getNavOptions(Surface surface, Point pos)`
Returns a description of the available navigation gestures and the behaviour they cause when the mouse is positioned at a particular point.
`NavAction<TimeAspect>`
`wheel(Surface surface, Point pos, int wheelrot)`
Mouse wheel gesture.

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### NAVAXES_KEY

public static final ConfigKey<boolean[]> NAVAXES_KEY
Config key to select which axes zoom will operate on.

## Constructor Details

### TimeNavigator

public TimeNavigator(double zoomFactor, boolean tZoom, boolean yZoom, boolean tPan, boolean yPan)
Constructor.

Parameters:
  `zoomFactor` - amount of zoom for one mouse wheel click
  `tZoom` - true iff wheel operation will zoom in horizontal direction
  `yZoom` - true iff wheel operation will zoom in vertical direction
  `tPan` - true iff drag operation will pan in horizontal direction
  `yPan` - true iff drag operation will pan in vertical direction

## Method Details

### drag

public NavAction<TimeAspect> drag(Surface surface, Point point, int ibutt, Point origin)
Description copied from interface: `Navigator`
Drag gesture.

Drag gestures typically indicate panning, and in this case should preferably have the outcome that the same data position remains under the cursor before and after the pan (from `origin` to `evt.getPoint()`).

Specified by:
  `drag` in interface `Navigator<TimeAspect>`
Parameters:
  `surface` - initial plot surface
  `point` - current mouse position
  `ibutt` - logical mouse button index of drag
  `origin` - starting point of the drag gesture
Returns:
  navigation action indicated by the gesture, or null for no change

### endDrag

public NavAction<TimeAspect> endDrag(Surface surface, Point pos, int ibutt, Point origin)
Description copied from interface: `Navigator`
Terminating drag gesture. This method is invoked following a sequence of drags when the mouse button has been released.

Specified by:
  `endDrag` in interface `Navigator<TimeAspect>`
Parameters:
  `surface` - initial plot surface
  `pos` - current mouse position
  `ibutt` - logical mouse button index of terminated drag
  `origin` - starting point of drag gesture
Returns:
  navigation action indicated by the gesture, or null for no change

### wheel

public NavAction<TimeAspect> wheel(Surface surface, Point pos, int wheelrot)
Description copied from interface: `Navigator`
Mouse wheel gesture.

Wheel gestures usually indicate zooming, and in this case should preferably have the outcome that the same data position remains at the mouse position before and after the zoom.

Specified by:
  `wheel` in interface `Navigator<TimeAspect>`
Parameters:
  `surface` - initial plot surface
  `pos` - current mouse position
  `wheelrot` - number of wheel rotation clicks
Returns:
  navigation action indicated by the gesture, or null for no change

### click

public NavAction<TimeAspect> click(Surface surface, Point pos, int ibutt, Supplier<CoordSequence> dposSupplier)
Description copied from interface: `Navigator`
Mouse click gesture.

Note that other elements of the plotting system may intercept some mouse clicks for other purposes, so the navigator may not receive all clicks. For instance the topcat plot window currently intercepts button-1 clicks and interprets them as row selection requests. Typically this navigator method may only get invoked for modified or non-button-1 clicks.

Implementation of this gesture may require identifying a data position from a screen position, which is not always trivial, for instance in a 3D plot one graphics position maps to a line of data positions. The `dposIt` argument can optionally be supplied to cope with such instances. If a data pos cannot be determined, null is returned. If `dposIt` is absent, the method will run quickly. If it's present, the method may or may not run slowly by iterating over the data points.

Specified by:
  `click` in interface `Navigator<TimeAspect>`
Parameters:
  `surface` - initial plot surface
  `pos` - current mouse position
  `ibutt` - logical mouse button index
  `dposSupplier` - iterable over dataDimCount-element arrays representing all the data space positions plotted, or null
Returns:
  navigation action indicated by the gesture, or null for no change

### getNavOptions

public Map<Gesture,String> getNavOptions(Surface surface, Point pos)
Description copied from interface: `Navigator`
Returns a description of the available navigation gestures and the behaviour they cause when the mouse is positioned at a particular point. The order of the returned list may be reflected in their presentation to users, so it is generally a good idea to use a LinkedHashMap.

Specified by:
  `getNavOptions` in interface `Navigator<TimeAspect>`
Parameters:
  `surface` - plot surface
  `pos` - mouse position
Returns:
  mapping of available gestures to short textual descriptions of their behaviour

### getNavOptions

public static Map<Gesture,String> getNavOptions(boolean tUse, boolean yUse)
Returns a description of available navigator options for a time plot, given X/Y zoom flags.

Parameters:
  `tUse` - true iff X zoom is in effect
  `yUse` - true iff Y zoom is in effect
Returns:
  mapping of gestures to navigation action descriptions

### getConfigKeys

public static ConfigKey<?>[] getConfigKeys()
Returns the config keys for use with this navigator.

Returns:
  config keys

### createNavigator

public static TimeNavigator createNavigator(ConfigMap config)
Creates a navigator instance from a config map. The keys defined by `getConfigKeys()` are used.

Parameters:
  `config` - configuration map
Returns:
  navigator