;+ setall ;NAME: ; spd_ui_line_settings__define ; ;PURPOSE: ; line properties is an object that holds all of the settings necessary for ; plotting a line as specified in the Trace Properties Line panel ; ;CALLING SEQUENCE: ; lineSettings = Obj_New("SPD_UI_LINE_SETTINGS") ; ;INPUT: ; none ; ;KEYWORDS: ; dataX string naming X component of line ; dataY string naming Y component of line ; mirrorLine flag to mirror line ; lineStyle line style object ; drawBetweenPts flag set if separation attributes should be used(ie NOT drawBetweenpts) ; separatedBy number of point separation ; separatedUnits 0=sec, 1=min, 2=hrs, 3=days ; symbol symbol object ; plotPoints, all,1st/Last,1st,Last,MajorTick,EveryN ; everyOther number for every N points ; positiveEndPt variable name for positive endPt ; negativeEndPt variable name for negative endPt ; positiveEndRel flag if relative to line ; negativeEndRel flag if relative to line ; barLine bar line style object ; MarkSymbol mark symbol object ; debug=debug set to debug ; ;OUTPUT: ; line property object reference ; ;METHODS: ; SetProperty procedure to set keywords ; GetProperty procedure to get keywords ; GetAll returns the entire structure ; GetPlotOptions returns string array of plot options ; GetPlotOption returns name of plot option given an index ; GetUnits returns string array of unit options ; GetUnit returns name of unit given an index ; ; ;NOTES: ; Methods: GetProperty,SetProperty,GetAll,SetAll are now managed automatically using the parent class ; spd_ui_getset. You can still call these methods when using objects of type spd_ui_line_settings, and ; call them in the same way as before ; ;HISTORY: ; ;$LastChangedBy:pcruce $ ;$LastChangedDate:2009-09-10 09:15:19 -0700 (Thu, 10 Sep 2009) $ ;$LastChangedRevision:6707 $ ;$URL:svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/thmsoc/trunk/idl/spedas/spd_ui/objects/spd_ui_line_settings__define.pro $ ;----------------------------------------------------------------------------------- FUNCTION SPD_UI_LINE_SETTINGS::Copy out = Obj_New("SPD_UI_LINE_SETTINGS",/nosave) selfClass = Obj_Class(self) outClass = Obj_Class(out) IF selfClass NE outClass THEN BEGIN dprint, 'Object classes not identical' RETURN, 1 END Struct_Assign, self, out ;newLineStyle=Obj_New("SPD_UI_LINE_STYLE") IF Obj_Valid(self.lineStyle) THEN newLineStyle=self.LineStyle->Copy() ELSE $ newLineStyle=Obj_New() out->SetProperty, LineStyle=newLineStyle ;newSymbol=Obj_New("SPD_UI_SYMBOL") IF Obj_Valid(self.symbol) THEN newSymbol=self.symbol->Copy() ELSE $ newSymbol=Obj_New() out->SetProperty, Symbol=newSymbol ;newBarLine=Obj_New("SPD_UI_LINE_STYLE") IF Obj_Valid(self.barLine) THEN newBarLine=self.barLine->Copy() ELSE $ newBarLine=Obj_New() out->SetProperty, BarLine=newBarLine ; newMarkSymbol=Obj_New("SPD_UI_SYMBOL") IF Obj_Valid(self.markSymbol) THEN newMarkSymbol=self.markSymbol->Copy() ELSE $ newMarkSymbol=Obj_New() out->SetProperty, MarkSymbol=newMarkSymbol RETURN, out END ;-------------------------------------------------------------------------------- function spd_ui_line_settings::getPtSpacing compile_opt idl2 if self.separatedUnits eq 1 then begin return,self.separatedBy * 60D endif else if self.separatedUnits eq 2 then begin return,self.separatedBy * 60D * 60D endif else if self.separatedUnits eq 3 then begin return,self.separatedBy * 60D * 60D * 24D endif else begin return,self.separatedBy endelse end ;this routine will update references to a data quantity ;This should be used if a name has changed while traces are ;already in existence . ;arguments should be two arrays of strings, with the arrays being of equal length ;changed will be set to 1 if a value is changed pro spd_ui_line_settings::updatedatareference,oldnames,newnames,changed=changed compile_opt idl2 changed=0 self->getProperty,datax=datax,datay=datay idx = where(datax eq oldnames,c) if c then begin changed = 1 self->setProperty,datax=newnames[idx] endif idx = where(datay eq oldnames,c) if c then begin changed = 1 self->setProperty,datay = newnames[idx] endif end FUNCTION SPD_UI_LINE_SETTINGS::GetUnits RETURN, ['sec', 'minutes', 'hours', 'days', '', ''] END ;-------------------------------------------------------------------------------- FUNCTION SPD_UI_LINE_SETTINGS::GetUnit, index IF N_Elements(index) EQ 0 THEN RETURN, 0 IF NOT Is_Numeric(index) THEN RETURN, 0 IF index LT 0 OR index GT 5 THEN RETURN, 0 units=self->GetUnits() RETURN, units(index) END ;-------------------------------------------------------------------------------- FUNCTION SPD_UI_LINE_SETTINGS::GetPlotOptions RETURN, ['All Points', 'First and Last Points', 'First Point', 'Last Point', 'Major Ticks', 'Every'] END ;-------------------------------------------------------------------------------- FUNCTION SPD_UI_LINE_SETTINGS::GetPlotOption, index IF N_Elements(index) EQ 0 THEN RETURN, 0 IF NOT Is_Numeric(index) THEN RETURN, 0 IF index LT 0 OR index GT 5 THEN RETURN, 0 options=self->GetPlotOptions() RETURN, options(index) END ;-------------------------------------------------------------------------------- PRO SPD_UI_LINE_SETTINGS::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_LINE_SETTINGS::Reset if ptr_valid(self.origsettings) then begin self->setall,*self.origsettings self->save endif END ;-------------------------------------------------------------------------------- FUNCTION SPD_UI_LINE_SETTINGS::Init, $ dataX=dataX, $ ; string x component of trace dataY=dataY, $ ; string y component of trace MirrorLine=mirrorline, $ ; flag to mirror line LineStyle=linestyle, $ ; line style object DrawBetweenPts=drawbetweenpts, $ ; flag to draw line between points SeparatedBy=separatedby, $ ; number of point separation SeparatedUnits=separatedunits, $ ; 0=sec, 1=min, 2=hrs, 3=days, 4=none Symbol=symbol, $ ; symbol object PlotPoints=plotpoints, $ ; 0=All,1=1st/Last,2=1st,3=Last,4=MajorTick,5=EveryN EveryOther=everyother, $ ; number for every N points PositiveEndPt=positiveendpt, $ ; variable name for positive endPt NegativeEndPt=negativeendpt, $ ; variable name for negative endPt PositiveEndRel=positiveendrel, $ ; flag if relative to line NegativeEndRel=negativeendrel, $ ; flag if relative to line BarLine=barline, $ ; line style object for bar line MarkSymbol=marksymbol, $ ; mark symbol object Debug=debug, $ ; flag to debug nosave=nosave ; will not save copy on startup Catch, theError IF theError NE 0 THEN BEGIN Catch, /Cancel ok = Error_Message(Traceback=Keyword_Set(debug)) RETURN, 0 ENDIF ; Check that all parameters have values IF N_Elements(dataX) EQ 0 THEN dataX = '' IF N_Elements(dataY) EQ 0 THEN dataY = '' IF N_Elements(separatedby) EQ 0 THEN separatedby = 0 IF N_Elements(separatedunits) EQ 0 THEN BEGIN separatedunits = 0 ENDIF ELSE BEGIN IF separatedunits LT 0 OR separatedunits GT 4 THEN RETURN, 0 ENDELSE IF N_Elements(plotpoints) EQ 0 THEN BEGIN plotpoints = 0 ENDIF ELSE BEGIN IF plotpoints LT 0 OR plotpoints GT 5 THEN RETURN, 0 ENDELSE IF N_Elements(everyother) EQ 0 THEN everyother=1 IF N_Elements(positiveendpt) EQ 0 THEN positiveendpt='' IF N_Elements(negativeendpt) EQ 0 THEN negativeendpt='' mirrorline = Keyword_Set(mirrorline) if n_elements(drawbetweenpts) eq 0 then drawBetweenpts = 0 positiveendrel = Keyword_Set(positiveendrel) negativeendrel = Keyword_Set(negativeendrel) IF NOT Obj_Valid(linestyle)THEN linestyle = Obj_New("SPD_UI_LINE_STYLE") IF NOT Obj_Valid(symbol)THEN symbol = Obj_New("SPD_UI_SYMBOL") IF NOT Obj_Valid(barline)THEN barline = Obj_New("SPD_UI_LINE_STYLE", show=0) IF NOT Obj_Valid(marksymbol)THEN marksymbol = Obj_New("SPD_UI_LINE_STYLE") ; Set all parameters self.dataX = dataX self.dataY = dataY self.mirrorLine = mirrorline self.lineStyle = linestyle self.drawBetweenPts = drawbetweenpts self.separatedBy = separatedby self.separatedUnits = separatedunits self.symbol = symbol self.plotPoints = plotpoints self.everyOther = everyother self.positiveEndPt = positiveendpt self.negativeEndPt = negativeendpt self.positiveEndRel = positiveendrel self.negativeEndRel =negativeendrel self.barLine = barline self.markSymbol = marksymbol if ~keyword_set(nosave) then begin self->save endif RETURN, 1 END ;-------------------------------------------------------------------------------- PRO SPD_UI_LINE_SETTINGS__DEFINE struct = { SPD_UI_LINE_SETTINGS, $ dataX : '', $ ; string naming x component of line dataY : '', $ ; string naming y component of line ; Line Properties lineStyle : Obj_New(), $ ; line style object mirrorLine : 0, $ ; flag to mirror line drawBetweenPts: 0, $ ; flag set if separation arguments should be used separatedBy: 0D, $ ; number of point separation separatedUnits: 0, $ ; 0=sec, 1=min, 2=hrs, 3=days, 4=none ; Symbol Properties symbol : Obj_New(), $ ; symbol style, size, color plotPoints: 0, $ ; 0=all,1=1st/Last,2=1st,3=Last,4=MajorTick,5=EveryN everyOther: 0, $ ; number for every N points ; Bar Properties barLine : Obj_New(), $ ; line style of bar positiveEndPt: '', $ ; variable name for positive endPt negativeEndPt: '', $ ; variable name for negative endPt positiveEndRel: 0, $ ; flag if relative to line negativeEndRel: 0, $ ; flag if relative to line markSymbol: Obj_New(), $ ; bar, circle, diamond, triangle, cross ;Original Settings origsettings: ptr_New(), $ ;pointer to original settings in case of reset INHERITS SPD_UI_READWRITE, $ ; generalized read/write methods inherits spd_ui_getset $ ;generalized getProperty,setProperty,getAll,setAll methods } END