Viewing contents of file '../idllib/contrib/tappin/graffer/gr_hardopts.pro'
;+
; GR_HARDOPTS
; Set hardcopy options
;
; Usage
; gr_hardopts, h ; Not intended for direct user usage
;
; Arguments:
; h struct in/out The hardcopy options.
; leader long input Group leader of the widget
; tname string input Name of the file without extension
; use_timer byte input Whether to use the timer events to
; keep it on top
;
; History:
; Original: 3/8/95; SJT
; Add timer event to push to front if obscured: 23/8/95; SJT
; Renamed as GR_HARDOPTS (was hardopts): 18/9/96; SJT
; Add font selection options: 10/10/96; SJT
;-
function Hopts_event, event
widget_control, event.id, get_uvalue = but
widget_control, event.handler, get_uvalue = settings, /no_copy
iexit = 0
track_flag = strpos(tag_names(event, /struct), 'TRACK') ne -1
if (track_flag) then begin
if (event.enter eq 0) then begin
graff_msg, settings.action, ''
goto, miss_case
endif
endif
case but of
'COL': if (track_flag) then $
graff_msg, settings.action, 'Toggle use of colour PostScript' $
else settings.opts.colour = event.value
'EPS': if (track_flag) then $
graff_msg, settings.action, 'Toggle use of Encapsulated PostScript' $
else settings.opts.eps = event.value
'ORI': if (track_flag) then $
graff_msg, settings.action, 'Toggle landscape/portrait orientation' $
else begin
settings.opts.orient = event.value
settings.psize = gr_get_page(settings.opts.psize, $
settings.opts.orient)
; Swap over the X & Y sizes of the
; draw page if it overlaps the edge of
; the paper but not otherwise.
if ((event.value eq 1 and $
settings.opts.size(0) gt settings.psize(0)) or $
(event.value eq 0 and $
settings.opts.size(1) gt settings.psize(1))) then begin
temp = settings.opts.size(0)
settings.opts.size(0) = settings.opts.size(1)
settings.opts.size(1) = temp
widget_control, settings.xsid, set_value = settings.opts.size(0)
widget_control, settings.ysid, set_value = settings.opts.size(1)
endif
; re-centre
xs = (settings.psize(0)-settings.opts.size(0))/2.
settings.opts.off(0) = xs
ys = (settings.psize(1)-settings.opts.size(1))/2.
settings.opts.off(1) = ys
widget_control, settings.xoffid, set_value = xs
widget_control, settings.xleftid, set_value = xs
widget_control, settings.yoffid, set_value = ys
widget_control, settings.yleftid, set_value = ys
end
'PSIZE': if (track_flag) then $
graff_msg, settings.action, 'Toggle A4/Letter sized paper' $
else begin
settings.opts.psize = event.value
settings.psize = gr_get_page(settings.opts.psize, $
settings.opts.orient)
xlft = settings.psize(0)-settings.opts.off(0)- $
settings.opts.size(0)
widget_control, settings.xleftid, set_value = xlft
ylft = settings.psize(1)-settings.opts.off(1)- $
settings.opts.size(1)
widget_control, settings.yleftid, set_value = ylft
end
'CENTRE': if (track_flag) then $
graff_msg, settings.action, 'Centre the plot on the page' $
else begin
xs = (settings.psize(0)-settings.opts.size(0))/2.
settings.opts.off(0) = xs
widget_control, settings.xleftid, set_value = xs
widget_control, settings.xoffid, set_value = xs
ys = (settings.psize(1)-settings.opts.size(1))/2.
settings.opts.off(1) = ys
widget_control, settings.yleftid, set_value = ys
widget_control, settings.yoffid, set_value = ys
end
'XSI': if (track_flag) then $
graff_msg, settings.action, 'Set the X size of the plot (in cm)' $
else begin
widget_control, event.id, get_value = sx
settings.opts.size(0) = sx
xlft = settings.psize(0)-sx-settings.opts.off(0)
widget_control, settings.xleftid, set_value = xlft
end
'YSI': if (track_flag) then $
graff_msg, settings.action, 'Set the Y size of the plot (in cm)' $
else begin
widget_control, event.id, get_value = sy
settings.opts.size(1) = sy
ylft = settings.psize(1)-sy-settings.opts.off(1)
widget_control, settings.yleftid, set_value = ylft
end
'XOFF': if (track_flag) then $
graff_msg, settings.action, 'Set the X offset of the plot (in cm)' $
else begin
widget_control, event.id, get_value = sx
settings.opts.off(0) = sx
xlft = settings.psize(0)-sx-settings.opts.size(0)
widget_control, settings.xleftid, set_value = xlft
end
'YOFF': if (track_flag) then $
graff_msg, settings.action, 'Set the Y offset of the plot (in cm)' $
else begin
widget_control, event.id, get_value = sy
settings.opts.off(1) = sy
ylft = settings.psize(1)-sy-settings.opts.size(1)
widget_control, settings.yleftid, set_value = ylft
end
'FFAMILY': if (track_flag) then $
graff_msg, settings.action, 'Select the font family for plot ' + $
'annotation' $
else begin
settings.opts.font.family = event.value
widget_control, settings.wsid, sensitive = event.value le 9
for j = 1, 3, 2 do widget_control, settings.wsids(j), sensitive = $
event.value le 5
end
'FWS': if (track_flag) then $
graff_msg, settings.action, 'Select the weight & slant for plot ' + $
'annotation' $
else settings.opts.font.wg_sl = event.value
'TIMEST': if (track_flag) then $
graff_msg, settings.action, 'Toggle printing of a timestamp on ' + $
'the plot' $
else settings.opts.timestamp = event.value
'POP': begin
widget_control, event.top, /show
widget_control, event.id, timer = 2.
end
'DO': if (track_flag) then $
graff_msg, settings.action, 'Save the settings & make the hardcopy' $
else begin
iexit = 1
for j = 0, 1 do begin
widget_control, settings.cmid(j), get_value = cmd
settings.opts.action(j) = cmd(0)
endfor
end
'CANCEL': if (track_flag) then $
graff_msg, settings.action, "Forget new settings &" + $
" don't make a hardcopy" $
else iexit = -1
'CMD':if (track_flag) then $
graff_msg, settings.action, 'Enter the command for spooling the ' + $
'plot up the the file'
'SFX':if (track_flag) then $
graff_msg, settings.action, 'Enter the command for spooling the ' + $
'plot after the file'
Else: graff_msg, settings.action, "Whaat??????"
endcase
widget_control, settings.spbase, sensitive = (settings.opts.eps ne 1)
widget_control, settings.xoffid, sensitive = (settings.opts.eps ne 1)
widget_control, settings.yoffid, sensitive = (settings.opts.eps ne 1)
Miss_case:
widget_control, event.handler, set_uvalue = settings, /no_copy
return, {id:event.id, top:event.top, handler:event.handler, exited:iexit}
end
function Gr_hardopts, h, leader, tname, use_timer
uvs = { $
Opts:h, $
Cmid:lonarr(2), $
Wsid:0l, $
Wsids:lonarr(4), $
Spbase:0l, $
Xsid:0l, $
Xoffid:0l, $
Xleftid:0l, $
Ysid:0l, $
Yoffid:0l, $
Yleftid:0l, $
Action:0l, $
Psize:fltarr(2) $
}
uvs.psize = gr_get_page(h.psize, h.orient)
widget_control, leader, sensitive = 0
tlb = widget_base(title = 'Graffer Hard Copy', group_leader = leader, $
resource = 'Graffer')
base = widget_base(tlb, /column)
; Basic toggle settings
jb = widget_base(base, /row)
junk = cw_bbselector(jb, ['Monochrome', 'Colour'], uvalue = $
'COL', set_value = h.colour, /track)
junk = cw_bbselector(jb, ['Normal', 'Encapsulated'], uvalue = $
'EPS', set_value = h.eps, /track)
junk = cw_bbselector(jb, ['Landscape', 'Portrait'], uvalue = $
'ORI', set_value = h.orient, /track)
; Page size
cl = widget_base(base, /row, uvalue = 'POP', xpad = 1, ypad = 1, space = 1)
jb = widget_base(cl, /column)
junk = cw_bbselector(jb, ['A4', 'Letter'], label_left = 'Paper size:', $
uvalue = 'PSIZE', set_value = h.psize, /track)
junk = widget_button(jb, value = 'Centre on page', uvalue = 'CENTRE', /track)
junk = cw_bbselector(jb, ['Off', 'On'], label_left = "Plot " + $
"timestamp", set_value = h.timestamp, uvalue = $
'TIMEST', /track)
jb = widget_base(cl, /column)
uvs.xsid = graff_enter(jb, /float, /all, label = 'X Size (cm):', value = $
h.size(0), uvalue = 'XSI', format = "(F5.2)", xsize $
= 5, /track, /capture)
uvs.xoffid = graff_enter(jb, /float, /all, label = 'X offset:', $
value = h.off(0), uvalue = 'XOFF', format = $
"(F5.2)", xsize = 5, /track, /capture)
uvs.xleftid = graff_enter(jb, /float, /display, label = 'X remain:', $
value = uvs.psize(0)-h.size(0)-h.off(0), format = $
"(F5.2)", xsize = 5)
jb = widget_base(cl, /column)
uvs.ysid = graff_enter(jb, /float, /all, label = 'Y Size (cm):', value = $
h.size(1), uvalue = 'YSI', format = "(F5.2)", xsize $
= 5, /track, /capture)
uvs.yoffid = graff_enter(jb, /float, /all, label = 'Y offset:', $
value = h.off(1), uvalue = 'YOFF', format = $
"(F5.2)", xsize = 5, /track, /capture)
uvs.yleftid = graff_enter(jb, /float, /display, label = 'Y remain:', $
value = uvs.psize(1)-h.size(1)-h.off(1), format = $
"(F5.2)", xsize = 5)
jb = widget_base(base, /row)
junk = cw_bbselector(jb, ['Courier', $
'Helvetica', $
'Helvetica Narrow', $
'NC Schoolbook', $
'Palatino', $
'Times', $
'Avant Garde Book', $
'Avant Garde Demi', $
'Bookman Demi', $
'Bookman Light', $
'Zapf Chancery', $
'Zapf Dingbats', $
'Symbol'], $
label_left = 'Font: Family:', set_value = $
h.font.family, uvalue = 'FFAMILY', /track)
uvs.wsid = cw_bbselector(jb, ['Normal', $
'Bold', $
'Italic', $
'Bold Italic'], $
label_left = 'Weight/slope', set_value = $
h.font.wg_sl, uvalue = 'FWS', ids = bids, /track)
uvs.wsids = bids
widget_control, uvs.wsid, sensitive = h.font.family le 9
for j = 1, 3, 2 do widget_control, uvs.wsids(j), sensitive = $
h.font.family le 5
; Spool command
uvs.spbase = widget_base(base, /column)
jb = widget_base(uvs.spbase, /row)
uvs.cmid(0) = graff_enter(jb, label = 'Spool Command:', value = $
h.action(0), uvalue = 'CMD', xsize = 12, $
/track, /capture)
uvs.cmid(1) = graff_enter(jb, value = h.action(1), uvalue = $
'SFX', xsize = 8, label = tname+'.ps', $
/track, /capture)
widget_control, uvs.spbase, sensitive = (h.eps ne 1)
uvs.action = graff_enter(base, /text, /display, value = '', xsize = $
65, label = 'Action:')
; Quit button
jb = widget_base(base, /row)
junk = widget_button(jb, value = ' Cancel ', uvalue = 'CANCEL', $
/track)
junk = widget_button(jb, value = ' Do it ', uvalue = 'DO', $
/track)
widget_control, base, set_uvalue = uvs, /no_copy
widget_control, tlb, /real
; RYO widget management to allow us to get the values back from
; the event handler without using a common block, even after the
; hierarchy has been destroyed.
widget_control, base, event_func = 'hopts_event'
if (use_timer) then widget_control, cl, timer = 2.
repeat begin
ev = widget_event(base)
endrep until (ev.exited ne 0)
widget_control, base, get_uvalue = uvs, /no_copy
h = uvs.opts
widget_control, tlb, /destroy
widget_control, leader, /sensitive
return, ev.exited
end