PRO changefile, base, newfilename, BOITE = boite, DATE1 = date1, DATE2 = date2, FIELDNAME = fieldname widget_control, base, /hourglass widget_control, base, get_uvalue = top_uvalue filelist = extractatt(top_uvalue, 'filelist') newfile = (where(filelist EQ newfilename))[0] if newfile EQ -1 then begin nothing, report('invalid filename') return endif listid = widget_info(base, find_by_uname = 'filelist') widget_control, listid, set_list_select = newfile oldfile = extractatt(top_uvalue, 'currentfile') oldfilename = filelist[oldfile] ; a-t-on reelement change de fichier? if oldfile EQ newfile AND NOT (keyword_set(BOITE) OR keyword_set(DATE1) OR keyword_set(DATE2) OR keyword_set(FIELDNAME)) then return ;-------------- widget_control, base, update = 0 ;-------------- ; ; on update l''element currentfile de la top_uvalue ; *top_uvalue[1, findline(top_uvalue, 'currentfile')] = newfile ; on s''occupe du nom de la variable oldlistvar = (*(extractatt(top_uvalue, 'fileparameters'))[oldfile]).listvar newlistvar = (*(extractatt(top_uvalue, 'fileparameters'))[newfile]).listvar ; champid = widget_info(base, find_by_uname = 'champ') oldindexvar = widget_info(champid,/droplist_select) oldfieldname = oldlistvar[oldindexvar] ; a-t-on change de liste de variables ? if n_elements(oldlistvar) NE n_elements(newlistvar) $ OR total(oldlistvar NE newlistvar) NE 0 THEN $ widget_control, champid, set_value = newlistvar ; if keyword_set(fieldname) then newfieldname = fieldname ELSE newfieldname = oldfieldname indexvar = where(newlistvar EQ newfieldname) & indexvar = 0 > indexvar[0] if oldindexvar NE indexvar then widget_control, champid, set_droplist_select = indexvar newfieldname = newlistvar[indexvar] ; on a modifiee le nom de la variable? if newfieldname NE oldfieldname then BEGIN changefield, base, newfieldname, BOITE = boite widget_control, champid, set_droplist_select = indexvar ENDIF ; ; on s''occupe du calendrier ; oldcalendar = (*(extractatt(top_uvalue, 'fileparameters'))[oldfile]).time_counter newcalendar = (*(extractatt(top_uvalue, 'fileparameters'))[newfile]).time_counter ; a-t-on change de calendrier ? if n_elements(oldcalendar) NE n_elements(newcalendar) $ OR total(oldcalendar NE newcalendar) NE 0 then begin ; quelles etaient les dates selectionnees ? date1id = widget_info(base, find_by_uname = 'calendar1') if NOT keyword_set(date1) then widget_control, date1id, get_value = date1 if (where(newcalendar EQ juldate(date1,/vraidate)))[0] EQ -1 then date1 = newcalendar[0] date2id = widget_info(base, find_by_uname = 'calendar2') if NOT keyword_set(date2) then widget_control, date2id, get_value = date2 if (where(newcalendar EQ juldate(date2,/vraidate)))[0] EQ -1 then date2 = date1 if date2 LT date1 THEN date2 = date1 widget_control, date1id, /destroy widget_control, date2id, /destroy base12 = widget_info(base, find_by_uname = 'base12') rien = cw_calendar(base12,newcalendar, juldate(date1,/vraidate), uname = 'calendar1' $ , uvalue = {name:'calendar1'}, /frame) rien = cw_calendar(base12,newcalendar, juldate(date2,/vraidate), uname = 'calendar2' $ , uvalue = {name:'calendar2'}, /frame) ENDIF ELSE BEGIN if keyword_set(date1) then begin date1id = widget_info(base, find_by_uname = 'calendar1') widget_control, date1id, set_value = date1 endif if keyword_set(date2) then begin date2id = widget_info(base, find_by_uname = 'calendar2') widget_control, date2id, set_value = date2 endif ENDELSE ; ; parametres de la grille ; newgrid = *(extractatt(top_uvalue, 'meshparameters'))[newfile] change = changegrid(newgrid) if change OR keyword_set(boite) then BEGIN if NOT keyword_set(boite) then boite = -1 domainid = widget_info(base, find_by_uname = 'domain') widget_control, domainid, set_value = boite endif ;-------------- widget_control, base, update = 1 ;-------------- return end