Mouse Event Handlers

This topic describes how to write custom functions to handle mouse events in an ENVIView. See the Example below.

Syntax

The syntax of the various event handler functions are similar:

Handler Type

Syntax

Mouse Down

Result = FunctionName(View, X, Y, Button, KeyMods, Clicks)

Mouse Motion

Result = FunctionName(View, X, Y, KeyMods)

Mouse Up

Result = FunctionName(View, X, Y, Button)

Mouse Wheel

Result = FunctionName(View, X, Y, Delta, KeyMods)

Arguments

View

A reference to an ENVIView object in which the mouse event occurred.

X

The x-coordinate location of the mouse cursor (in device coordinates) at the time of the event.

Y

The y-coordinate location of the mouse cursor (in device coordinates) at the time of the event.

Button

The value of the clicked mouse button. Possible values are:

Delta

A value indicating the direction and number of movements of the mouse wheel. Pushing the wheel forward generates positive values, while pulling it backward generates negative values. The magnitude of the value depends on the device setting for the individual mouse, but it is usually limited to small integer values such as +1, -1, +2, -2, etc.

KeyMods

A bitwise mask value indicating which modifier keys are active at the time the mouse event happens:

Clicks

A value indicating how many button clicks occurred:

Example

The following example prints different sets of coordinates to the IDL console when you click the mouse button on any location of a georeferenced image. Copy the following code and save it to a file named ExampleMouseDown.pro.

PRO ExampleMouseDown

COMPILE_OPT IDL2

 

  ; Start the application

  e = ENVI()

 

  ; Select an input file and display it

  file = FILEPATH('qb_boulder_msi', ROOT_DIR=e.ROOT_DIR, $

    SUBDIR = ['data'])

  raster = e.OpenRaster(file)

  view = e.GetView()

  layer = view.CreateLayer(raster, BANDS = [2,1,0])

 

  ; Set the mouse event handler

  view.SetProperty, MOUSE_DOWN_HANDLER='ExampleMouseDownHandler'

END

 

FUNCTION ExampleMouseDownHandler, oView, $

  x, y, iButton, KeyMods, nClicks

 

  ; Convert from IDL window coordinates to view (file) coordinates

  oView.ConvertWindowToFile, x, y, xFile, yFile

 

  ; Use HitTest to determine the closest item to the location

  ; of the mouse event

  Result = oView.HitTest(xFile, yFile, DIMENSIONS=[10,10])

  PRINT, Result

 

  ; Get the spatial reference from the view

  SpatialRefView = oView.SpatialRef

 

  ; If the view does not contain a spatial reference, then return

  IF ~ISA(SpatialRefView) THEN BEGIN

  ENDIF

 

  ; Retrieve different sets of coordinates from the image

  SpatialRefView.ConvertFileToMap, xFile, yFile, coordsMapX, coordsMapY

  PRINT

  PRINT, 'Map coordinates:', coordsMapX, coordsMapY, FORMAT='(A, 2X, f14.4, 2X, f14.4)'

 

  SpatialRefView.ConvertMapToFile, coordsMapX, coordsMapY, coordsFileX, coordsFileY

  PRINT, 'File coordinates:', coordsFileX, coordsFileY, FORMAT='(A, 2X, f14.4, 2X, f14.4)'

 

  SpatialRefView.ConvertMapToLonLat, coordsMapX, coordsMapY, coordsLon, coordsLat

  PRINT, 'Lat/Lon coordinates:', coordsLat, coordsLon, FORMAT='(A, 2X, f14.4, 2X, f14.4)'

 

  SpatialRefView.ConvertLonLatToMGRS, coordsLon, coordsLat, mgrsString

  PRINT, 'MGRS coordinates:', mgrsString, FORMAT='(A, 2X, A)'

  PRINT

  RETURN, 1 ; Perform default event handling

END