;+ ; NAME: ; qRemoteView ; PURPOSE: ; Widget: qRemoteView ; CATEGORY: ; Widgets ; CALLING SEQUENCE: ; qRemoteView, filter, image=image, group=group, img_offset=img_offset, wid_base=wid_base ; INPUTS: ; filter scalar; type: string; default: *.* ; file name filter for file selection ; If the filter does not contain a wildcard (i.e. is the ; name of a single file) then an attempt is made to load ; the image from the file. ; OPTIONAL INPUT PARAMETERS: ; group=group scalar; type: long integer ; group leader passed to XMANAGER ; image=image array[n,m]; type: any ; image array to be displayed. If specified this image ; is displayed, overriding the filter specification. ; wid_base=wid_base ; scalar; type: long integer ; if this is the widget ID of a valid widget, then ; qImage assumes that it is an existing instance of ; itself and will use it to display the image ; Otherwise qImage will create a new instance. ; OUTPUTS: ; (to widget) ; CALLS: ; qImage_Send, qImage_Pick, qImage_TrackPeak, qImage_Gain, qImage_cw ; qImage_FileInfo, qImage_Clean, qImage_Save, qImage_Magnify, InitVar ; TimeSystem, big_eph, jpl_body, TimeGet ; PROCEDURE: ; The state structure is as follows: ; ; state = {STATE_QSKYIMAGE, $ ; wid_base : 0L, $ ; wid_done : 0L, $ ; wid_calc : 0L, $ ; wid_matrix : 0L, $ Button widget to select data file with 3D matrices ; User value: pointer array for all loaded data cubes ; wid_filter : 0L, $ ; wid_info : 0L, $ ; wid_resol : 0L, $ ; ; wid_list : 0L, $ Droplist widget: descriptors for all loaded data cubes ; User value: copy of all descriptors (apparently there ; is no easy way to get this directly from the value) ; wid_histo : 0L, $ Button widget to make histogram for current data cube ; wid_tlabel : 0L, $ Label widget ; User value: state.wid_uttime or state.wid_rotation ; wid_clabel : 0L, $ Label widget ; User value: state.wid_ecliptic or state.wid_heliographic ; wid_tmatrix : 0L, $ CW_FIELD widget: start time of 3D matrix ; User value: format for display of Carrington variable ; State information ; ; wid_tdisplay : 0L, $ CW_FIELD widget: display time ; wid_loc : lonarr(3), $ ; wid_dir : lonarr(2), $ ; wid_fov : 0L, $ ; wid_tilt : 0L, $ ; ; wid_uttime : 0L, $ ; wid_rotation : 0L, $ ; ; wid_heliographic: 0L, $ ; wid_ecliptic : 0L $ ; } ; MODIFICATION HISTORY: ; MAY-2000, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ;- PRO qRemoteView_Event, event @compile_opt.pro ; On error, return to caller ; event.top should be ID of the qImage top level widget ; qImage_cw should make sure to set the proper ID before passing an event on. ; Get the state structure from the top level widget widget_control, event.top, get_uvalue=state, /no_copy CASE event.id OF ; ID of widget that generated the message ; Intercepts WIDGET_KILL_REQUEST from top level widget event.top : qRemoteView_Kill, state, event state.wid_done : qRemoteView_Kill, state, event state.wid_matrix : qRemoteView_Pick, state state.wid_filter : qRemoteView_Pick, state, event state.wid_info : qRemoteView_FileInfo, state state.wid_calc : qRemoteView_Calculate, state, /getcube state.wid_output : ; No action needed (yet) state.wid_show : qRemoteView_Calculate, state state.wid_uttime : qRemoteView_ChangeTimes, state, event state.wid_rotation : qRemoteView_ChangeTimes, state, event state.wid_ecliptic : qRemoteView_ChangeCoordinates, state, event state.wid_heliographic: qRemoteView_ChangeCoordinates, state, event state.wid_mapping[0]: qRemoteView_ChangeMapping, state, event state.wid_mapping[1]: qRemoteView_ChangeMapping, state, event state.wid_mapping[2]: qRemoteView_ChangeMapping, state, event state.wid_list : qRemoteView_List, state, event state.wid_mhisto : qRemoteView_Histogram, state state.wid_vhisto : qRemoteView_Histogram, state, /fovcube ELSE: unexpected_event, event ENDCASE ; Put the state structure back where it belongs ; (the widget may have been destroyed already, so we check for event.top for validity.) IF widget_info(event.top,/valid_id) THEN $ widget_control, event.top, set_uvalue=state, /no_copy RETURN & END PRO qRemoteView, filter, matrix=matrix, group=group @compile_opt.pro ; On error, return to caller InitVar, filter, filepath(root=getenv('SSW_SMEI_DAT'),'t3d*.*') ; State[0] time of image in days since 2000 Jan 1.5 (njd). ; if equal to !values.f_nan it is set to the start of the ; rotation specified in the rotation keyword ; State[1:3] position of viewer (longitude, latitude, heliocentric distance) ; By default, ecliptic coordinates are assumed. ; Set /heliographic keyword to input heliographic coordinates. ; The heliocentric distance is in AU. ; State[4:5] viewing direction corresponding to center of image ; (longitude, latitude) in the same coordinate system as used for ; the viewer location, but with the viewer in the origin. ; State[6] Angular width of rectangular field of view ; State[7] ??? Tilt angle of field of view. Zero tilt means that the horizontal ; direction in the image is parallel to the ecliptic or solar ; equator (depending on the setting of keyword /heliographic) ; Tilt angle increases counterclockwise. state = {STATE_QSKYVIEW, $ wid_base : 0L, $ wid_done : 0L, $ wid_matrix : 0L, $ wid_filter : 0L, $ wid_info : 0L, $ wid_calc : 0L, $ wid_output : 0L, $ wid_show : 0L, $ wid_list : 0L, $ wid_mhisto : 0L, $ wid_vhisto : 0L, $ wid_tlabel : 0L, $ wid_clabel : 0L, $ wid_tmatrix : 0L, $ wid_rmatrix : lonarr(2), $ wid_earth : lonarr(3), $ ; State information wid_torigin : 0L, $ wid_tstep : 0L, $ wid_tunit : 0L, $ wid_nstep : 0L, $ wid_loc : lonarr(3), $ wid_dir : lonarr(2), $ wid_fov : 0L, $ wid_tilt : 0L, $ wid_dloc : lonarr(3), $ wid_ddir : lonarr(2), $ wid_uttime : 0L, $ wid_rotation : 0L, $ wid_heliographic: 0L, $ wid_ecliptic : 0L, $ wid_density : 0L, $ wid_velocity : 0L, $ wid_value : lonarr(4), $ wid_color : lonarr(4), $ wid_opacity : lonarr(4), $ wid_power : 0L, $ wid_grid : lonarr(3), $ wid_size : lonarr(2), $ wid_mapping : lonarr(3) $ } ch_time = 21 ch_rad = 5 ch_float= 8 xs_lab = 80 xs_time = 60 xs_rad = 40 xs_loc = 80 xs_fov = 60 xs_dat = 20 xs_val = 40 torigin = TimeSystem(/silent) earth = big_eph( torigin, $ body = jpl_body(/earth,/string) , $ /to_ecliptic , $ /to_sphere , $ /degrees , $ /onebody , $ /silent ) loc = earth dir = [AngleRange(earth[0]+180, /deg),-earth[1]] dloc = [0,0,0] ddir = [0,0] tmatrix = TimeGet(!TheTime,/ydoy) torigin = TimeGet(torigin, /ymd) InitVar, tstep, 1L InitVar, tunit, TimeUnit(/minutes) nstep = 1 wid_base = widget_base(title='qRemoteView', /column, /tlb_kill_request_events) dummy0 = widget_base(wid_base, /row) state.wid_done = widget_button(dummy0, value=filepath(root=getenv('SSW_SMEI_UCSD'),subdir='image','done.ico'), /bitmap) state.wid_matrix = widget_button(dummy0, value='Get Data') state.wid_filter = cw_field(dummy0, value=filter, /string, $ title='Filter', xsize=40, /return_ev) state.wid_info = widget_button(dummy0, value=filepath(root=getenv('SSW_SMEI_UCSD'),subdir='image','info.ico'), /bitmap) state.wid_calc = widget_button(dummy0, value='Calc View') state.wid_show = widget_button(dummy0, value='Show View') list = ['Display','Tiff (8-bit)','Tiff (24 bit)','Bitmap (8-bit)','Bitmap (24-bit)'] state.wid_output = widget_droplist(dummy0, value=list, uvalue=list) dummy0 = widget_base(wid_base, /row) dummy1 = widget_base(dummy0, /column, frame=1) dummy2 = widget_label(dummy1, value='Viewing parameters') dummy2 = widget_base(dummy1, /row) state.wid_torigin = cw_field(dummy2, value=torigin, /string, title='Time: Start', /row, xsize=ch_time, lxsize=xs_time) state.wid_tstep = cw_field(dummy2, value=tstep , /float, title='Step', /row, xsize=4) state.wid_tunit = widget_droplist(dummy2, value=['years','days','hours','minutes','seconds','millisecond']) state.wid_nstep = cw_field(dummy2, value=nstep , /integer, title='# Steps', /row, xsize=4) widget_control, state.wid_tunit, set_droplist_select=tunit ; Set default time units dummy2 = widget_base(dummy1, /row) state.wid_fov = cw_field(dummy2, value=90., /floating, xsize=ch_float, lxsize=xs_fov, title='FoV: Width', /row) state.wid_tilt = cw_field(dummy2, value= 0., /floating, xsize=ch_float, title='Tilt', /row) dummy3 = widget_label(dummy2,value=' deg') dummy2 = widget_base(dummy1, /column, frame=1) dummy3 = widget_base(dummy2, /row) tmp = string(format='(35X,A,25X,A,30X,A)','Earth','Location','Direction') dummy4 = widget_label(dummy3, value=tmp) dummy3 = widget_base(dummy2, /row) dummy4 = widget_label(dummy3, xsize=xs_lab, value='Longitude (deg)') state.wid_earth[0]= cw_field(dummy3, value=earth[0], /floating, xsize=ch_float, title=' ', /row) state.wid_loc [0]= cw_field(dummy3, value=loc [0], /floating, xsize=ch_float, title=' ', /row) state.wid_dloc [0]= cw_field(dummy3, value=dloc [0], /floating, xsize=ch_float, title=' ', /row) state.wid_dir [0]= cw_field(dummy3, value= dir [0], /floating, xsize=ch_float, title=' ', /row) state.wid_ddir [0]= cw_field(dummy3, value=ddir [0], /floating, xsize=ch_float, title=' ', /row) dummy3 = widget_base(dummy2, /row) dummy4 = widget_label(dummy3, xsize=xs_lab, value='Latitude (deg)') state.wid_earth[1]= cw_field(dummy3, value=earth[1], /floating, xsize=ch_float, title=' ', /row) state.wid_loc [1]= cw_field(dummy3, value=loc [1], /floating, xsize=ch_float, title=' ', /row) state.wid_dloc [1]= cw_field(dummy3, value=dloc [1], /floating, xsize=ch_float, title=' ', /row) state.wid_dir [1]= cw_field(dummy3, value= dir [1], /floating, xsize=ch_float, title=' ', /row) state.wid_ddir [1]= cw_field(dummy3, value=ddir [1], /floating, xsize=ch_float, title=' ', /row) dummy3 = widget_base(dummy2, /row) dummy4 = widget_label(dummy3, xsize=xs_lab, value='Distance (AU)') state.wid_earth[2]= cw_field(dummy3, value=earth[2], /floating, xsize=ch_float, title=' ', /row) state.wid_loc [2]= cw_field(dummy3, value=loc [2], /floating, xsize=ch_float, title=' ', /row) state.wid_dloc [2]= cw_field(dummy3, value=dloc [2], /floating, xsize=ch_float, title=' ', /row) dummy1 = widget_base(dummy0, /column, frame=1) state.wid_tlabel = widget_base (dummy1, /column, /exclusive, frame=1) state.wid_rotation = widget_button(state.wid_tlabel, value='Rotation', uvalue=0B) state.wid_uttime = widget_button(state.wid_tlabel, value='UT' , uvalue=0B) widget_control, state.wid_tlabel, set_uvalue=state.wid_uttime widget_control, state.wid_uttime, /set_button, set_uvalue=1B state.wid_clabel = widget_base (dummy1, /column, /exclusive, frame=1) state.wid_ecliptic = widget_button(state.wid_clabel, value='Ecliptic', uvalue=0B) state.wid_heliographic = widget_button(state.wid_clabel, value='Helio' , uvalue=0B) widget_control, state.wid_ecliptic, /set_button, set_uvalue=1B dummy2 = widget_base (dummy1, /column, /exclusive, frame=1) state.wid_density = widget_button(dummy2, value='Density' , uvalue=0B) state.wid_velocity = widget_button(dummy2, value='Velocity', uvalue=0B) widget_control, state.wid_density, /set_button, set_uvalue=1B dummy1 = widget_base(dummy0, /column, frame=1) dummy2 = widget_label(dummy1, value='3D data sets') dummy2 = widget_base(dummy1, /row) state.wid_list = widget_droplist(dummy2, value=tmatrix, title='Time', /dynamic_resize, sensitive=0, uvalue='(F10.5)') dummy2 = widget_base(dummy1, /row) state.wid_rmatrix[0] = cw_field(dummy2, value=0., /floating, title='Inner R', /row, xsize=ch_float, lxsize=xs_rad) state.wid_rmatrix[1] = cw_field(dummy2, value=1., /floating, title='Outer R', /row, xsize=ch_float, lxsize=xs_rad) dummy = widget_base(wid_base, /row) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' Min') state.wid_value [0] = cw_field(dummy1, value=0., /floating, title='Value' , lxsize=xs_val, xsize=ch_float) state.wid_opacity[0] = cw_field(dummy1, value=0., /floating, title='Opacity', lxsize=xs_val, xsize=ch_float) state.wid_color [0] = cw_field(dummy1, value=125 , /integer , title='Color' , lxsize=xs_val, xsize=ch_float) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' Low') state.wid_value [1] = cw_field(dummy1, value=0.0, /floating, title=' ', xsize=ch_float) state.wid_opacity[1] = cw_field(dummy1, value=0.0, /floating, title=' ', xsize=ch_float) state.wid_color [1] = cw_field(dummy1, value=125, /integer , title=' ', xsize=ch_float) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' High') state.wid_value [2] = cw_field(dummy1, value=0.0, /floating, title=' ', xsize=ch_float) state.wid_opacity[2] = cw_field(dummy1, value=0.5, /floating, title=' ', xsize=ch_float) state.wid_color [2] = cw_field(dummy1, value=225, /integer , title=' ', xsize=ch_float) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' Max') state.wid_value [3] = cw_field(dummy1, value=0.0, /floating, title=' ', xsize=ch_float) state.wid_opacity[3] = cw_field(dummy1, value=0.5, /floating, title=' ', xsize=ch_float) state.wid_color [3] = cw_field(dummy1, value=225 , /integer, title=' ', xsize=ch_float) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' FOV grid') state.wid_grid[0] = cw_field(dummy1, value=31, /integer, xsize=5, title='X:', lxsize=xs_dat) state.wid_grid[1] = cw_field(dummy1, value=31, /integer, xsize=5, title='Y:', lxsize=xs_dat) state.wid_grid[2] = cw_field(dummy1, value=31, /integer, xsize=5, title='Z:', lxsize=xs_dat) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' Window') state.wid_size[0] = cw_field(dummy1, value=400, /integer, xsize=5, title=' ') state.wid_size[1] = cw_field(dummy1, value=400, /integer, xsize=5, title=' ') dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value='Mapping') dummy2 = widget_base (dummy1, /exclusive, frame=1, /column) state.wid_mapping[0] = widget_button(dummy2, value='Distance', uvalue=0B) state.wid_mapping[1] = widget_button(dummy2, value='Elongation', uvalue=0B) state.wid_mapping[2] = widget_button(dummy2, value='Area', uvalue=0B) dummy1 = widget_base(dummy, /column) dummy2 = widget_label(dummy1, xsize=xs_lab, value=' ') state.wid_list = widget_droplist(dummy1, value='no data ', title='3D sets', /dynamic_resize, sensitive=0) state.wid_mhisto= widget_button (dummy1, value='Matrix Histogram', sensitive=0) state.wid_vhisto= widget_button (dummy1, value='View Histogram ', sensitive=0) widget_control, state.wid_clabel , set_uvalue=state.wid_ecliptic widget_control, state.wid_mapping[1], /set_button, set_uvalue=1B ;widget_control, state.wid_tmatrix , set_uvalue='(F10.5)' widget_control, wid_base, set_uvalue=state, /no_copy widget_control, wid_base, /realize xmanager, 'qRemoteView', wid_base, event_handler='qRemoteView_Event', group=Group, /no_block RETURN & END