;********************************************************************* PRO whichread_event, event ; @common ; if tag_names(event, /structure_name) NE 'WIDGET_BUTTON' then return widget_control, event.id, get_uvalue = uvalue widget_control, event.handler, get_uvalue = messenger case uvalue of 'Cancel':*messenger = -1 'ok finish':BEGIN widget_control, widget_info(event.handler, find_by_uname = 'funclec_name') $ , get_value = answer funclec_name = strtrim(answer[0], 2) widget_control, widget_info(event.handler, find_by_uname = 'xdta'), get_value = answer jpiglo = long(answer[0]) jpidta = long(answer[1]) ixmindta = long(answer[2]) ixmaxdta = long(answer[3]) widget_control, widget_info(event.handler, find_by_uname = 'ydta'), get_value = answer jpjglo = long(answer[0]) jpjdta = long(answer[1]) iymindta = long(answer[2]) iymaxdta = long(answer[3]) widget_control, widget_info(event.handler, find_by_uname = 'zdta'), get_value = answer jpkglo = long(answer[0]) jpkdta = long(answer[1]) izmindta = long(answer[2]) izmaxdta = long(answer[3]) ; ; *messenger = {funclec_name:funclec_name $ , jpidta:jpidta, jpjdta:jpjdta, jpkdta:jpkdta $ , ixmindta:ixmindta, ixmaxdta:ixmaxdta $ , iymindta:iymindta, iymaxdta:iymaxdta $ , izmindta:izmindta, izmaxdta:izmaxdta $ } END endcase widget_control,event.handler,/destroy ; return end ;********************************************************************* FUNCTION whichread, FUNCLEC_NAME = funclec_name, PARENT = parent, _EXTRA = ex ; @common ; ; pour recuperer les reponses possees lors de l''utilisation de ce ; widget on cree un pointeur que l''on place dans la uvalue. Comme ca ; une fois que le widget est detruit dans la procedure ...event.pro, ; la variable surlaquelle pointait le pointeur (contenue ds la uvalue ; du widget) n''est pas detruite est on peut recuperer le resultat! ; messenger = ptr_new(/allocate_heap) ; ; if keyword_set(parent) then BEGIN base=widget_base(parent, /COLUMN, title = 'whichread', /align_center, uvalue = messenger, _EXTRA = ex) ENDIF ELSE BEGIN base=widget_base(/COLUMN, title = 'whichread', /align_center, uvalue = messenger, _EXTRA = ex) nothing = widget_button(base, value = 'Cancel', uvalue = 'Cancel') ENDELSE ; basea=widget_base(base, /row, /align_center) nothing = widget_label(basea, value = 'Read Function name:') if NOT keyword_set(funclec_name) then funclec_name = 'read_ncdf' nothing = widget_text(basea, value = funclec_name, uname = 'funclec_name', xsize = 10, /EDITABLE) nothing = cw_fourparameter(base, jpiglo, jpidta, ixmindta, ixmaxdta, 'x', 'dta', /EDITABLE, uname = 'xdta') nothing = cw_fourparameter(base, jpjglo, jpjdta, iymindta, iymaxdta, 'y', 'dta', /EDITABLE, uname = 'ydta') nothing = cw_fourparameter(base, jpkglo, jpkdta, izmindta, izmaxdta, 'z', 'dta', /EDITABLE, uname = 'zdta') nothing = widget_button(base, value = 'Ok, Get the Read parameters!', uvalue = 'ok finish') ; widget_control,base,/realize xmanager,'whichread', base,event_handler = 'whichread_event' res = *messenger ptr_free, messenger return, res ; end