;+ ; ; @file_comments ; ; @categories ; ; @param BASE {in}{required} ; The id of the widget where apply the drawing. ; ; @param NEWFILENAME ; ; @keyword BOXZOOM ; Vector indicating the geographic zone on which we want to cut the map. ; If BOXZOOM has : ; 1 element : The extraction is made on [lon1, lon2, lat1, lat2, 0.,boxzoom[0]] ; 2 elements: The extraction is made on [lon1, lon2, lat1, lat2, boxzoom[0],boxzoom[1]] ; 4 elements: The extraction is made on [Boxzoom, 0, max([gdept, gdepw])] ; 5 elements: The extraction is made on [Boxzoom[0:3], 0, Boxzoom[4]] ; 6 elements: The extraction is made on Boxzoom ; Where lon1, lon2,lat1,lat2 are global variables defined at the last ; domdef ! ; ; @keyword DATE1 ; ; @keyword DATE2 ; ; @keyword FIELDNAME ; ; @returns ; ; @uses ; ; @restrictions ; ; @examples ; ; @history ; ; @version ; $Id$ ; ; @todo ; seb ; ;- PRO changefile, base, newfilename, BOXZOOM=boxzoom $ , DATE1=date1, DATE2=date2, FIELDNAME=fieldname ; ; compile_opt idl2, strictarrsubs ; widget_control, base, /hourglass widget_control, base, get_uvalue = top_uvalue filelist = extractatt(top_uvalue, 'filelist') IF size(newfilename, /type) EQ 7 THEN newfile = (where(filelist EQ newfilename))[0] $ ELSE newfile = newfilename ; it is already the index of the new file if newfile EQ -1 then begin nothing = report('invalid filename') return endif oldfile = extractatt(top_uvalue, 'currentfile') oldfilename = filelist[oldfile] ; did we really change the file??? if oldfile EQ newfile AND NOT (keyword_set(BOXZOOM) OR keyword_set(DATE1) OR keyword_set(DATE2) OR keyword_set(FIELDNAME)) then return ;-------------- widget_control, base, update = 0 ;-------------- ; ; we update currentfile element of the top_uvalue ; *top_uvalue[1, findline(top_uvalue, 'currentfile')] = newfile ; ; Calendar ; oldcalendar = (*(extractatt(top_uvalue, 'fileparameters'))[oldfile]).time_counter newcalendar = (*(extractatt(top_uvalue, 'fileparameters'))[newfile]).time_counter ; Did we change the calendar? if array_equal(oldcalendar, newcalendar) NE 1 then begin @cm_4cal ; for key_caltype key_caltype = (*(extractatt(top_uvalue, 'fileparameters'))[newfile]).caltype ; fake or real calendar??? fakecal = (*(extractatt(top_uvalue, 'fileparameters'))[newfile]).fakecal ; Which dates were selected? date1id = widget_info(base, find_by_uname = 'calendar1') if NOT keyword_set(date1) then widget_control, date1id, get_value = date1 jdate1 = date2jul(date1) if (where(newcalendar EQ jdate1))[0] EQ -1 then jdate1 = newcalendar[0] date2id = widget_info(base, find_by_uname = 'calendar2') if NOT keyword_set(date2) then widget_control, date2id, get_value = date2 jdate2 = date2jul(date2) if (where(newcalendar EQ jdate2))[0] EQ -1 then jdate2 = date1 if jdate2 LT jdate1 THEN jdate2 = jdate1 widget_control, date1id, /destroy widget_control, date2id, /destroy basecal = widget_info(base, find_by_uname = 'basecal') rien = cw_calendar(basecal, newcalendar, jdate1, uname = 'calendar1' $ , FAKECAL = fakecal, uvalue = {name:'calendar1'}, /frame) rien = cw_calendar(basecal, newcalendar, jdate2, uname = 'calendar2' $ , FAKECAL = fakecal, 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 ; ; Grid parameters and domain ; newgrid = *(extractatt(top_uvalue, 'meshparameters'))[newfile] change = changegrid(newgrid) if change OR keyword_set(boxzoom) then BEGIN if NOT keyword_set(boxzoom) then boxzoom = -1 domainid = widget_info(base, find_by_uname = 'domain') widget_control, domainid, set_value = boxzoom endif ; ; file name ; IF oldfile NE newfile THEN BEGIN flstid = widget_info(base, find_by_uname = 'filelist') widget_control, flstid, set_combobox_select = newfile ENDIF ; ; Variables name ; vlstid = widget_info(base, find_by_uname = 'varlist') oldfieldname = widget_info(vlstid, /combobox_gettext) ; did we really change the liste of variables? oldlistvar = (*(extractatt(top_uvalue, 'fileparameters'))[oldfile]).listvar newlistvar = (*(extractatt(top_uvalue, 'fileparameters'))[newfile]).listvar if array_equal(oldlistvar, newlistvar) NE 1 THEN $ widget_control, vlstid, set_value = newlistvar ; set the liste of variables to the new variable name if keyword_set(fieldname) then newfieldname = fieldname ELSE newfieldname = oldfieldname indexvar = where(newlistvar EQ newfieldname) & indexvar = 0 > indexvar[0] widget_control, vlstid, set_combobox_select = indexvar newfieldname = newlistvar[indexvar] ; did we change the name of the variable? if newfieldname NE oldfieldname then BEGIN changefield, base, newfieldname, BOXZOOM = boxzoom ENDIF ; ;-------------- widget_control, base, update = 1 ;-------------- return end