;+ ; ; file HXISWIDGET.PRO -- includes HXISWIDG_EV and HXISWIDGET ; ;============================================================================ ; ; NAME: ; HXISWIDG_EV ; ; PURPOSE: ; The event handler for HXISWIDGET. ; ; CATEGORY: ; HXIS display ; ; CALLING SEQUENCE: ; HXISWIDG_EV, EVENT ; ; CALLED BY: ; HXISWIDGET (through the XMANAGER) ; ; CALLS TO: ; XPALETTE, XLOADCT, WINUP, HXISTIME, HXISDURALST, RESPOND_WIDG, ; HXISPOINT, HXISAREA, HXISREAD, HXISSELECT, HXISCPLOT, HXISTPLOT, ; HXISXPLOT, HXISTSPEC, HXISHISTO, HXISLIFE, HXISSURF, HXISLOGO ; ; INPUTS: ; none explicit, only through commons ; ; OPTIONAL INPUTS: ; none ; ; OUTPUTS: ; none explicit, only through commons ; ; OPTIONAL OUTPUTS: ; none ; ; COMMON BLOCKS: ; hxisarea.common ; hxiscolor.common ; hxisdata_info.common ; hxisgrid.common ; hxispass.common ; hxispoint.common ; hxiswidget.common ; hxiswindow.common ; ; SIDE EFFECTS: ; none ; ; RESTRICTIONS: ; none ; ; PROCEDURE: ; Recieve events for the XMANAGER and process. ; ; MODIFICATION HISTORY: ; DEC-1992, Elaine Einfalt (HSTX) - converted to widgets ;- pro hxiswidg_ev, event @hxisarea.common @hxiscolor.common @hxisdata_info.common @hxisgrid.common @hxispass.common @hxispoint.common @hxiswidget.common @hxiswindow.common common colors, r_orig, g_orig, b_orig, r_curr, g_curr, b_curr common localhxis, run_program widget_control, event.id, get_uvalue=input ; user's name for widget ;w widget_control, pass_partscol1, sensitive = 0 ; have event so wait until ;w ; done processing it error = 0 type = strmid(tag_names(event, /structure_name), 7, 4) ; type of widget case type of ; (button, list...) 'BUTT' : begin if event.select eq 0 then return ; skip button turn offs case input of ; which button was selected 'KILLWIDG' : begin widget_control, event.top, /destroy ; kill top widget return end 'NOTHING' : return ; just an escape 'HELP' : return ; to get help 'RESTABLE': begin r_curr=line_r & g_curr=line_g & b_curr=line_b tvlct, r_curr, g_curr, b_curr return ; instant gratification end 'IDLPALET': begin xpalette return ; instant gratification end 'IDLXLDCT': begin xloadct return ; instant gratification end ; ; Make a hard copy now ; 'HARDBW' : begin info.silent=1 info.hard=1 ; once printed reset to 0 info.colo=0 ; black and white end 'HARDCOL' : begin info.silent=1 info.hard=1 ; once printed reset to 0 info.colo=1 ; color printer end 'DELWIN' : begin widget_control, pass_partscol1, sensitive = 0 ; wait ; widget to display active windows, and delete winup, group_leader=event.top, message=message if n_elements(message) ne 0 then $ widget_control, comment, set_value=message widget_control, pass_partscol1, sensitive=1 return end 'REUSE' : begin reuse = 1 return ; instant gratification end 'NOREUSE' : begin reuse = 0 return ; instant gratification end 'IMAGEMAP' : begin ; image mapping widget_control, pass_disp_lab, $ set_value='Image mapping (cplot)' info.imgtv=1 run_program = 'CPLOT' end 'CONDEF' : begin ;contour (default levels) widget_control, pass_disp_lab, $ set_value='Contour, default levels (cplot)' info.imgtv=0 info.conman = 0 run_program = 'CPLOT' end 'CONMAN' : begin ; contour (manual levels) widget_control, pass_disp_lab, $ set_value='Contour, manual levels (cplot)' info.imgtv=0 info.conman = 1 run_program = 'CPLOT' end 'TPLOT' : begin widget_control, pass_disp_lab, $ set_value='Plot time profile, sum pixels (tplot)' run_program = 'TPLOT' end 'XPLOT' : begin widget_control, pass_disp_lab, $ set_value='Plot time profile, single pixel (xplot)' run_program = 'XPLOT' end 'TSPEC' : begin widget_control, pass_disp_lab, $ set_value='Plot count rate vs energy (tspec)' run_program = 'TSPEC' end 'DEMO' : begin widget_control, pass_disp_lab, set_value='DEMO' run_program = 'DEMO' end 'FINEFOV' : begin widget_control, pass_FOV_lab, $ set_value='Fine Field of View (160 arcsec)' INFO.CFOV = 1 field = 0 return end 'CORSEFOV' : begin widget_control, pass_FOV_lab, $ set_value='Coarse Field of View (384 arcsec)' INFO.CFOV = 2 field = 1 return end 'BOTHFOV' : begin widget_control, pass_FOV_lab, $ set_value='Overlay Fine and Coarse FOV' INFO.CFOV = 3 field = 1 return end 'SEPARFOV' : begin widget_control, pass_FOV_lab, $ set_value='Separate Coarse and Fine FOV' INFO.CFOV = 4 return end ; ; Select a new start time ; 'TIMRAN' : begin widget_control, pass_partscol1, sensitive = 0 ; wait hxistime, group=event.top widget_control, pass_partscol1, sensitive = 1 return end ; ; Select duration button ; 'DURAT' : begin widget_control, pass_partscol1, sensitive = 0 ; wait hxisduralst, group_leader=event.top widget_control, pass_partscol1, sensitive = 1 return end ; ; Program interaction request ; 'SILENT' : begin info.silent = 1 ; run with defaults widget_control, pass_inter, set_value='OFF' return end 'VERBOSE' : begin info.silent = 0 ; ask user lots of questions widget_control, pass_inter, set_value='ON' return end ; ; The "More program options" pull down menu. ; ; ; Background subtraction ; 'BACK_ON' : begin ; background subtraction turned on info.back = 1 info.mode(0) = 0 ; recalc CPLOT widget_control, pass_back, set_value='ON' return end 'BACK_OFF' : begin ; background subtraction turned off info.back = 0 info.mode(0) = 0 ; recalc CPLOT widget_control, pass_back, set_value='OFF' return end ; ; Dead time correction buttons ; 'DEAD_ON' : begin ; dead time correction turned on info.dead = 1 info.mode(0) = 0 ; recalc CPLOT widget_control, pass_dead, set_value='ON' run_program = 'LIFE' end 'DEAD_OFF' : begin ; dead time correction turned off info.dead = 0 info.mode(0) = 0 ; recalc CPLOT widget_control, pass_dead, set_value='OFF' return end ; ; Derivative request for TPLOT ; 'DERIV_ON' : begin info.deriv = 1 widget_control, pass_deriv, set_value='ON' return end 'DERIV_OFF' : begin info.deriv = 0 widget_control, pass_deriv, set_value='OFF' return end ; ; Heliographic grid options ; 'GRID' : begin info.grid = 1 ; do helio grid (default) widget_control, pass_grid, set_value=grid_type(oldgrid) return end 'NOGRID' : begin info.grid = 0 ; no helio grid widget_control, pass_grid, set_value='OFF' return end ; ; Display a histogram right now ; 'HISTO' : begin run_program = 'HIST' end ; ; Set the scaling ; 'LINON' : begin ; info.scal = 0 ; linear scaling widget_control, pass_scal, set_value='Linear' return end 'LOGON' : begin info.scal = 1 ; logarithmic scaling widget_control, pass_scal, set_value='Logarithmic' return end ; ; Select the images and bands ; 'MAPPING' : begin hxisselect, error=error return end ; ; Select the number of spectra to plot ; 'NSPEC' : begin nspec = respond_widg(message=['Select the number '+$ 'of evenly spaced spectra', $ 'between start and end time',$ 'Current number of spectra is ' + $ strtrim(info.nspec,2)],$ buttons=string(indgen(10)+1), /column) wait,1 ; let xmanager catch up info.nspec = nspec+1 widget_control, pass_nspec, set_value=strtrim(info.nspec,2) wshow, current_window return end ; ; Display a surface plot right now ; 'SURF' : begin run_program = 'SURF' end ; ; HXIS-SMM pointing offset ; 'OFFSET' : begin if not(info.offset) then info.offset = 1 else return widget_control, pass_partscol1, sensitive = 0 ; wait hxispoint widget_control, pass_partscol1, sensitive = 1 return end 'NO_OFFSET' : begin if info.offset then info.offset = 0 else return widget_control, pass_partscol1, sensitive = 0 ; wait hxispoint widget_control, pass_partscol1, sensitive = 1 return end ; ; Pixel selection options ; 'AREA' : begin widget_control, pass_partscol1, sensitive = 0 ; wait hxisarea, error=error if error then pixels = -1 widget_control, pass_partscol1, sensitive=1 info.mode(0)=0 ; recalculate CPLOT return end 'AREA_CLEAN' : begin pixels = -1 info.mode(0)=0 ; recalculate CPLOT return end ; ; Process with current settings ; 'PROCESS' : ; simply fall throught to correct program call. else : widget_control, comment, $ set_value='Invalid button ' + input, /append endcase end 'TEXT' : begin widget_control, event.id, get_value=value, set_value='' if value(0) eq '' then return ; nothing entered case input of 'MYSIGMA' : begin on_ioerror, BADERROR select = float(value(0)) on_ioerror, null INFO.SIG = select^2 INFO.MODE(0) = 0 ; Recalculate CPLOT widget_control, pass_sigma_id, $ set_value=strtrim(info.sig,2) return end 'PLOTAVE' : begin on_ioerror, BADERROR select = float(value(0)) on_ioerror, null if select lt 1 then widget_control, comment, $ set_value='Average ' + 'set to 0', /append info.tover = 0 > select INFO.MODE(0) = 0 ; Recalculate CPLOT widget_control, pass_ave_id, $ set_value=strtrim(info.tover,2) return end endcase end 'LIST' : begin ; ; A file was selected from the list widget ; widget_control, pass_partscol1, sensitive=0 value = input(event.index) ; item selected from list widget_control, comment, set_value= 'Processing...'+ value, /append stat = hxisread( value(0) ) if stat then begin ; rejected during read widget_control, pass_partscol1, sensitive = 1 ; next file return endif run_program = 'CPLOT' ; defaults to image for first pass end else: widget_control, comment, set_value= 'Invalid type of widget '+$ type, /append endcase if not error then begin ; ; Since we made it to here we need to run one of the HXIS routines ; widget_control, pass_partscol1, sensitive=0 if not(info.silent) and $ ((run_program eq 'CPLOT') or (run_program eq 'TPLOT') or $ (run_program eq 'XPLOT')) then hxisselect, error=error if not error then case run_program of 'CPLOT' : hxiscplot 'TPLOT' : hxistplot 'XPLOT' : hxisxplot 'TSPEC' : hxistspec 'HIST' : hxishisto 'LIFE' : hxislife 'SURF' : hxissurf 'DEMO' : hxislogo, filename = 'HXIS_CAT:HXLOGO.IMG' else : endcase endif widget_control, pass_partsrow2, sensitive=1 ; now have options BADERROR: widget_control, pass_partscol1, sensitive = 1 ; ready for next event return end ;============================================================================ ;+ ; ; ; NAME: ; HXISWIDGET ; ; PURPOSE: ; The event handler for HXISWIDGET. ; ; CATEGORY: ; HXIS display ; ; CALLING SEQUENCE: ; HXISWIDGWIDGET, GROUP_LEADER=GROUP ; ; CALLED BY: ; HXISWIDGET (through the XMANAGER) ; ; CALLS TO: ; OPSYS_LGCL, ACKNOWLEDGE, HXISWIDG_EV (through XMANAGER) ; ; INPUTS: ; GROUP_LEADER: is the widget id of a calling widget routine ; This will clean up widgets if caller is killed ; and through common ; ; OPTIONAL INPUTS: ; none ; ; OUTPUTS: ; none explicit, only through commons ; ; OPTIONAL OUTPUTS: ; none ; ; COMMON BLOCKS: ; hxisdata_info.common ; hxisgrid.common ; hxispass.common ; hxispoint.common ; hxiswidget.common ; localhxis to remeber current program request in event handler ; ; SIDE EFFECTS: ; Creates a widget ; ; RESTRICTIONS: ; none ; ; PROCEDURE: ; Create the main level HXIS display options menu. ; ; MODIFICATION HISTORY: ; DEC-1992, Elaine Einfalt (HSTX) ; ;- pro hxiswidget, group_leader=group @hxisdata_info.common @hxisgrid.common @hxispass.common @hxispoint.common @hxiswidget.common common localhxis, run_program run_program = 'CPLOT' ; default to image for first pass ; ; Define the widget display for HXIS ; ; ; first check if logical/environment name is assigned, if not prompt user ; opsys_lgcl, part1='HXIS', discern='_', part2='DATA', $ separate=1, dataplace=dataplace, ok=ok, $ instructme=['Enter your designation for the data '+$ 'location, then return',$ ' VMS ex: NEWMAX::HXIS$DATA, ' + $ '$1$DIA4:[HXIS]',$ ' UNIX ex: $HXIS_DATA, /usr/users/Data'] if not(ok) then begin ; error occurred acknowledge, message=(['Progam is returning', $ 'because of cancel']) return ; no place given to look for the data endif ; ; set up HXIS widget display ; mainbase = widget_base(title='HXIS Workbench Version 1.0', /column) pass_base = widget_base(mainbase, /column) ; control buttons controls = widget_base(pass_base, /row, xpad=40, space=30) canit = widget_button(controls, value='QUIT', uvalue='KILLWIDG') help = widget_button(controls, value='HELP', uvalue='HELP') xpdmenu, ['"Adjust color palette" {', $ '"Use HXIS color table" RESTABLE', $ '"Use IDL Palette to create table (XPALETTE)" IDLPALET', $ '"Use User''s Library color tables (XLOADCT)" IDLXLDCT', $ '"EXIT" NOTHING', '}' ], controls xpdmenu, ['"Hardcopy" {', $ '"Black and white print" HARDBW', $ '"Color print" HARDCOL',$ '"EXIT" NOTHING', '}' ], controls xpdmenu, ['"Windowing" {', $ '"Delete windows" DELWIN', $ '"Reuse display window" REUSE',$ '"New display windows" NOREUSE', '}' ], controls parts = widget_base(pass_base, /row, space=20) pass_partscol1 = widget_base(parts, /column) ; ; The list of data files ; pass_partsrow1 = widget_base(pass_partscol1, /column, /frame) lab = widget_label(pass_partsrow1, value='Select a data file for display') ; ; Get filenames from given location ; s0 = findfile(dataplace + '*.*' , count=count) if count ne 0 then list = s0 $ else list = 'No data files found at ' + dataplace scroll_list = widget_list(pass_partsrow1, ysize=15, value=list, uvalue=list) ; ; All the options the user may use to modify the data ; pass_partsrow2 = widget_base(pass_partscol1, /column, space=10) lab = widget_label(pass_partsrow2, value=' ') lab = widget_label(pass_partsrow2, value='Select the desired options ' + $ 'from the possibilities below') display = widget_base(pass_partsrow2, /frame, /row) xpdmenu, ['"other" {', $ '" Image mapping (cplot)" IMAGEMAP', $ '" Contour, default levels (cplot)" CONDEF', $ '" Contour, manual levels (cplot)" CONMAN', $ '" Plot time profile, sum pixels (tplot)" TPLOT', $ '" Plot time profile, single pixel (xplot)" XPLOT', $ '" Plot count rate vs energy (tspec)" TSPEC', $ '" demo" DEMO', '}' ], display pass_disp_lab = widget_label(display, value='Image mapping' ) fields = widget_base(pass_partsrow2, /frame, /row) xpdmenu, ['\other\ {', $ '\ Fine Field of View\ FINEFOV', $ '\ Coarse Field of View \ CORSEFOV', $ '\ Overlay Fine and Coarse \ BOTHFOV', $ '\ Separate Coarse and Fine \ SEPARFOV', '}' $ ], fields pass_FOV_lab = widget_label(fields, value='Fine Field of View ' + $ '(160 arcsec)') timing = widget_base(pass_partsrow2, /column, /frame) lab = widget_label(timing, value='Modify timing by ' + $ 'selecting the appropriate button.') timethings = widget_base(timing, /row, space=25, xpad=20) timeran = widget_button(timethings, value=' Select Start Time ', $ uvalue='TIMRAN') dura = widget_button(timethings, value=' Select Duration ', $ uvalue='DURAT') smooth = widget_base(pass_partsrow2, /row, space=20) sig = widget_base(smooth, /column, /frame) lab = widget_label(sig, value='Enter sigma and RETURN') sigma = widget_text(sig, /editable, ysize=1, uvalue='MYSIGMA' ) ave = widget_base(smooth, /column, /frame) lab = widget_label(ave, value='Enter average (sec)') average = widget_text(ave, /editable, ysize=1, uvalue='PLOTAVE' ) some_more = widget_base(pass_partsrow2, /row, space=15) xpdmenu, ['"Program interaction" {', $ '"Run silent" SILENT', $ '"Prompt for user interaction" VERBOSE', '}' ], some_more xpdmenu, ['"More program options" {', $ '"Background subtraction options" {', $ '"Background subtracted" BACK_ON', $ '"No Background subtracted" BACK_OFF', '}', $ '"Dead time correction options" {', $ '"Dead time correction" DEAD_ON', $ '"No Dead time correction" DEAD_OFF', '}', $ '"Derivative for time series area (tplot) " {', $ '"Plot derivatives of function values" DERIV_ON', $ '"Plot function values without derivatives" DERIV_OFF', '}', $ '"Heliograghic grid options" {', $ '"Overlay heliographic grid" GRID', $ '"No heliographic grid" NOGRID', '}', $ '"Histogram of one image" HISTO', $ '"Scaling option" {', $ '"Linear scaling" LINON', $ '"Logarithmic scaling" LOGON', '}', $ '"Select images" MAPPING', $ '"Spectra number option" NSPEC', $ '"Surface option" SURF', $ '"Pointing offset options" {', $ '"Estimate HXIS-SMM offset" OFFSET', $ '"No HXIS-SMM offset" NO_OFFSET', '}', $ '"Pixel selection options" {', $ '"Choose pixels" AREA', $ '"Clear pixels" AREA_CLEAN', '}', $ '"Process with current settings" PROCESS', $ '}' ], some_more ; ; Information about the current program settings ; pass_partscol2 = widget_base(parts, /column, /frame) lab = widget_label(pass_partscol2, value='The program parameters'+$ ' listed below, may not yet be active.') ; ; The time ranges will be displayed once they are provided ; tot_time = widget_base(pass_partscol2, /row) lab = widget_label(tot_time, value='File time range : ') pass_file_start = widget_label(tot_time, value='000:00:00:00.000') lab = widget_label(tot_time, value=' to ') pass_file_end = widget_label(tot_time, value='000:00:00:00.000') times = widget_base(pass_partscol2, /row) timlab = widget_base(times, /column) lab = widget_label(timlab, value='Current Start time') lab = widget_label(timlab, value='Current End time') colon = widget_base(times, /column) lab = widget_label(colon, value=' : ') lab = widget_label(colon, value=' : ') thetime= widget_base(times, /column) pass_start_time = widget_label(thetime, value='000:00:00:00.000 ') pass_end_time = widget_label(thetime, value='000:00:00:00.000 ') point = widget_base(pass_partscol2, /row) s_c = widget_base(point, /column) lab = widget_label(s_c, value='Spacecraft :') spoint = widget_base(s_c, /row) sval = widget_base(spoint, /column) lab = widget_label(sval, value=' Pitch') lab = widget_label(sval, value=' Yaw' ) lab = widget_label(sval, value=' Roll') colon = widget_base(spoint, /column) lab = widget_label(colon, value=' : ') lab = widget_label(colon, value=' : ') lab = widget_label(colon, value=' : ') theval = widget_base(spoint, /column) pass_spitch_id = widget_label(theval, value=' 0000.0') pass_syaw_id = widget_label(theval, value=' 0000.0') pass_sroll_id = widget_label(theval, value=' 0000.0') arcsec = widget_base(spoint, /column) lab = widget_label(arcsec, value='arcsec') lab = widget_label(arcsec, value='arcsec') lab = widget_label(arcsec, value='degree') h_x = widget_base(point, /column) lab = widget_label(h_x, value='HXIS pointing:') hpoint = widget_base(h_x, /row) hval = widget_base(hpoint, /column) lab = widget_label(hval, value=' Pitch') lab = widget_label(hval, value=' Yaw' ) colon = widget_base(hpoint, /column) lab = widget_label(colon, value=' : ') lab = widget_label(colon, value=' : ') theval = widget_base(hpoint, /column) pass_hpitch_id = widget_label(theval, value=' 0000.0') pass_hyaw_id = widget_label(theval, value=' 0000.0') arcsec = widget_base(hpoint, /column) lab = widget_label(arcsec, value='arcsec') lab = widget_label(arcsec, value='arcsec') ; ; The images displayed, their type and bands ; pass_img_typ = lonarr(6) ; image choice (intensity, T...) pass_img_math = lonarr(6) ; function choice (ratio, sum) pass_img_band = lonarr(6) ; band choices imout = widget_base(pass_partscol2, /row) imcol1 = widget_base(imout, /column) img1 = widget_base(imcol1, /column, /frame) lab = widget_label(img1, value='Image in Position 1') pass_img_typ(0) = widget_label(img1, value='none ') pass_img_math(0) = widget_label(img1, value=' ') pass_img_band(0) = widget_label(img1, value=' ') img4 = widget_base(imcol1, /column, /frame) lab = widget_label(img4, value='Image in Position 4') pass_img_typ(3) = widget_label(img4, value='none ') pass_img_math(3) = widget_label(img4, value=' ') pass_img_band(3) = widget_label(img4, value=' ') imcol2 = widget_base(imout, /column) img2 = widget_base(imcol2, /column, /frame) lab = widget_label(img2, value='Image in Position 2') pass_img_typ(1) = widget_label(img2, value='none ') pass_img_math(1) = widget_label(img2, value=' ') pass_img_band(1) = widget_label(img2, value=' ') img5 = widget_base(imcol2, /column, /frame) lab = widget_label(img5, value='Image in Position 5') pass_img_typ(4) = widget_label(img5, value='none ') pass_img_math(4) = widget_label(img5, value=' ') pass_img_band(4) = widget_label(img5, value=' ') imcol3 = widget_base(imout, /column) img3 = widget_base(imcol3, /column, /frame) lab = widget_label(img3, value='Image in Position 3') pass_img_typ(2) = widget_label(img3, value='none ') pass_img_math(2) = widget_label(img3, value=' ') pass_img_band(2) = widget_label(img3, value=' ') img6 = widget_base(imcol3, /column, /frame) lab = widget_label(img6, value='Image in Position 6') pass_img_typ(5) = widget_label(img6, value='none ') pass_img_math(5) = widget_label(img6, value=' ') pass_img_band(5) = widget_label(img6, value=' ') ; ; information about how the options are set. ; subrow1 = widget_base(pass_partscol2, /row, space=15) subcol1 = widget_base(subrow1, /column) odsig = widget_base(subcol1, /row) lab = widget_label(odsig, value='Sigma^2 : ') pass_sigma_id = widget_label(odsig, value=strtrim(info.sig,2) ) odave = widget_base(subcol1, /row) lab = widget_label(odave, value='Average : ') pass_ave_id = widget_label(odave, value=strtrim(info.def_ave,2) ) lab =widget_label(odave, value=' sec') backstat = widget_base(subcol1, /row) lab = widget_label(backstat, value='Background subtraction :') pass_back = widget_label(backstat, value='OFF') deadstat = widget_base(subcol1, /row) lab = widget_label(deadstat, value='Dead time correction : ') pass_dead = widget_label(deadstat, value='OFF') derivstat = widget_base(subcol1, /row) lab = widget_label(derivstat, value='Derivative (tplot) : ') pass_deriv = widget_label(derivstat, value='OFF') subcol2 = widget_base(subrow1, /column) imgnumbers = widget_base(subcol2, /row) lab = widget_label(imgnumbers, value='Images : ') pass_number_fst = widget_label(imgnumbers, value='0000') lab =widget_label(imgnumbers, value=' to ') pass_number_lst = widget_label(imgnumbers, value='0000') gridstat = widget_base(subcol2, /row) lab = widget_label(gridstat, value='Grid : ') pass_grid = widget_label(gridstat, value=grid_type(oldgrid)) scalstat = widget_base(subcol2, /row) lab = widget_label(scalstat, value='Scale : ') pass_scal = widget_label(scalstat, value='Linear') interstat = widget_base(subcol2, /row) lab = widget_label(interstat, value='Interaction : ') pass_inter = widget_label(interstat, value=' OFF') specstat = widget_base(subcol2, /row) lab = widget_label(specstat, value='Number of Spectra : ') pass_nspec = widget_label(specstat, value=strtrim(info.nspec,2) ) surfstat = widget_base(subcol2, /row) lab = widget_label(surfstat, value='Surface angle: ') pass_surf_angle = widget_label(surfstat, value=strtrim(info.angle,2) ) ; create a message window comment = widget_text(mainbase, /scroll, ysize=5) widget_control, mainbase, /realize widget_control, pass_partsrow2, sensitive=0 ; no options yet xmanager, 'hxiswidg', mainbase, event_handler='hxiswidg_ev', group_leader=group return end