;+ ; NAME: ; qinput ; PURPOSE: (one line) ; Prompt user for input from a widget. ; DESCRIPTION: ; ; CATEGORY: ; Widgets ; CALLING SEQUENCE: ; result = qinput( [keywords] ) ; INPUTS: ; ; OPTIONAL INPUT PARAMETERS: ; ; KEYWORD PARAMETERS: ; PROMPT = Character string to be displayed as a prompt. ; FLOATING = Set this keyword to accept a floating-point value. ; INTEGER = Set this keyword to accept an integer value. ; LONG = Set this keyword to accept a longword integer value. ; STRING = Set this keyword to accept a string value. ; TITLE = Title for the widget. ; OUTPUTS: ; result = the returned value. ; COMMON BLOCKS: ; ; SIDE EFFECTS: ; Suspends other widget event generation. A user response is required. ; RESTRICTIONS: ; ; PROCEDURE: ; ; MODIFICATION HISTORY: ; Written by Doug Loucks, Lowell Observatory, July 27, 1994. ;- ; ------------------------------------------------------------------------------ ; Procedure qinput_eve ; Event handler. ; ------------------------------------------------------------------------------ PRO qinput_eve, event WIDGET_CONTROL, event.id, /HOURGLASS stash = WIDGET_INFO( event.handler, /CHILD ) WIDGET_CONTROL, stash, GET_UVALUE=state, /NO_COPY CASE event.id OF state.entryid : BEGIN WIDGET_CONTROL, state.holdid, SET_UVALUE=event.value END ENDCASE WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY WIDGET_CONTROL, event.top, /DESTROY END ; ------------------------------------------------------------------------------ ; Function qinput ; ------------------------------------------------------------------------------ FUNCTION qinput, PROMPT=prompt, FLOATING=floating, INTEGER=integer, $ LONG=long, STRING=string, TITLE=title IF NOT KEYWORD_SET( prompt ) THEN prompt='Input field:' IF NOT KEYWORD_SET( floating ) THEN type='f' IF NOT KEYWORD_SET( integer ) THEN type='i' IF NOT KEYWORD_SET( long ) THEN type='l' IF NOT KEYWORD_SET( string ) THEN type='s' IF NOT KEYWORD_SET( title ) THEN title='Input Request:' mainbase = WIDGET_BASE( TITLE=title, /COLUMN ) holdid = WIDGET_BASE(UVALUE=0) CASE type OF 'f' : BEGIN entryid = cw_field( mainbase, TITLE=prompt, /FLOATING, /RETURN_EVENTS ) END 'i' : BEGIN entryid = cw_field( mainbase, TITLE=prompt, /INTEGER, /RETURN_EVENTS ) END 'l' : BEGIN entryid = cw_field( mainbase, TITLE=prompt, /LONG, /RETURN_EVENTS ) END 's' : BEGIN entryid = cw_field( mainbase, TITLE=prompt, /STRING, /RETURN_EVENTS ) END ELSE : BEGIN ;Skipit END ENDCASE state = {entryid:entryid, holdid:holdid} WIDGET_CONTROL, mainbase, /REALIZE stash = WIDGET_INFO( mainbase, /CHILD ) WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY ; The MODAL keyword to XMANAGER turns all events off. XMANAGER, 'qinput', mainbase, EVENT_HANDLER='qinput_eve', $ /MODAL WIDGET_CONTROL, holdid, GET_UVALUE=rvalue WIDGET_CONTROL, holdid, /DESTROY RETURN, rvalue END