pro spd_ui_draw_object::updateLegend,panelLocation,panel,blank=blank,noyvalue=noyvalue
compile_opt idl2,hidden
if ptr_valid(panel.legendInfo) then begin
legendobj = *panel.legendInfo
notationSet = legendobj.notationSet
timeFormat = legendobj.timeFormat
numFormat = legendobj.numFormat
xIsTime = legendobj.xIsTime
yIsTime = legendobj.yIsTime
zIsTime = legendobj.zIsTime
if keyword_set(blank) && ptr_valid(panel.traceInfo) then begin
if obj_valid(panel.xobj) then panel.xobj->setProperty,strings=''
if obj_valid(panel.yobj) then panel.yobj->setProperty,strings=''
traces = *panel.traceInfo
for j = 0,n_elements(traces)-1 do begin
if obj_valid(traces[j].textObj) then begin
traces[j].textObj->setProperty,strings=''
endif
endfor
endif else if ptr_valid(panel.traceinfo) then begin
if panel.locked then begin
xrange = panel.lockedRange
xscale = panel.lockedScale
endif else begin
xrange = panel.xrange
xscale = panel.xscale
endelse
if panel.xistime then begin
if xrange[1]-xrange[0] lt 60*60*24 then begin
xformat = 6
endif else begin
xformat = 15
endelse
endif else begin
xformat = 5
endelse
if panel.yistime then begin
if panel.yrange[1]-panel.yrange[0] lt 60*60*24 then begin
yformat = 6
endif else begin
yformat = 15
endelse
endif else begin
yformat = 5
endelse
if panel.zistime then begin
if panel.zrange[1]-panel.zrange[0] lt 60*60*24 then begin
zformat = 6
endif else begin
zformat = 15
endelse
endif else begin
zformat = 5
endelse
xdatapos = xrange[0]+(xrange[1]-xrange[0])*panelLocation[0]
formatdata={timeAxis:panel.xIsTime,formatid:xIsTime?timeFormat:numFormat,scaling:xscale,exponent:notationSet}
if obj_valid(panel.xobj) then panel.xobj->setProperty,strings=formatannotation(0,0,xdatapos,data=formatdata)
if ~keyword_set(noyvalue) then begin
ydatapos = panel.yrange[0]+(panel.yrange[1]-panel.yrange[0])*panelLocation[1]
formatdatay={timeAxis:panel.yIsTime,formatid:yIsTime?timeFormat:numFormat,scaling:panel.yscale,exponent:notationSet}
if obj_valid(panel.yobj) then panel.yobj->setProperty,strings=formatannotation(0,0,ydatapos,data=formatdatay)
endif else begin
if obj_valid(panel.yobj) then panel.yobj->setProperty,strings=''
endelse
formatdataz={timeAxis:panel.zIsTime,formatid:zIsTime?timeFormat:numFormat,scaling:panel.zscale,exponent:notationSet}
traces = *panel.traceInfo
for i= 0,n_elements(traces)-1 do begin
if ~ptr_valid(traces[i].refData) then begin
dataString = 'NaN'
endif else begin
if traces[i].isSpec then begin
refdim = dimen(*traces[i].refData)
if n_elements(refDim) eq 1 then begin
refDim = [refDim,1]
endif
refxidx = (round(panelLocation[0]*refdim[0]) < (refdim[0]-1)) > 0
refyidx = (round(panelLocation[1]*refdim[1]) < (refdim[1]-1)) > 0
dataString = formatannotation(0,0,(*traces[i].refData)[refxidx,refyidx],data=formatdataz)
endif else begin
if ~ptr_valid(traces[i].abcissa) then begin
refdim = dimen(*traces[i].refData)
refxidx = (round(panelLocation[0]*refdim[0]-1) < (refdim[0]-1)) > 0
formatdatay={timeAxis:panel.yIsTime,formatid:yIsTime?timeFormat:numFormat,scaling:panel.yscale,exponent:notationSet}
endif else begin
tmp = min(abs(*traces[i].abcissa - panelLocation[0]),refxidx)
formatdatay={timeAxis:panel.yIsTime,formatid:yIsTime?timeFormat:numFormat,scaling:panel.yscale,range:panel.yrange,exponent:notationSet}
endelse
dataString = formatannotation(0,0,(*traces[i].refData)[refxidx],data=formatdatay)
endelse
endelse
if (dataString eq string(!VALUES.D_NAN)) then begin
if (xdatapos lt *panel.dxptr[0] || xdatapos gt *panel.dxptr[1]) then begin
dataString = 'Out of range'
endif else begin
dataString = 'NaN'
endelse
endif
if obj_valid(traces[i].textObj) then begin
traces[i].textObj->setProperty,strings=dataString
endif
endfor
endif
if keyword_set(blank) && ptr_valid(panel.varInfo) then begin
vars = *panel.varInfo
for i = 0,n_elements(vars)-1 do begin
vars[i].textObj->setProperty,strings=''
endfor
endif else if ptr_valid(panel.varInfo) then begin
vars = *panel.varInfo
for i = 0,n_elements(vars)-1 do begin
nx = n_elements(*vars[i].dataY)
idx = (round(panelLocation[0]*(nx-1)) > 0) < (nx-1)
value = (*vars[i].dataY)[idx]
formatdata={timeAxis:vars[i].isTime,formatid:vars[i].isTime?timeFormat:numFormat,scaling:0,exponent:notationSet}
str = formatannotation(0,0,value,data=formatdata)
if value ge 0 then begin
str = ' ' + str
endif
vars[i].textObj->setProperty,strings=str
endfor
endif
endif
end