;********************************************************************* PRO selectfile_event, event ; @common ; widget_control, event.id, get_uvalue = eventuvalue IF chkstru(eventuvalue,'name') EQ 0 THEN return case eventuvalue.name of 'Global Cancel':BEGIN widget_control, event.handler, get_uvalue = messenger *messenger = -1 widget_control,event.handler,/destroy END 'datafilename':BEGIN widget_control, event.id, get_value = filename filename = isafile(filename = filename[0]) if size(filename, /type) NE 7 then return widget_control, event.id, set_value = filename END 'browse datafilename':BEGIN filename = isafile(iodir = iodir) if size(filename, /type) NE 7 then return widget_control, widget_info(event.handler, find_by_uname = 'datafilename') $ , set_value = filename END 'meshfilename':BEGIN widget_control, event.id, get_value = filename filename = isafile(filename = filename[0]) if size(filename, /type) NE 7 then return widget_control, event.id, set_value = filename END 'browse meshfilename':BEGIN filename = isafile(iodir = homedir) if size(filename, /type) NE 7 then return widget_control, widget_info(event.handler, find_by_uname = 'meshfilename') $ , set_value = filename END 'Lets Go!':BEGIN widget_control, widget_info(event.handler, find_by_uname = 'datafilename') $ , get_value = datafilename & datafilename = datafilename[0] widget_control, widget_info(event.handler, find_by_uname = 'meshfilename') $ , get_value = meshfilename & meshfilename = meshfilename[0] widget_control, event.handler, get_uvalue = messenger *messenger = create_struct('datafilename', datafilename, 'meshfilename', meshfilename) widget_control,event.handler,/destroy END endcase return end ;********************************************************************* FUNCTION selectfile ; @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) base=widget_base(/COLUMN, title = 'selectfile', /align_center, uvalue = messenger, _EXTRA = ex) ; nothing = widget_button(base, value = 'Cancel', uvalue = {name:'Global Cancel'}) ; basea=widget_base(base, /row, /align_center) nothing = widget_label(basea, value = 'Data file name: ') nothing = widget_text(basea, value = '', uvalue = {name:'datafilename'}, uname = 'datafilename', xsize = 45, /EDITABLE) nothing = widget_button(basea, value = 'Browse', uvalue = {name:'browse datafilename'}) ; baseb=widget_base(base, /row, /align_center) nothing = widget_label(baseb, value = 'Mesh file or IDL batch file: ') nothing = widget_text(baseb, value = '', uvalue = {name:'meshfilename'}, uname = 'meshfilename', xsize = 45, /EDITABLE) nothing = widget_button(baseb, value = 'Browse', uvalue = {name:'browse meshfilename'}) ; nothing = widget_button(base, value = 'Lets Go!', uvalue = {name:'Lets Go!'}) ;------------------------------------------------------------ widget_control,base,/realize xmanager,'selectfile', base,event_handler = 'selectfile_event', no_block = 0 ; ; res = *messenger ptr_free, messenger if size(res, /type) NE 8 then return, -1 ; res1 = whichgrid(res.meshfilename, iodir = iodir) if size(res1, /type) NE 8 then return, -1 res2 = whichread() if size(res2, /type) NE 8 then return, -1 res3 = scanfile(res.datafilename, iodir = iodir) if size(res3, /type) NE 8 then return, -1 return, {fileparameters:res3, readparameters:res2, meshparameters:res1} end