FUNCTION SPD_UI_PANEL::Copy
out = Obj_New("SPD_UI_PANEL", self.id,/nosave)
Struct_Assign, self, out
newSettings=Obj_New("SPD_UI_PANEL_SETTINGS")
IF Obj_Valid(self.Settings) THEN newSettings=self.settings->Copy() ELSE $
newSettings=Obj_New()
out->SetProperty, Settings=newSettings
newAxis=Obj_New("SPD_UI_AXIS_SETTINGS")
IF Obj_Valid(self.xAxis) THEN newAxis=self.xAxis->Copy() ELSE $
newAxis=Obj_New()
out->SetProperty, XAxis=newAxis
newAxis=Obj_New("SPD_UI_AXIS_SETTINGS")
IF Obj_Valid(self.yAxis) THEN newAxis=self.yAxis->Copy() ELSE $
newAxis=Obj_New()
out->SetProperty, YAxis=newAxis
newAxis=Obj_New("SPD_UI_ZAXIS_SETTINGS")
IF Obj_Valid(self.zAxis) THEN newAxis=self.zAxis->Copy() ELSE $
newAxis=Obj_New()
out->SetProperty, ZAxis=newAxis
IF Obj_Valid(self.traceSettings) THEN BEGIN
origSettings=self.traceSettings->Get(/all)
newSettings=Obj_New("IDL_Container")
nSettings = N_Elements(origSettings)
IF nSettings GT 0 THEN BEGIN
FOR i=0, nSettings-1 DO BEGIN
IF Obj_Valid(origSettings[i]) THEN BEGIN
newSetting=origSettings[i]->Copy()
newSettings->Add, newSetting
ENDIF
ENDFOR
ENDIF
ENDIF
out->SetProperty, TraceSettings=newSettings
newVariables=Obj_New("IDL_Container")
newVariable=Obj_New("SPD_UI_VARIABLE")
IF Obj_Valid(self.variables) THEN origVariables=self.variables->Get(/all)
nVariables = N_Elements(origVariables)
IF nVariables GT 0 THEN BEGIN
FOR i=0, nVariables-1 DO BEGIN
IF Obj_Valid(origVariables[i]) THEN BEGIN
newVariable=origVariables[i]->Copy()
newVariables->Add, newVariable
ENDIF
ENDFOR
ENDIF
out->SetProperty, Variables=newVariables
newMarkers=Obj_New("IDL_Container")
newMarker=Obj_New("SPD_UI_MARKER")
IF Obj_Valid(self.markers) THEN origMarkers=self.markers->Get(/all)
numMarkers = N_Elements(origMarkers)
IF numMarkers GT 0 THEN BEGIN
FOR i=0, numMarkers-1 DO BEGIN
IF Obj_Valid(origMarkers[i]) THEN BEGIN
newMarker=origMarkers[i]->Copy()
newMarkers->Add, newMarker
ENDIF
ENDFOR
ENDIF
out->SetProperty, Markers=newMarkers
RETURN, out
END
FUNCTION SPD_UI_PANEL::GetPanelCoordinates
coord = dblarr(4)
self.settings->getProperty,lunit=unit,lvalue=value,left=flag
coord[0] = (~flag || value eq -1)?-1:self.settings->convertunit(value,unit,0)
self.settings->getProperty,bunit=unit,bvalue=value,bottom=flag
coord[1] = (~flag || value eq -1)?-1:self.settings->convertunit(value,unit,0)
self.settings->getProperty,wunit=unit,wvalue=value,width=flag
coord[2] = (~flag || value eq -1)?-1:self.settings->convertunit(value,unit,0)
self.settings->getProperty,hunit=unit,hvalue=value,height=flag
coord[3] = (~flag || value eq -1)?-1:self.settings->convertunit(value,unit,0)
RETURN, coord
END
pro SPD_UI_PANEL::setPanelCoordinates,coord
self.settings->getProperty,lunit=lunit
lvalue = self.settings->convertunit(coord[0],0,lunit)
self.settings->setProperty,lvalue=lvalue
self.settings->getProperty,bunit=bunit
bvalue = self.settings->convertunit(coord[1],0,bunit)
self.settings->setProperty,bvalue=bvalue
self.settings->getProperty,wunit=wunit
wvalue = self.settings->convertunit(coord[2],0,wunit)
self.settings->setProperty,wvalue=wvalue
self.settings->getProperty,hunit=hunit
hvalue = self.settings->convertunit(coord[3],0,hunit)
self.settings->setProperty,hvalue=hvalue
END
function spd_ui_panel::constructPanelName
compile_opt idl2
name = 'Panel '
name += strtrim(string(self.id + 1),2)
self.settings->getProperty,row=row,col=col,titleObj=panelTitle
panelTitle->getProperty, value=title
if strlen(title) gt 45 then title = strmid(title, 0, 45) + ' ...'
name += ' (' + strtrim(string(row),2) + ', ' + strtrim(string(col),2) + ') - ' + $
title
return,name
end
function spd_ui_panel::constructTraceNames
compile_opt idl2
if obj_valid(self.traceSettings) AND $
~array_equal((self.traceSettings->get(/all)), -1, /no_typeconv) then begin
objs = self.traceSettings->get(/all)
names = strarr(n_elements(objs))
for i = 0,n_elements(objs)-1 do begin
if obj_isa(objs[i],'spd_ui_line_settings') then begin
objs[i]->getProperty,dataX=dataX,dataY=dataY
names[i] = ' - ' + dataX + ' -vs- ' + dataY
endif else if obj_isa(objs[i],'spd_ui_spectra_settings') then begin
objs[i]->getProperty,dataX=dataX,dataY=dataY,dataZ=dataZ
names[i] = ' - ' + dataX + ' -vs- ' + dataY + ' -vs- ' + dataZ
endif
endfor
endif
return,names
end
pro spd_ui_panel::updatedatareference,oldnames,newnames
compile_opt idl2
ref_changed = 0
self->getProperty,traceSettings=traceSettings,variables=variables
if obj_valid(traceSettings) then begin
traces = traceSettings->get(/all)
if obj_valid(traces[0]) then begin
for i = 0,n_elements(traces)-1 do begin
traces[i]->updatedatareference,oldnames,newnames,changed=changed
if changed then ref_changed = 1
endfor
endif
endif
if ref_changed then self->synclabelstolines, oldnames=oldnames, newnames=newnames
if obj_valid(variables) then begin
var_list = variables->get(/all)
if obj_valid(var_list[0]) then begin
for i = 0,n_elements(var_list)-1 do begin
var_list[i]->updatedatareference,oldnames,newnames
endfor
endif
endif
end
PRO SPD_UI_PANEL::SyncLinesToLabels
IF ~Obj_Valid(self.traceSettings) THEN RETURN
settings = self.traceSettings->Get(/All)
nLines = N_Elements(settings)
IF ~Obj_Valid(self.yAxis) THEN RETURN
self.yAxis->GetProperty, Labels=labels
if ~obj_valid(labels) then return
labels1 = labels->Get(/All)
nLabels = N_Elements(labels1)
IF nLabels LT 1 THEN RETURN
IF ~Obj_Valid(labels1[0]) THEN RETURN
IF nLines GT nLabels THEN nlines = nLabels
IF nLines LT 1 THEN RETURN
FOR i=0,nLines-1 DO BEGIN
IF Obj_Isa(settings[i], 'SPD_UI_LINE_SETTINGS') THEN BEGIN
settings[i]->GetProperty, LineStyle=lineStyle
IF Obj_Valid(lineStyle) THEN BEGIN
labels1[i]->GetProperty, Color=color
lineStyle->SetProperty, Color=color
ENDIF
ENDIF
ENDFOR
END
PRO SPD_UI_PANEL::SyncLabelsToLines, oldnames=oldnames, newnames=newnames
IF ~Obj_Valid(self.traceSettings) THEN RETURN
traceSettings = self.traceSettings->Get(/All)
ntraces = n_elements(traceSettings)
if keyword_set(oldnames) && keyword_set(newnames) then begin
for i = 0,n_elements(traceSettings)-1 do begin
dataX = ''
dataY = ''
dataZ = ''
if obj_valid(tracesettings[i]) then begin
tracesettings[i]->getProperty,dataX=dataX
if is_string(dataX) then begin
idx = where(dataX eq newnames,c)
if c ge 1 then begin
self.xaxis->getProperty,labels=xlabels
if obj_valid(xlabels) then begin
xLabelArray = xLabels->get(/all)
if i lt n_elements(xLabelArray) then begin
xLabelArray[i]->getProperty,value=xLabelText
subIdx = stregex(xLabelText,oldnames[idx[0]],length=subLen)
if subIdx ne -1 then begin
xlabelNew = strmid(xLabelText,0,subIdx) + newnames[idx[0]] + strmid(xLabelText,subIdx+subLen)
xLabelArray[i]->setProperty,value=xlabelNew
endif
endif
endif
endif
endif
tracesettings[i]->getProperty,dataY=dataY
if is_string(dataY) then begin
idx = where(dataY eq newnames,c)
if c ge 1 then begin
self.yaxis->getProperty,labels=ylabels
if obj_valid(ylabels) then begin
yLabelArray = yLabels->get(/all)
if i lt n_elements(yLabelArray) then begin
yLabelArray[i]->getProperty,value=yLabelText
subIdx = stregex(yLabelText,oldnames[idx[0]],length=subLen)
if subIdx ne -1 then begin
ylabelNew = strmid(yLabelText,0,subIdx) + newnames[idx[0]] + strmid(yLabelText,subIdx+subLen)
yLabelArray[i]->setProperty,value=ylabelNew
endif
endif
endif
endif
endif
if obj_isa(tracesettings[i],'spd_ui_spectra_settings') then begin
tracesettings[i]->getProperty,dataZ=dataZ
if is_string(dataZ) then begin
idx = where(dataZ eq newnames,c)
if c ge 1 then begin
if obj_valid(self.zaxis) then begin
self.zaxis->getProperty,labelTextObject=zlabelarray
if obj_valid(zlabelarray) then begin
zLabelArray[0]->getProperty,value=zLabelText
subIdx = stregex(zLabelText,oldnames[idx[0]],length=subLen)
if subIdx ne -1 then begin
zlabelNew = strmid(zLabelText,0,subIdx) + newnames[idx[0]] + strmid(zLabelText,subIdx+subLen)
zLabelArray[0]->setProperty,value=zlabelNew
endif
endif
endif
self.yaxis->getProperty,labels=ylabels
if obj_valid(ylabels) then begin
yLabelArray = yLabels->get(/all)
if i lt n_elements(yLabelArray) then begin
yLabelArray[i]->getProperty,value=yLabelText
subIdx = stregex(yLabelText,oldnames[idx],length=subLen)
if subIdx ne -1 then begin
ylabelNew = strmid(yLabelText,0,subIdx) + newnames[idx] + strmid(yLabelText,subIdx+subLen)
yLabelArray[i]->setProperty,value=ylabelNew
endif
endif
endif
endif
endif
endif
endif
endfor
endif
IF ~Obj_Valid(self.yAxis) THEN RETURN
self.yAxis->GetProperty, Labels = labels
if ~obj_valid(labels[0]) then return
labels1 = labels->Get(/All)
nLabels = N_Elements(labels1)
IF nLabels LT 1 THEN RETURN
IF ~Obj_Valid(labels1[0]) THEN RETURN
IF nLabels GT ntraces THEN nlabels = ntraces
IF nLabels LT 1 THEN RETURN
FOR i=0,nLabels-1 DO BEGIN
if obj_isa(tracesettings[i],'spd_ui_spectra_settings') then begin
endif else begin
traceSettings[i]->GetProperty, LineStyle=lineStyle
traceSettings[i]->GetProperty, dataY=dataY
IF Obj_Valid(lineStyle) THEN BEGIN
lineStyle->GetProperty, Color=color
labels1[i]->SetProperty, Color=color
ENDIF
endelse
ENDFOR
END
FUNCTION SPD_UI_PANEL::GetLayoutStructure
self.settings->GetProperty, Row=row, Col=col,rspan=rowspan,cspan=colspan
RETURN, {layout, row:row, col:col, id:self.id,rspan:rowspan,cspan:colspan}
END
pro SPD_UI_PANEL::SetLayoutStructure, Row=row, Col=col, Rspan=rspan, Cspan=cspan
self.settings->SetProperty, Row=row, Col=col, Rspan=rspan, Cspan=cspan
END
PRO SPD_UI_PANEL::Save
copy = self->copy()
if ptr_valid(self.origsettings) then begin
ptr_free,self.origsettings
endif
self.origsettings = ptr_new(copy->getall())
RETURN
END
PRO SPD_UI_PANEL::Reset
if ptr_valid(self.origsettings) then begin
self->SetAll,*self.origsettings
self->save
endif
RETURN
END
FUNCTION SPD_UI_PANEL::Init, $
id, $
traceSettings=traceSettings, $
windowID=windowID, $
Name=name, $
Settings=settings, $
legendSettings=legendSettings, $
XAxis=xaxis, $
YAxis=yaxis, $
zAxis=zaxis, $
Tracking=tracking, $
Variables=variables, $
showvariables=showvariables, $
Markers=markers, $
labelmargin=labelmargin,$
IsActive=isactive, $
SyncFlag=syncflag, $
Debug=debug, $
nosave=nosave
Catch, theError
IF theError NE 0 THEN BEGIN
Catch, /Cancel
ok = Error_Message(Traceback=Keyword_Set(debug))
RETURN, 0
ENDIF
IF N_Elements(id) EQ 0 THEN id = -1
IF N_Elements(windowid) EQ 0 THEN windowid = -1
IF N_Elements(name) EQ 0 THEN name = 'Panel: ' + strtrim(id+1, 2)
IF N_Elements(labelmargin) EQ 0 THEN labelmargin = 0
IF NOT Obj_Valid(settings) THEN settings = Obj_New('SPD_UI_PANEL_SETTINGS')
if not obj_valid(legendSettings) then legendSettings = obj_new('SPD_UI_LEGEND')
if ~obj_valid(xaxis) then xaxis = Obj_New()
if ~obj_valid(yaxis) then yaxis = Obj_New()
if ~obj_valid(zaxis) then zaxis = obj_new()
if ~obj_valid(traceSettings) then traceSettings = obj_new('IDL_Container')
IF N_Elements(tracking) EQ 0 THEN tracking = 1
IF N_Elements(isactive) EQ 0 THEN isactive = 1
IF N_Elements(syncflag) EQ 0 THEN syncflag = 1
IF NOT Obj_Valid(variables) THEN variables = Obj_New('IDL_Container')
IF NOT Obj_Valid(markers) THEN markers = Obj_New('IDL_Container')
if n_elements(showvariables) eq 0 then showvariables = 1
self.traceSettings = traceSettings
self.windowID = windowid
self.name = name
self.id = id
self.settings = settings
self.legendSettings = legendSettings
self.xAxis = xaxis
self.yAxis = yaxis
self.zAxis = zaxis
self.tracking = tracking
self.isActive = isactive
self.syncFlag = syncflag
self.variables = variables
self.markers = markers
self.showvariables = showvariables
self.labelmargin = labelmargin
if ~keyword_set(nosave) then begin
self->save
endif
RETURN, 1
END
PRO SPD_UI_PANEL__DEFINE
struct = { SPD_UI_PANEL, $
name: '', $
id: 0, $
windowID: 0, $
settings: Obj_New(), $
traceSettings:Obj_New(),$
xAxis: Obj_New(), $
yAxis: Obj_New(), $
zAxis: Obj_new(), $
tracking: 0, $
isActive: 0, $
variables: Obj_New(), $
markers: Obj_New(), $
showvariables:0, $
labelmargin: 0, $
syncFlag: 0, $
origsettings: ptr_new(),$
legendSettings: Obj_New(), $
INHERITS SPD_UI_READWRITE, $
inherits spd_ui_getset $
}
END