pro isisgui @catch_error device,get_screen_size=scrsiz scrx=scrsiz(0)-40. scry=scrsiz(1)-40. if scrx gt 1150.0 then scrx=1150.0 ;if scrx gt 1050.0 then scrx=1050.0 ; as old size if scry gt 880.0 then scry=880.0 ; Construct the top-level base for the application. ; tlb = widget_base(title='ISIS IONOGRAM', /column) tlb = WIDGET_BASE( $ TITLE = 'ISIS IONOGRAM', $ /SCROLL, $ SCR_XSIZE=scrx, $ SCR_YSIZE=scry, $ /COLUMN) ;main base ; Add a droplist to control which property sheet is displayed isisProps = [' Load CDF ', $ ' Load Binary (.os2bin)', $ ' Load Binary (.bin)', $ ' Traces ', $ ' Res/Cutoff ', $ ' Line Plot ', $ ' Color ', $ ' Output ' ] ; the names of the output types that the output ; property sheet will support outputtypes = ['PS','GIF','JPG','TIF','BMP','PICT','VRML'] topRowBase = widget_base(tlb, /row) optionDrop = widget_droplist(topRowBase, $ title = ' ISIS Properties ', $ value = isisProps, uvalue = 'isisprop') exitButn = widget_button(topRowBase, $ value = ' Exit ', uvalue='exit') helpButn = widget_button(topRowBase, $ value = ' Help ', uvalue='help') irange1=0 irange2=255 frange1=cw_field(topRowBase,title=' amp min',value=irange1, $ /return_events,/integer,xsize=4) frange2=cw_field(topRowBase,title='max',value=irange2, $ /return_events,/integer,xsize=4) wAmpButton = widget_button(topRowBase, value='ENTER',uvalue='ENTER') topRowBase = widget_base(tlb, /row) label=widget_label(topRowBase,value='cursor:') motion = lonarr(5) motion(0) = cw_field(topRowBase,title=' sweep time(sec)',value='0.000000', $ /noedit,/string,xsize=9) motion(1) = cw_field(topRowBase,title=' freq',value=0.0, $ /noedit,/float,xsize=5) motion(2) = cw_field(topRowBase,title=' delay time(ms)',value=0.0, $ /noedit,/float,xsize=7) motion(3) = cw_field(topRowBase,title=' appar range',value=0.0, $ /noedit,/float,xsize=5) motion(4) = cw_field(topRowBase,title=' amp',value=0, $ /noedit,/integer,xsize=5) ; get the number of property sheets defined so far numbases = n_elements(isisProps) optBase = lonarr(numbases) ; create the prop sheet Bulletin Board optionBase = widget_base(tlb, /frame) ;--------------------------------------------------------- ; base 0 - load cdf options : events handled by loadcdf_eh ; This base will be the default base so ; set the MAP keyword to 1 so the base is visible. ; All other property sheet bases should have MAP set to 0. optBase[0] = widget_base(optionBase, /column, map=1, $ event_pro='loadcdf_eh') cdfRow = widget_base(optBase[0], /row) cdfbut1 = widget_button(cdfRow,value='Select CDF',uvalue='loadcdf') cdfbut2 = widget_button(cdfRow,value='Previous CDF',uvalue='prevcdf') cdfbut3 = widget_button(cdfRow,value='Next CDF',uvalue='nextcdf') cdfbut4 = widget_button(cdfRow,value='Filter CDF',uvalue='filtercdf') cdfRow2 = widget_base(optBase[0], /row) cdffield = lonarr(4) cdffield(0) = cw_field(cdfRow2,title='Time(min):', $ value=0.0, xsize=6.0, /float) cdffield(1) = cw_field(cdfRow2,title='Time(max):', $ value=0.0, xsize=6.0, /float) cdffield(2) = cw_field(cdfRow2,title='App Range(min):', $ value=0.0, xsize=6.0, /float) cdffield(3) = cw_field(cdfRow2,title='App Range(max):', $ value=0.0, xsize=6.0, /float) cdfresize = widget_button(cdfRow2, $ value='Re-size',uvalue='cdfresize') cdfreset = widget_button(cdfRow2, $ value='Reset',uvalue='cdfreset') ;--------------------------------------------------------- ; base 1 - load binary options : events handled by loadbinary_eh ; This base will be the default base so ; set the MAP keyword to 1 so the base is visible. ; All other property sheet bases should have MAP set to 0. optBase[1] = widget_base(optionBase, /column, map=0, $ event_pro='loadbin_eh') binRow = widget_base(optBase[1], /row) binbut1 = widget_button(binRow,value='Select Binary',uvalue='loadbin') binbut2 = widget_button(binRow,value='Previous Binary',uvalue='prevbin') binbut3 = widget_button(binRow,value='Next Binary',uvalue='nextbin') binbut4 = widget_button(binRow,value='Filter Binary',uvalue='filterbin') ;--------------------------------------------------------- ; base 2 - load binary options : events handled by loadbinary_eh ; This base will be the default base so ; set the MAP keyword to 2 so the base is visible. ; All other property sheet bases should have MAP set to 0. optBase[2] = widget_base(optionBase, /column, map=0, $ event_pro='loadbin2_eh') binRow = widget_base(optBase[2], /row) binbut1 = widget_button(binRow,value='Select Binary',uvalue='loadbin2') binbut2 = widget_button(binRow,value='Previous Binary',uvalue='prevbin2') binbut3 = widget_button(binRow,value='Next Binary',uvalue='nextbin2') binbut4 = widget_button(binRow,value='Filter Binary',uvalue='filterbin2') ;--------------------------------------------------------- ; base 3 - tracexo : events handled by tracexo_eh ; optBase[3] = widget_base(optionBase, /column, map=0, $ event_pro='tracexo_eh') tracesBase = widget_base(optBase[3], /row) tracebtn = widget_button(tracesBase, value='Scale Trace',/menu) tracexbtn = widget_button(tracebtn,value=' Scale X Trace ', $ uvalue='tracex') traceobtn = widget_button(tracebtn,value=' Scale O Trace ', $ uvalue='traceo') jackBase = widget_button(tracesBase,value=' Jackson ',/menu) jack3menu = widget_button(jackBase, $ value=' VARIABLE KNOWN ',uvalue='jackvk') jack4menu = widget_button(jackBase, $ value=' VARIABLE UNKNOWN ',uvalue='jackvuk') jack1menu = widget_button(jackBase, $ value=' FIXED KNOWN ',uvalue='jackfk') jack2menu = widget_button(jackBase, $ value=' FIXED UNKNOWN ',uvalue='jackfuk') ; trasavbtn = widget_button(tracesBase, $ ; value=' Save file ',uvalue='trasav') traclean = widget_button(tracesBase,value=' Cleanup All Traces ', $ uvalue='tclean') moPlot = widget_button(tracesBase, value='Object Plot',/menu) toPlot1 = widget_button(moPlot, value='Plot O',uvalue='oPlotO') toPlot1 = widget_button(moPlot, value='Plot Ne',uvalue='oPlotNe') toPlot1 = widget_button(moPlot, value='Plot Fn',uvalue='oPlotFn') tplot21 = widget_button(moPlot, value='Plot 3-Ne',uvalue='oNE3PLOT') tplot22 = widget_button(moPlot, value='Plot mult-Ne',uvalue='oNEmPLOT') mPlot = widget_button(tracesBase, value='Direct Plot',/menu) tPlot1 = widget_button(mPlot, value='Plot O',uvalue='PlotO') tPlot2 = widget_button(mPlot, value='Plot Ne',uvalue='PlotNe') tPlot3 = widget_button(mPlot, value='Plot Fn',uvalue='PlotFn') tplot21 = widget_button(mplot, value='Plot 3-Ne',uvalue='NE3PLOT') tplot22 = widget_button(mplot, value='Plot mult-Ne',uvalue='NEmPLOT') tracesBase = widget_base(optBase[3], /row) ; tracexbtn = widget_button(tracesBase,value=' Re-Load Trace File ', $ ; uvalue='reload') tmenutr = widget_button(tracesBase,value='Re-Load Trace File',/menu) tmenutr1 = widget_button(tmenutr,value='from CDF File',uvalue='reloadcdf') tmenutr2 = widget_button(tmenutr,value='from avg Binary (.os2bin)', $ uvalue='reloadavg') tmenutr3 = widget_button(tmenutr,value='from full Binary (.os2bin)', $ uvalue='reloadful') tmenutr4 = widget_button(tmenutr,value='from avg Binary (.bin)', $ uvalue='reloadavg2') tmenutr5 = widget_button(tmenutr,value='from full Binary (.bin)', $ uvalue='reloadful2') ; tmenuxo = widget_button(tracesBase,value='Add/Remove Trace',/menu) ; tmenuxo1 = widget_button(tmenuxo,value='Add X',uvalue='ADDX') ; tmenuxo2 = widget_button(tmenuxo,value='Remove X',uvalue='REMOVEX') ; tmenuxo3 = widget_button(tmenuxo,value='Add O',uvalue='ADDO') ; tmenuxo4 = widget_button(tmenuxo,value='Remove O',uvalue='REMOVEO') tracesBase = widget_base(optBase[3], /row) tralabel = widget_label(tracesBase, value='OutPut to Traces File: ') tratext = widget_text(tracesBase,xsize=60,ysize=1,/editable,value='.tra') trasavbtn = widget_button(tracesBase, $ value=' Save file ',uvalue='trasav') ;--------------------------------------------------------- ; base 4 - resonance & cutoff : events handled by rescutoff_eh ; optBase[4] = widget_base(optionBase, /column, map=0, $ event_pro='rescutoff_eh') resBase = widget_base(optBase[4], /row) zcutbtn = widget_button(resBase,value='Z cutoff',uvalue='zcutoff') nelebtn = widget_button(resBase,value='N electron',uvalue='nelectron') tuppbtn = widget_button(resBase, $ value='T upper-hybrid',uvalue='tupper') xcutbtn = widget_button(resBase,value='X cutoff',uvalue='xcutoff') dnplus = widget_button(resBase,value='Dn+ resonance',/menu) d1menu = widget_button(dnplus,value='D1+ resonance',uvalue='d1+res') d2menu = widget_button(dnplus,value='D2+ resonance',uvalue='d2+res') d3menu = widget_button(dnplus,value='D3+ resonance',uvalue='d3+res') d4menu = widget_button(dnplus,value='D4+ resonance',uvalue='d4+res') d5menu = widget_button(dnplus,value='D5+ resonance',uvalue='d5+res') dn = widget_button(resBase,value='Dn resonance',/menu) d1menu = widget_button(dn,value='D1 resonance',uvalue='d1res') d2menu = widget_button(dn,value='D2 resonance',uvalue='d2res') d3menu = widget_button(dn,value='D3 resonance',uvalue='d3res') d4menu = widget_button(dn,value='D4 resonance',uvalue='d4res') d5menu = widget_button(dn,value='D5 resonance',uvalue='d5res') dnneg = widget_button(resBase,value='Dn- resonance',/menu) d1menu = widget_button(dnneg,value='D1- resonance',uvalue='d1-res') d2menu = widget_button(dnneg,value='D2- resonance',uvalue='d2-res') d3menu = widget_button(dnneg,value='D3- resonance',uvalue='d3-res') d4menu = widget_button(dnneg,value='D4- resonance',uvalue='d4-res') d5menu = widget_button(dnneg,value='D5- resonance',uvalue='d5-res') qn = widget_button(resBase,value='Qn resonance',/menu) q2menu = widget_button(qn,value='Q2 resonance',uvalue='q2res') q3menu = widget_button(qn,value='Q3 resonance',uvalue='q3res') q4menu = widget_button(qn,value='Q4 resonance',uvalue='q4res') q5menu = widget_button(qn,value='Q5 resonance',uvalue='q5res') resBase = widget_base(optBase[4], /row) resLabel = widget_label(resBase, value='OutPut to Res/Cutoff File: ') restext = widget_text(resBase,xsize=60,ysize=1,/editable,value='.res') resnew = widget_button(resBase,value='New File',uvalue='newres') resBase = widget_base(optBase[4], /row) ;clickLabel = widget_label(resBase, value='Output Click to : ') clickLabel = widget_label(resBase, value='Input values ') outfreq = cw_field(resBase,title='Freq',value=0.0,/float,/noedit,xsize=5) outfh = cw_field(resBase,title=' FH',value=0.0,/float,/noedit,xsize=5) outbase1 = widget_base(resBase,/exclusive,/row) outfh1 = widget_button(outBase1,value='FH Model',uvalue='fhmodel') widget_control,outfh1,set_button=1 ; set FH Model for default outbase2 = widget_base(resBase,/row) outfhmo = cw_field(outBase2,title=' ',value=0.0,/float,/noedit,xsize=5) outbase3 = widget_base(resBase,/exclusive,/row) outfh2 = widget_button(outBase3,value='FH Input',uvalue='fhinput') widget_control,outfh2,set_button=0 outbase4 = widget_base(resBase,/row) outfhin = cw_field(outBase4,title=' ',value=0.0,/float,xsize=5) fhenter = widget_button(outBase4,value='Enter (FH Input)',uvalue='fhenter') outclick = lonarr(7) outclick(0) = outfreq outclick(1) = outfh outclick(2) = outfh1 outclick(3) = outfhmo outclick(4) = outfh2 outclick(5) = outfhin setbutton_fh = 1 ;--------------------------------------------------------- ; base 5 - Line Plot : events handled by lineplot_eh ; optBase[5] = widget_base(optionBase, /column, map=0, $ event_pro='lineplot_eh') Base5 = widget_base(optBase[5], /row) plotB = widget_base(Base5,/col) xlpdim = 800 ylpdim = 100 objLinePlot = widget_draw(plotB, $ xsize = xlpdim, $ ysize = ylpdim, $ graphics_level = 2, $ uvalue = 'lineplot', $ /expose_events, $ /button_events ) arrowB = widget_base(Base5,/col) uparrow = widget_button(arrowB,value='Up',uvalue='uparrow') downarrow = widget_button(arrowB,value='Down',uvalue='downarrow') leftarrow = widget_button(arrowB,value='Left',uvalue='leftarrow') rightarrow = widget_button(arrowB,value='Right',uvalue='rightarrow') InputFreqBase = widget_base(Base5,/col) mfreq = lonarr(22) infq = widget_button(InputFreqBase,value='Freq Marks',/menu) mfreq(0) = widget_button(infq,value='0.1 : 0000.0000',uvalue='freq0.1') mfreq(1) = widget_button(infq,value='0.25',uvalue='freq0.25') mfreq(2) = widget_button(infq,value='0.5 ',uvalue='freq0.5') mfreq(3) = widget_button(infq,value='0.75',uvalue='freq0.75') mfreq(4) = widget_button(infq,value='1.0 ',uvalue='freq1.0') mfreq(5) = widget_button(infq,value='1.25',uvalue='freq1.25') mfreq(6) = widget_button(infq,value='1.5 ',uvalue='freq1.5') mfreq(7) = widget_button(infq,value='1.75',uvalue='freq1.75') mfreq(8) = widget_button(infq,value='2.0 ',uvalue='freq2.0') mfreq(9) = widget_button(infq,value='3.0 ',uvalue='freq3.0') mfreq(10) = widget_button(infq,value='4.0 ',uvalue='freq4.0') mfreq(11) = widget_button(infq,value='5.0 ',uvalue='freq5.0') mfreq(12) = widget_button(infq,value='6.0 ',uvalue='freq6.0') mfreq(13) = widget_button(infq,value='7.0 ',uvalue='freq7.0') mfreq(14) = widget_button(infq,value='8.0 ',uvalue='freq8.0') mfreq(15) = widget_button(infq,value='9.0 ',uvalue='freq9.0') mfreq(16) = widget_button(infq,value='10.0 ',uvalue='freq10.0') mfreq(17) = widget_button(infq,value='12.0 ',uvalue='freq12.0') mfreq(18) = widget_button(infq,value='14.0 ',uvalue='freq14.0') mfreq(19) = widget_button(infq,value='16.0 ',uvalue='freq16.0') mfreq(20) = widget_button(infq,value='18.0 ',uvalue='freq18.0') mfreq(21) = widget_button(infq,value='20.0 ',uvalue='freq20.0') fixed = widget_button(InputFreqBase, $ value='Write Revised Ionogram File',uvalue='write_cdf') fixed = widget_button(InputFreqBase, $ value='Write Amplitude File',uvalue='write_amp') iscan=1 nscan=cw_field(InputFreqBase,title='Number of scan lines in file',value=iscan, $ /return_events,/integer,xsize=4) MarkBase = widget_base(optBase[5],/row) label=widget_label(MarkBase,value='Displayed circle:') fmark = lonarr(5) fmark(0) = cw_field(MarkBase,title=' sweep time(sec)',value='0.000000', $ /noedit,/string,xsize=9) fmark(1) = cw_field(MarkBase,title=' freq',value=0.0, $ /noedit,/float,xsize=5) fmark(2) = cw_field(MarkBase,title=' delay(ms)',value=0.0, $ /noedit,/float,xsize=7) fmark(3) = cw_field(MarkBase,title=' appar range',value=0.0, $ /noedit,/float,xsize=5) fmark(4) = cw_field(MarkBase,title=' amp',value=0, $ /noedit,/integer,xsize=5) ;--------------------------------------------------------- ; base 6 - Color manipulation : events handled by color_eh ; The property sheet will allow the user to change the background ; and foreground colors of the surface. ; optBase[6] = widget_base(optionBase, /column, map=0, $ event_pro='color_eh') colorBase = widget_base(optBase[6], /row) cbase = widget_button(colorBase,value=' Color Image ',/menu) c0btn = widget_button(cBase,value=' Rainbow ',uvalue='rainbow') c1btn = widget_button(cBase,value=' Reverse Rainbow ',uvalue='revrainbow') c2btn = widget_button(cBase, $ value=' Black/White ',uvalue='bwscr') c3btn = widget_button(cBase, $ value=' White/Black ',uvalue='wbscr') c4btn = widget_button(cBase, $ value=' Blue/White ',uvalue='bluescr') c5btn = widget_button(cBase, $ value=' White/Blue ',uvalue='wbluescr') c6btn = widget_button(cBase, $ value=' Green/White ',uvalue='greenscr') c7btn = widget_button(cBase, $ value=' White/Green ',uvalue='wgreenscr') colorBase = widget_base(optBase[6], /row) cn = widget_button(colorBase,value=' Color X ',/menu) c1menu = widget_button(cn,value='White',uvalue='whitex') c2menu = widget_button(cn,value='Black',uvalue='blackx') c3menu = widget_button(cn,value='Red',uvalue='redx') c4menu = widget_button(cn,value='Green',uvalue='greenx') c5menu = widget_button(cn,value='Yellow',uvalue='yellowx') c6menu = widget_button(cn,value='Light Blue',uvalue='lgtblux') c7menu = widget_button(cn,value='purple',uvalue='purplex') ; c8menu = widget_button(cn,value='gray',uvalue='grayx') cn = widget_button(colorBase,value=' Color O ',/menu) c1menu = widget_button(cn,value='White',uvalue='whiteo') c2menu = widget_button(cn,value='Black',uvalue='blacko') c3menu = widget_button(cn,value='Red',uvalue='redo') c4menu = widget_button(cn,value='Green',uvalue='greeno') c5menu = widget_button(cn,value='Yellow',uvalue='yellowo') c6menu = widget_button(cn,value='Light Blue',uvalue='lgtbluo') c7menu = widget_button(cn,value='purple',uvalue='purpleo') ; c8menu = widget_button(cn,value='gray',uvalue='grayo') ;--------------------------------------------------------- ; base 7 - output property : events handled by output_eh ; optBase[7] = widget_base(optionBase, /column, map=0, $ event_pro='output_eh') ; printerRow - row base that will contain the print setup ; and print buttons ; printerRow = widget_base(optBase[7], /row, /frame, space=35) ; printerLabel = widget_label(printerRow, value='Output to Printer: ') ; printerSetupButn = widget_button(printerRow, $ ; value='Printer Setup', uvalue='PrintSetup') ; printerGoButn = widget_button(printerRow, $ ; value='Print', uvalue='PrintGo') ; clipboardRow - row base that contains the button to ; send output to the OS clipboard clipboardRow = widget_base(optBase[7], /row, /frame, space=35) clipboardLabel = widget_label(clipboardRow, value='OS Clipboard Output: ') clipboardGoButton = widget_button(clipboardRow, $ value='Copy Current Display to Clipboard', uvalue='ClipboardGo') ; otherRow - other types of output, image output and VRML otherRow = widget_base(optBase[7], /row, /frame) otherLabel = widget_label(otherRow, value='OutPut to File: ') filetext = widget_text(otherRow,xsize=69,ysize=1, $ /editable, uvalue='gofile') fileDrop = widget_droplist(otherRow, value=outputtypes, $ uvalue = 'fileformat', title = 'file format') fileButn = widget_button(otherRow, value='GO', uvalue='gofile') ;--------------------------------------------------------- ; end of bulletin board ; get the total screen x and y dimensions. ; Use this dims to size the draw area that ; will contain object graphics xdim = 1200 ydim = 500 objectDraw = widget_draw(tlb, $ xsize = xdim, ysize = ydim, $ graphics_level = 2, $ uvalue = 'draw', $ /expose_events, $ /button_events, $ /motion_events) LastBase = widget_base(tlb, /row) lastlabel = widget_label(LastBase, value='OutPut Information: ') lasttext = widget_text(LastBase,xsize=80,ysize=1) widget_control, tlb, /realize ;---------------------------------------------------------- iono = {file_cdf:'', $ files:strarr(500), $ nfiles:-1, $ findex:-1, $ savefile_cdf:'', $ satellite:'', $ stationid:'', $ date_cdf:lonarr(7), $ fixfreq:0l, $ nmark:0l, $ time_mark:dblarr(22), $ freq_mark:dblarr(22), $ time_iono_cdf:dblarr(3000), $ freq_iono_cdf:dblarr(3000), $ freq_iono_orig:dblarr(3000), $ time_range_cdf:dblarr(1000), $ appar_range_cdf:dblarr(1000), $ iono_cdf:bytarr(3000,1000), $ xnum:3000, $ ynum:1000 } tfmark = {mfreq:mfreq, $ nummark:22, $ time_mark:dblarr(22), $ freq_mark:dblarr(22), $ xniono:3000, $ time_iono:dblarr(3000), $ freq_iono:dblarr(3000), $ tfmarkstatus:0, $ tfmarkbadid:0, $ tfmarkbase:0l, $ tfmarkfield:0l } data = { filecdf:'', $ date_cdf:lonarr(7), $ time_iono_data:dblarr(1100), $ freq_iono_data:dblarr(1100), $ time_range_data:dblarr(223), $ appar_range_data:dblarr(223), $ iono_data:bytarr(1100,223), $ xmax:1100l, $ ymax:223l, $ xreset:1100l, $ yreset:223l, $ xcurrent:0l, $ ycurrent:0l, $ fh:0.0 } oView = obj_new('IDLgrView', $ location = [0,0], $ dimension = [0,0], $ viewplane_rect = [-100,-100,1300,350], $ zclip=[1,-1], $ units=0, $ color=[255,255,255]) oModel = obj_new('IDLgrModel') oView -> add,oModel oImage = obj_new('IDLgrImage') oModel -> add,oImage ; set up a model for text object oPickModel = obj_new('IDLgrModel',lighting=0) oXOModel = obj_new('IDLgrModel',lighting=0) oPalette = obj_new('IDLgrPalette') oPalette -> loadct,13 ; rainbow color oImage -> setproperty,palette=oPalette oFontL = obj_new('IDLgrFont', $ 'Helvetica', $ size=12 ) oFont = obj_new('IDLgrFont', $ ; 'Helvetica*Bold', $ 'Helvetica', $ size=14 ) ; retrieve the object window ID from the draw area ID widget_control,objectDraw, get_value=oWindow ; render the graphics in the draw widget oWindow -> Draw, oView ; create the default printer object for the application oPrinter = obj_new('IDLgrPrinter', $ /landscape, $ palette=oPalette) ; set up the clipboard object oClipboard = obj_new('IDLgrClipboard') ;------------------------------------------------------------------ oViewTrace = obj_new('IDLgrView', $ location = [0,0], $ dimension = [0,0], $ viewplane_rect = [-0.75,-0.90,1.5,1.5], $ zclip=[1,-1], $ units=0, $ color=[255,255,255]) oModelTrace = obj_new('IDLgrModel') oViewTrace -> add,oModelTrace oViewNe = obj_new('IDLgrView', $ location = [0,0], $ dimension = [0,0], $ viewplane_rect = [-0.75,-0.90,1.5,1.5], $ zclip=[1,-1], $ units=0, $ color=[255,255,255]) oModelNe = obj_new('IDLgrModel') oViewNe -> add,oModelNe oViewFn = obj_new('IDLgrView', $ location = [0,0], $ dimension = [0,0], $ viewplane_rect = [-0.75,-0.90,1.5,1.5], $ zclip=[1,-1], $ units=0, $ color=[255,255,255]) oModelFn = obj_new('IDLgrModel') oViewFn -> add,oModelFn oViewNe3 = obj_new('IDLgrView', $ location = [0,0], $ dimension = [0,0], $ viewplane_rect = [-0.75,-0.90,1.5,1.5], $ zclip=[1,-1], $ units=0, $ color=[255,255,255]) oModelNe3 = obj_new('IDLgrModel') oViewNe3 -> add,oModelNe3 oViewNem = obj_new('IDLgrView', $ location = [0,0], $ dimension = [0,0], $ viewplane_rect = [-0.75,-0.90,1.5,1.5], $ zclip=[1,-1], $ units=0, $ color=[255,255,255]) oModelNem = obj_new('IDLgrModel') oViewNem -> add,oModelNem ;------------------------------------------------------------------ olpView = obj_new('IDLgrView', $ location = [0,0], $ dimension = [0,0], $ viewplane_rect = [-0.6,-0.9,1.2,1.5], $ zclip=[1,-1], $ units=0, $ color=[255,255,255]) olpModel = obj_new('IDLgrModel') olposModel = obj_new('IDLgrModel') oImgModel = obj_new('IDLgrModel') olpPickModel = obj_new('IDLgrModel',lighting=0) oPlot_line = obj_new('IDLgrPlot') oAmpText = obj_new('IDLgrText') ; retrieve the object window ID from the draw area ID widget_control,objLinePlot, get_value=olpWindow ; render the graphics in the draw widget olpWindow -> Draw, olpView ;------------------------------------------------------------------ ; create the data structure obj = { oWindow:oWindow, $ oView:oView, $ oModel:oModel, $ oImage:oImage, $ oFont:oFont, $ oFontL:oFontL, $ oAmpText:oAmpText, $ oPrinter:oPrinter, $ oClipboard:oClipboard, $ oXOModel:oXOModel, $ oPickModel:oPickModel, $ oPalette:oPalette } objlp = { olpWindow:olpWindow, $ olpView:olpView, $ olpModel:olpModel, $ olposModel:olposModel, $ objLinePlot:objLinePlot, $ oImgModel:oImgModel, $ olpPickModel:olpPickModel, $ oPlot_line:oPlot_line, $ xmotion:0, $ ymotion:0, $ fmark:fmark, $ rxmotion:0, $ rymotion:0, $ valamp:dblarr(6), $ amp:0, $ counts:0l, $ delayms:dblarr(1000), $ apparant:dblarr(1000), $ amparr:intarr(1000), $ power:dblarr(1000), $ nscan:nscan, $ olpstatus:0 } objcdf = { cdffield:cdffield, $ savetime0:0.0, $ savetime1:0.0, $ saverange0:0.0, $ saverange1:0.0, $ time0current:0.0, $ time1current:0.0, $ range0current:0.0, $ range1current:0.0 } output = { outputtypes:outputtypes, $ fileText:fileText, $ format:outputtypes[0] } sheet = { isisProps:isisProps, $ helpstatus:0, $ helpbadid:0, $ helpbase:0l, $ optBase:optBase, $ currentPropSheet:0, $ numbases:numbases, $ xdim:xdim, $ ydim:ydim } oplotstatus=intarr(5) oplotstatus(*) = 0 oplotbadid = lonarr(5) oplotbadid(*) = 0 oplotbase = lonarr(5) oplotbase(*) = 0l nepltstatus=intarr(5) nepltstatus(*) = 0 nepltbadid = lonarr(5) nepltbadid(*) = 0 nepltbase = lonarr(5) nepltbase(*) = 0l fnpltstatus=intarr(5) fnpltstatus(*) = 0 fnpltbadid = lonarr(5) fnpltbadid(*) = 0 fnpltbase = lonarr(5) fnpltbase(*) = 0l ColorX = [255,255,255] ColorO = [255,255,255] tra = {trafile:'', $ outfile:tratext, $ itracex:0, $ ntracex:-1, $ tracex:dblarr(100,6), $ ampx:intarr(100), $ oTracesX:objarr(100), $ ColorX:ColorX, $ itraceo:0, $ ntraceo:-1, $ traceo:dblarr(100,6), $ ampo:intarr(100), $ oTracesO:objarr(100), $ ColorO:ColorO, $ maxtraces:100, $ tracexo:0, $ iicode:0, $ warn:0, $ xionomin:0.0d, $ oplotstatus:oplotstatus, $ oplotbadid:oplotbadid, $ oplotbase:oplotbase, $ opfield:lonarr(6), $ oplotdraw:lonarr(2), $ nepltstatus:oplotstatus, $ nepltbadid:oplotbadid, $ nepltbase:oplotbase, $ nefield:lonarr(6), $ nepltdraw:lonarr(2), $ fnpltstatus:oplotstatus, $ fnpltbadid:oplotbadid, $ fnpltbase:oplotbase, $ fnfield:lonarr(6), $ fnpltdraw:lonarr(2), $ ne3pltstatus:0, $ ne3pltbadid:0, $ ne3pltbase:0l, $ ne3field:lonarr(6), $ ne3pltdraw:lonarr(2), $ nempltstatus:0, $ nempltbadid:0, $ nempltbase:0l, $ nemfield:lonarr(6), $ nempltdraw:lonarr(2), $ infile_ne:strarr(3), $ infile_nem:strarr(100), $ nemfiles:0 } objtra = {oViewTrace:oViewTrace, $ oModelTrace:oModelTrace, $ oViewNe:oViewNe, $ oModelNe:oModelNe, $ oViewFn:oViewFn, $ oModelFn:oModelFn, $ oViewNe3:oViewNe3, $ oModelNe3:oModelNe3, $ oViewNem:oViewNem, $ oModelNem:oModelNem, $ oplotstatus:intarr(5), $ oplotbadid:lonarr(5), $ oplotbase:lonarr(5), $ opfield:lonarr(6), $ oplotdraw:lonarr(2), $ nepltstatus:intarr(5), $ nepltbadid:lonarr(5), $ nepltbase:lonarr(5), $ nefield:lonarr(6), $ nepltdraw:lonarr(2), $ fnpltstatus:oplotstatus, $ fnpltbadid:oplotbadid, $ fnpltbase:oplotbase, $ fnfield:lonarr(6), $ fnpltdraw:lonarr(2), $ ne3pltstatus:0, $ ne3pltbadid:0, $ ne3pltbase:0l, $ ne3field:lonarr(6), $ ne3pltdraw:lonarr(2), $ nempltstatus:0, $ nempltbadid:0, $ nempltbase:0l, $ nemfield:lonarr(6), $ nempltdraw:lonarr(2), $ infile_ne:strarr(3), $ infile_nem:strarr(100), $ nemfiles:0 } res = {resfile:'', $ freqclick:0.0, $ fhclick:0.0, $ outfile:restext, $ setbutton_fh:setbutton_fh, $ outclick:outclick } wmapline=' YR DAY UT LMT LAT LONG HGT ' + $ 'GMLTM GMLAT GMLONG INVLAT FH DIP CHI SUN L' worldmap = { line1:wmapline, $ line2:'' } state = { obj:obj, $ sheet:sheet, $ load:0, $ frange1:frange1, $ frange2:frange2, $ motion:motion, $ lasttext:lasttext, $ output:output, $ iono:iono, $ tfmark:tfmark, $ data:data, $ worldmap:worldmap, $ tra:tra, $ objtra:objtra, $ objlp:objlp, $ objcdf:objcdf, $ res:res } ; move the state structure to a heap variable referenced by ; the varaible stateptr ; stateptr = ptr_new(state, /no_copy) ; put the reference into the top-level base ; widget_control,tlb, set_uvalue = stateptr widget_control,tlb, set_uvalue = state ; call xmanager to start up the event loop, use NO_BLOCK to ; return an active command line xmanager,'isisgui',tlb return end