;+ ; NAME: ; qset_page ; PURPOSE: ; Widget for controlling printing and saving as disk file ; CATEGORY: ; Widget qset_page ; CALLING SEQUENCE: ; qset_page ; INPUTS: ; group=Group passed to xmanager when registering the qView widget ; OPTIONAL INPUT PARAMETERS: ; spit=spit integer scalar, or string array; default: 0 ; set to 0 or 1; or contains an array of valid plot commands ; If /spit is set then 'get_page' is called before returning ; control to caller. ; If spit is set to plot command(s) these are executed, ; followed by a call to 'get_page' ; OUTPUTS: ; (printer output, graphics file) ; OPTIONAL OUTPUT PARAMETERS: ; status=status scalar; type: byte ; 0 or 1 depending on whether the call to set_page was done ; 0: no set_page call (!ThePlotFile = '') ; 1: set_page was called (!ThePlotFile set to valid file name) ; (if keyword spit is used then always status=0 is returned ; CALLS: ; IsType, qset_page_kill, qset_page_submit, qset_page_pick, qset_page_layout, get_page ; SIDE EFFECTS: ; qset_page is a blocking widget: control is returned to caller only after this widget ; destroys itself. ; RESTRICTIONS: ; PROCEDURE: ; Functions as a driver for href=set_page= ; There are two ways of using this widget: ; 1. call without using keyword 'spit': ; qset_page will use href=set_page= to initialize an output format (for printer, or ; graphic file). Return status=1 signifies a succesful initialization. ; This is followed by one or more plot commands, writing to a printer file or ; plotting to a graphics window. Finally 'get_page' is called to send the print file ; to the printer or capture the window as a graphics file. ; 2a. call with keyword /spit set: ; qset_page initializes the ouput format, then immediately calls 'get_page'. ; This makes sense only if a graphics windows already exists, that needs to be ; captured as a graphics file. ; 2b. call with keyword spit set to a string array containg plot commands. ; qset_page initializes the output format, executes the plot command(s), then ; calls 'get_page'. ; ; State structure: ; ; state = {STATE_QSET_PAGE, $ ; wid_top : 0L, $ Base widget container for all other widgets ; wid_done : 0L, $ 'Done' button; exits and destroys widget ; user value: none ; wid_print : 0L, $ 'Print' button; calls set_page, then exits and destroys widget ; user value: none ; wid_pick : 0L, $ 'Pick File' button for selecting file name for output ; user value: none ; wid_file : 0L, $ cw_field widget for name of file for output ; user value: none ; ; wid_portrait: 0L, $ Exclusive button for setting page layout ; user value: current ON/OFF setting ; wid_landscape:0L, $ Exclusive button for setting page layout ; user value: current ON/OFF setting ; wid_xsize : 0L, $ cw_field widget for setting horizontal size (cm) ; user value: none ; wid_ysize : 0L, $ cw_field widget for setting horizontal size (cm) ; user value: none ; wid_aspect : 0L, $ cw_field widget for setting aspect ratio ; user value: none ; wid_window : 0L, $ button for setting aspect ratio using current window size ; user value: none ; wid_swap : 0L, $ button for inverting the aspect ratio ; user value: none ; wid_printer : 0L, $ Exclusive button for selecting !ThePrinter ; user value: current ON/OFF setting ; wid_eps : 0L, $ Exclusive button for output as EPS file ; user value: current ON/OFF setting ; wid_gif : 0L, $ Exclusive button for output as GIF file ; user value: current ON/OFF setting ; wid_png : 0L $ Exclusive button for output as PNG file ; user value: current ON/OFF setting ; wid_bmp : 0L $ Exclusive button for output as BMP file ; user value: current ON/OFF setting ; } ; MODIFICATION HISTORY: ; APR-2000, Paul Hick (UCSD/CASS) ; JAN-2001, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ; added /spit keyword and associated functionality. ;- pro qset_page_event, event @compile_opt.pro ; On error, return to caller widget_control, event.top, get_uvalue=state, /no_copy case event.id of ; ID of widget that generated the message event.top : qset_page_kill, state, event state.wid_done : qset_page_kill, state, event state.wid_xsize : qset_page_layout, state, event state.wid_ysize : qset_page_layout, state, event state.wid_aspect: qset_page_layout, state, event state.wid_swap : qset_page_layout, state, event state.wid_window: qset_page_layout, state, event state.wid_print : qset_page_submit, state, event state.wid_pick : qset_page_pick, state, /pick state.wid_file : qset_page_pick, state state.wid_portrait : qset_page_layout, state, event state.wid_landscape: qset_page_layout, state, event state.wid_printer: qset_page_pick, state, type='printer' state.wid_eps : qset_page_pick, state, type='eps' state.wid_gif : qset_page_pick, state, type='gif' state.wid_png : qset_page_pick, state, type='png' state.wid_bmp : qset_page_pick, state, type='bmp' else: begin print, 'qset_page: unexpected event' print, tag_names(event, /structure_name) print, event end endcase if widget_info(event.top, /valid_id) then $ widget_control, event.top, set_uvalue=state, /no_copy return & end pro qset_page, group=group, status=status, spit=spit @compile_opt.pro ; On error, return to caller state = {STATE_QSET_PAGE, $ wid_top : 0L, $ wid_done : 0L, $ wid_print : 0L, $ wid_pick : 0L, $ wid_file : 0L, $ wid_portrait: 0L, $ wid_landscape:0L, $ wid_xsize : 0L, $ wid_ysize : 0L, $ wid_aspect : 0L, $ wid_swap : 0L, $ wid_window : 0L, $ wid_printer : 0L, $ wid_eps : 0L, $ wid_gif : 0L, $ wid_png : 0L, $ wid_bmp : 0L $ } if IsType(spit, /string) then plotstr = spit InitVar, spitstr, /key bigsize = 24.75 ; cm smallsize = 18.10 base = widget_base(title='qset_page', /column, /tlb_kill_request) state.wid_top = widget_base(base, /column) dummy = widget_base(state.wid_top, /row, frame=1) state.wid_done = widget_button(dummy, value=filepath(root=getenv('SSW_SMEI_UCSD'),subdir='image','done.ico'),/bitmap) state.wid_print = widget_button(dummy, value=(['Print','Spit'])[spitstr]) state.wid_pick = widget_button(dummy, value='Pick File') state.wid_file = cw_field(dummy, title=' ', /return_ev, $ value=filepath(root=getenv('TUB'),'idl.'+strlowcase(!ThePrinter))) dummy = widget_base(state.wid_top, /row, frame=1) state.wid_xsize = cw_field(dummy, value=bigsize , /floating, title='X:', xsize=10, /row, /all_ev) state.wid_ysize = cw_field(dummy, value=smallsize, /floating, title='Y:', xsize=10, /row, /all_ev) state.wid_aspect = cw_field(dummy, value=smallsize/bigsize , /floating, title='Aspect', xsize=10, /row, /all_ev) state.wid_swap = widget_button(dummy, value='1/Aspect') state.wid_window = widget_button(dummy, value='Window') dummy0 = widget_base(state.wid_top, /row) dummy = widget_base(dummy0, /row, /exclusive, frame=1) state.wid_portrait = widget_button(dummy, value='Portrait' ) state.wid_landscape = widget_button(dummy, value='Landscape') dummy = widget_base(dummy0, /row, /exclusive, frame=1) state.wid_printer = widget_button(dummy, value=!ThePrinter, uvalue=0B) state.wid_eps = widget_button(dummy, value='EPS' , uvalue=0B) state.wid_gif = widget_button(dummy, value='GIF' , uvalue=0B) state.wid_png = widget_button(dummy, value='PNG' , uvalue=0B) state.wid_bmp = widget_button(dummy, value='BMP' , uvalue=0B) widget_control, state.wid_printer , /set_button, set_uvalue=1B widget_control, state.wid_landscape, /set_button widget_control, state.wid_portrait , set_button=0, set_uvalue=0B widget_control, base, set_uvalue=state, /no_copy widget_control, base, /realize xmanager, 'qset_page', base, group=Group, event_handler='qset_page_event' status = !ThePlotFile ne '' if status and spitstr then begin for i=0,n_elements(plotstr)-1 do status = execute(plotstr[i]) get_page, /printer status = 0B endif return & end