Viewing contents of file '../idllib/contrib/mallozzi/track_mouse_example.pro'
;
; Examples of TRACK_MOUSE usage.
; RSM, 1998 March.
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; This is the event handler
;
PRO TRACK_MOUSE_EVENT, EVENT
WIDGET_CONTROL, EVENT.TOP, GET_UVALUE = DRAW1, /NO_COPY
TYPE = TAG_NAMES(EVENT, /STRUCTURE)
CASE TYPE OF
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;
; The button widget events
;
'WIDGET_BUTTON': BEGIN
WIDGET_CONTROL, EVENT.ID, GET_VALUE = VALUE, GET_UVALUE = UVALUE
UVALUE = STRUPCASE(UVALUE)
CASE 1 OF
UVALUE EQ 'QUIT': BEGIN
WIDGET_CONTROL, EVENT.TOP, /DESTROY
RETURN
END
UVALUE EQ 'X': BEGIN
IF (TRACK_MOUSE(DRAW1, REGION, COORDINATES, /GET_XRANGE)) $
THEN BEGIN
PRINT, 'OK'
PRINT, ' REGION = ', REGION
PRINT, ' COORDS = ', COORDINATES[0], COORDINATES[1], $
COORDINATES[2], COORDINATES[3]
ENDIF ELSE BEGIN
PRINT, 'Aborted'
PRINT, ' REGION = ', REGION
HELP, COORDINATES
ENDELSE
END
UVALUE EQ 'Y': BEGIN
IF (TRACK_MOUSE(DRAW1, REGION, COORDINATES, /GET_YRANGE)) $
THEN BEGIN
PRINT, 'OK'
PRINT, ' REGION = ', REGION
PRINT, ' COORDS = ', COORDINATES[0], COORDINATES[1], $
COORDINATES[2], COORDINATES[3]
ENDIF ELSE BEGIN
PRINT, 'Aborted'
PRINT, ' REGION = ', REGION
HELP, COORDINATES
ENDELSE
END
UVALUE EQ 'BOX': BEGIN
IF (TRACK_MOUSE(DRAW1, REGION, COORDINATES)) $
THEN BEGIN
PRINT, 'OK'
PRINT, ' REGION = ', REGION
PRINT, ' COORDS = ', COORDINATES[0], COORDINATES[1], $
COORDINATES[2], COORDINATES[3]
ENDIF ELSE BEGIN
PRINT, 'Aborted'
PRINT, ' REGION = ', REGION
HELP, COORDINATES
ENDELSE
END
UVALUE EQ 'XNOWAIT': BEGIN
IF (TRACK_MOUSE(DRAW1, REGION, COORDINATES, $
/GET_XRANGE, /NOWAIT)) $
THEN BEGIN
PRINT, 'OK'
PRINT, ' REGION = ', REGION
PRINT, ' COORDS = ', COORDINATES[0], COORDINATES[1], $
COORDINATES[2], COORDINATES[3]
ENDIF ELSE BEGIN
PRINT, 'Aborted'
PRINT, ' REGION = ', REGION
HELP, COORDINATES
ENDELSE
END
UVALUE EQ 'YNOWAIT': BEGIN
IF (TRACK_MOUSE(DRAW1, REGION, COORDINATES, $
/GET_YRANGE, /NOWAIT)) $
THEN BEGIN
PRINT, 'OK'
PRINT, ' REGION = ', REGION
PRINT, ' COORDS = ', COORDINATES[0], COORDINATES[1], $
COORDINATES[2], COORDINATES[3]
ENDIF ELSE BEGIN
PRINT, 'Aborted'
PRINT, ' REGION = ', REGION
HELP, COORDINATES
ENDELSE
END
UVALUE EQ 'BOXNOWAIT': BEGIN
IF (TRACK_MOUSE(DRAW1, REGION, COORDINATES, /NOWAIT)) $
THEN BEGIN
PRINT, 'OK'
PRINT, ' REGION = ', REGION
PRINT, ' COORDS = ', COORDINATES[0], COORDINATES[1], $
COORDINATES[2], COORDINATES[3]
ENDIF ELSE BEGIN
PRINT, 'Aborted'
PRINT, ' REGION = ', REGION
HELP, COORDINATES
ENDELSE
END
UVALUE EQ 'XTOLERANCE': BEGIN
IF (TRACK_MOUSE(DRAW1, REGION, COORDINATES, XTOL = 0.04)) $
THEN BEGIN
PRINT, 'OK'
PRINT, ' REGION = ', REGION
PRINT, ' COORDS = ', COORDINATES[0], COORDINATES[1], $
COORDINATES[2], COORDINATES[3]
ENDIF ELSE BEGIN
PRINT, 'Aborted'
PRINT, ' REGION = ', REGION
HELP, COORDINATES
ENDELSE
END
UVALUE EQ 'YTOLERANCE': BEGIN
IF (TRACK_MOUSE(DRAW1, REGION, COORDINATES, YTOL = 0.04)) $
THEN BEGIN
PRINT, 'OK'
PRINT, ' REGION = ', REGION
PRINT, ' COORDS = ', COORDINATES[0], COORDINATES[1], $
COORDINATES[2], COORDINATES[3]
ENDIF ELSE BEGIN
PRINT, 'Aborted'
PRINT, ' REGION = ', REGION
HELP, COORDINATES
ENDELSE
END
; Multiple selections
;
UVALUE EQ 'XMULTI': BEGIN
doExit = 0
numSel = 0
xSelStart = -1
xSelStop = -1
REPEAT BEGIN
IF (TRACK_MOUSE(DRAW1, REGION, COORDINATES, $
/GET_XRANGE, /NOWAIT)) $
THEN BEGIN
OPLOT, [1, 1] * COORDINATES[0], !Y.CRANGE
OPLOT, [1, 1] * COORDINATES[2], !Y.CRANGE
xSelStart = [xSelStart, COORDINATES[0]]
xSelStop = [xSelStop, COORDINATES[2]]
numSel = numSel + 1
ENDIF ELSE BEGIN
doExit = 1
ENDELSE
ENDREP UNTIL (doExit EQ 1)
PRINT, 'Number of selections: ', numSel
IF (N_ELEMENTS(xSelStart) NE 1) THEN BEGIN
xSelStart = xSelStart[1:*]
xSelStop = xSelStop[1:*]
FOR i=0, numSel-1 DO BEGIN
OPLOT, [1, 1] * xSelStart[i], !Y.CRANGE, $
COLOR =!P.BACKGROUND
OPLOT, [1, 1] * xSelStop[i], !Y.CRANGE, $
COLOR =!P.BACKGROUND
PRINT, ' [', STRTRIM(xSelStart[i], 2), ', ', $
STRTRIM(xSelStop[i], 2), ']'
ENDFOR
ENDIF
END
ELSE: PRINT, 'ERROR in UVALUE!'
ENDCASE ; UVALUE
END
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; The draw widget events
;
'WIDGET_DRAW': BEGIN
;
; YOU MUST HANDLE WIDGET_DRAW EVENTS WHEN USING TRACK_MOUSE !
;
END
ENDCASE ; TYPE
WIDGET_CONTROL, EVENT.TOP, SET_UVALUE = DRAW1, /NO_COPY
END
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PRO TRACK_MOUSE_EXAMPLE
; Parent
TOP_BASE = WIDGET_BASE(TITLE = ' ', /COLUMN)
; Base for the rest of the menu
SUB_TOP_BASE = WIDGET_BASE(TOP_BASE, /ROW)
BASE1 = WIDGET_BASE(SUB_TOP_BASE, /COLUMN, /FRAME)
SUB_BASE0 = WIDGET_BASE(BASE1, /COLUMN)
w = WIDGET_BUTTON(SUB_BASE0, VALUE = 'QUIT', UVALUE = 'QUIT')
w = WIDGET_LABEL(SUB_BASE0, VALUE = ' ')
w = WIDGET_BUTTON(SUB_BASE0, VALUE = 'Track X-Range', UVALUE = 'x')
w = WIDGET_BUTTON(SUB_BASE0, VALUE = 'Track Y-Range', UVALUE = 'y')
w = WIDGET_BUTTON(SUB_BASE0, VALUE = 'Track Box', UVALUE = 'box')
w = WIDGET_LABEL(SUB_BASE0, VALUE = ' ')
w = WIDGET_LABEL(SUB_BASE0, VALUE = 'Tolerance')
w = WIDGET_BUTTON(SUB_BASE0, VALUE = 'X Tolerance', UVALUE = 'xtolerance')
w = WIDGET_BUTTON(SUB_BASE0, VALUE = 'Y Tolerance', UVALUE = 'ytolerance')
w = WIDGET_LABEL(SUB_BASE0, VALUE = ' ')
w = WIDGET_LABEL(SUB_BASE0, VALUE = 'No Wait')
w = WIDGET_BUTTON(SUB_BASE0, VALUE = 'Track X-Range', UVALUE = 'xnowait')
w = WIDGET_BUTTON(SUB_BASE0, VALUE = 'Track Y-Range', UVALUE = 'ynowait')
w = WIDGET_BUTTON(SUB_BASE0, VALUE = 'Track Box', UVALUE = 'boxnowait')
w = WIDGET_LABEL(SUB_BASE0, VALUE = ' ')
w = WIDGET_LABEL(SUB_BASE0, VALUE = 'Multi-Select')
w = WIDGET_BUTTON(SUB_BASE0, VALUE = 'X-Range', UVALUE = 'xmulti')
CURRENT_SCREEN = GET_SCREEN_SIZE()
DRAW_SUB_BASE = WIDGET_BASE(SUB_TOP_BASE, /COLUMN, /FRAME)
w = WIDGET_LABEL(DRAW_SUB_BASE, VALUE = 'TRACK_MOUSE Demo')
; Note: If we don't add BUTTON and MOTION events to the draw widget, they
; will be enabled by TRACK_MOUSE
DRAW1 = WIDGET_DRAW(DRAW_SUB_BASE, $
XSIZE = CURRENT_SCREEN(0)*0.65, $
YSIZE = CURRENT_SCREEN(1)*0.60, /FRAME)
WIDGET_CONTROL, GET_VALUE = WINDOW, DRAW1
WIDGET_CONTROL, TOP_BASE, SET_UVALUE = DRAW1, /NO_COPY
WIDGET_CONTROL, TOP_BASE, /REALIZE, SHOW = 1
WSET, WINDOW
PLOT, /XLOG, FINDGEN(100)+1, FINDGEN(100)
; Register with XMANAGER
XMANAGER, 'TRACK_MOUSE', TOP_BASE
END