;+
; NAME:
;	SMEI_SEQUENCE::RANGE_MENU
;
;
; PURPOSE:
;	Simple GUI to set display range for SMEI data.
;
;
; CATEGORY:
;	SMEI_SEQUENCE
;
;
; CALLING SEQUENCE:
;	seqref->range_menu
;
;
; KEYWORD PARAMETERS:
;	group	long	Widget ID of a group leader.
;	/block		If set, then the widget blocks other
;			events. (So it pauses a movie for example).
;
;
; SIDE EFFECTS:
;	A widget menu is generated, and the range settings of the
;	sequence may be changed.
;
;
; MODIFICATION HISTORY:
;	Original: 11/12/02; SJT
;	Add logarithmic support: 10/1/03; SJT
;	Add no-data index: 11/7/03; SJT
;	Add off_sky colour: 18/7/03; SJT
;	Add Kill ranges: 29/3/04; SJT
;-

pro ss_range_event, event

sbase = widget_info(event.top, /child)
widget_control, sbase, get_uvalue = state
widget_control, event.id, get_uvalue = mnu

case mnu of
    'QUIT': begin
        if event.value eq 'DO' then begin
            state.original -> set_data_range, $
              state.range, logarithmic = state.log, kill = state.kill
            if state.iflag[0] then $
              state.original -> set_null_index, state.index[0], /screen
            if state.iflag[1] then $
              state.original -> set_null_index, state.index[1], $
              /screen, /off_sky
        endif
        widget_control, event.top, /destroy
    end

    'MIN': state.range[0] = event.value
    'MAX': state.range[1] = event.value
    'LOG': state.log = event.index
    'KMIN': state.kill[0] = event.value
    'KMAX': state.kill[1] = event.value

    'INDEXM': begin
        state.index[0] = event.value
        state.iflag[0] = 1b
    end
    'INDEXO': begin
        state.index[1] = event.value
        state.iflag[1] = 1b
    end
endcase

if widget_info(/valid, sbase) then widget_control, sbase, set_uvalue = $
  state

end

pro smei_sequence::range_menu, group = group, block = block

range = self -> get_data_range()
kill = self -> get_data_range(/kill)

base = widget_base(title = 'Set image range', $
                   group = group, $
                   /column)


base1 = widget_base(base, $
                 /column, $
                 /frame)

label = widget_label(base1, $
                     value = 'Set image range')

junk = cw_ffield(base1, $
                 /float, $
                 value = range[0], $
                 label = 'Minimum (black): ', $
                 xsize = 14, $
                 format = '(G14.4)', $
                 uvalue = 'MIN')

junk = cw_ffield(base1, $
                 /float, $
                 value = range[1], $
                 label = 'Maximum (white): ', $
                 xsize = 14, $
                 format = '(G14.4)', $
                 uvalue = 'MAX')

junk = widget_droplist(base1, $
                       value = ['Linear', 'Logarithmic'], $
                       title = 'Mapping:', $
                       uvalue = 'LOG')
log =  self -> get_data_range(/logarithmic)
widget_control, junk, set_droplist_select = log

jb = widget_base(base, $
                 /column, $
                 /frame)

junk = widget_label(jb, $
                     value = 'Set image kill range')

junk = cw_ffield(jb, $
                 /float, $
                 value = kill[0], $
                 label = 'Minimum: ', $
                 xsize = 14, $
                 format = '(G14.4)', $
                 uvalue = 'KMIN')

junk = cw_ffield(jb, $
                 /float, $
                 value = kill[1], $
                 label = 'Maximum: ', $
                 xsize = 14, $
                 format = '(G14.4)', $
                 uvalue = 'KMAX')

index = bytarr(2)
index[0] = self -> get_null_index(/screen)
index[1] = self -> get_null_index(/screen, /off_sky)

junk = cw_ffield(base, $
                 /int, $
                 value = index[0], $
                 label = 'Index for missing data', $
                 xsize = 4, $
                 format = '(I3)', $
                 uvalue = 'INDEXM')
junk = cw_ffield(base, $
                 /int, $
                 value = index[1], $
                 label = 'Index for off sky', $
                 xsize = 4, $
                 format = '(I3)', $
                 uvalue = 'INDEXO')

junk = cw_bgroup(base, $
                 ['Apply',  'Cancel'], $
                 button_uvalue = ['DO', 'DONT'], $
                 uvalue = 'QUIT', $
                 /row)

state = {ss_range_state, $
         original: self, $
         range: range, $
         kill: kill, $
         index: index, $
         iflag: bytarr(2), $
         log: log}

widget_control, base1, set_uvalue = state
widget_control, base, /real

xmanager, 'ss_range', base, no_block = keyword_set(block) eq 0

end
