Viewing contents of file '../idllib/contrib/tappin/graffer/gr_img_menus.pro'
;+
; GR_IMG_MENUS
;	Menu for setting options for "IMAGE" format display.
;
; Usage:
;	gr_img_menus, pdefs, data
;
; Arguments:
;	pdefs	struct	input	The Graffer data & control structure.
;	data	struct	in/out	The data structure extracted from pdefs
; History:
;	Original: 9/12/96; SJT
;	Warn if inadequate colours: 8/5/97; SJT
;-

function Img_event, event

widget_control, event.id, get_uvalue = but
widget_control, event.handler, get_uvalue = uv, /no_copy

iexit = 0

case but of
    'DO': begin
        widget_control, uv.r1, get_value = r1
        widget_control, uv.r2, get_value = r2
        uv.zopts.range = [r1, r2]
        
        widget_control, uv.px, get_value = px
        uv.zopts.pxsize = px
        
        widget_control, uv.gma, get_value = g
        uv.gamma = g
        iexit = 1
    end
    
    'CANCEL': iexit = -1
    
    'TAB': uv.table = event.index
    
    'POP': begin
        widget_control, event.top, /show
        widget_control, event.id, timer = 2
    end
endcase

widget_control, event.handler, set_uvalue = uv, /no_copy

return, { $
          Id:event.id,  $
          Top:event.top,  $
          Handler:0l,  $
          Exited:iexit $
        }

end

pro Gr_img_menus, pdefs, data

i = pdefs.cset

widget_control, pdefs.ids.graffer, sensitive = 0

tlb = widget_base(title = 'Graffer Image Options', group_leader = $
                  pdefs.ids.graffer, resource = 'Graffer') 
base = widget_base(tlb, /column, xpad = 1, ypad = 1, space = 1)
if (pdefs.short_colour) then  begin
    msg = ["      * * * W A R N I N G * * * ",  $
           "Extended colour table cannot be loaded", $
           "Image format displays will be skipped"]
    junk = widget_text(base, value = msg, xsize = max(strlen(msg)), $
                       ysize = n_elements(msg), /align_center)
endif

obase = widget_base(base, /row, xpad = 1, ypad = 1, space = 1)

jb = widget_base(obase, /column, xpad = 1, ypad = 1, space = 1)

junk = widget_label(jb, value = 'Range')
r1 = graff_enter(jb, /float, value = data(i).zopts.range(0), format $
                 = "(g12.4)", xsize = 14, uvalue = 'R1', label = $
                 'Min:', /no_event, /capture)
r2 = graff_enter(jb, /float, value = data(i).zopts.range(1), format $
                 = "(g12.4)", xsize = 14, uvalue = 'R2', label = $
                 'Max:', /no_event, /capture)

junk = widget_label(jb, value = ' ')

px = graff_enter(jb, /float, value = data(i).zopts.pxsize, format = $
                 "(f8.5)", xsize = 9, uvalue = 'PX', label = 'Pixel ' + $
                 'Size:', /no_event, /capture)

jb = widget_base(obase, /column, xpad = 1, ypad = 1, space = 1)

itl = 1
loadct, get_names = itl

junk = widget_label(jb, value = 'Colour Table')
junk = widget_list(jb, value = itl, uvalue = 'TAB', ysize = 5)
widget_control, junk, set_list_select = pdefs.ctable

gma = graff_enter(jb, /float, value = pdefs.gamma, format $
                 = "(f7.3)", xsize = 9, uvalue = 'GAM', label = $
                  'Gamma:', /no_event, /capture)

obase = widget_base(base, /row, xpad = 1, ypad = 1, space = 1, uvalue = 'POP')
junk = widget_button(obase, value = '     Cancel    ', uvalue = $
                     'CANCEL')
junk = widget_button(obase, value = '      Do it     ', uvalue = 'DO')

uv = { $
       R1:r1,  $
       R2:r2, $
       Px:px, $
       Gma:gma,  $
       Zopts:data(i).zopts, $
       Table:pdefs.ctable,  $
       gamma:pdefs.gamma $
     }

widget_control, tlb, /real

widget_control, base, set_uvalue = uv, /no_copy, event_func = $
  'img_event'

if (pdefs.popflag) then widget_control, obase, timer = 2.

;	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.

repeat begin
    ev = widget_event(base)
endrep until (ev.exited ne 0)

widget_control, base, get_uvalue = uv, /no_copy

widget_control, tlb, /destroy
if (ev.exited eq 1) then begin
    data(i).zopts = uv.zopts
    pdefs.ctable = uv.table
    pdefs.gamma = uv.gamma
    graff_colours, pdefs
endif

widget_control, pdefs.ids.graffer, sensitive = 1

end