;+
; NAME:
;	SMEI_SEQUENCE::FLAGS_MENU
;
; PURPOSE:
;	Menu to set up the contaminant flags to mask.
;
; CATEGORY:
;	SMEI_SEQUENCE
;
; CALLING SEQUENCE:
;	seqref -> flags_menu[, group=group]
;
; KEYWORD PARAMETERS:
;	group	long	A possible group leader for the menu
;	/block		If set, then the widget blocks other
;			events. (So it pauses a movie for example).
;
; SIDE EFFECTS:
;	The sequence masking options are changed.
;
; RESTRICTIONS
;	Only applicable to Pipe 2.0 images
;
; MODIFICATION HISTORY:
;	Original: 23/10/07; SJT
;	Add clear all and set all: 24/10/07; SJT
;-

pro ss_flags_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 (state.original) -> set_flags, $
          state.flags

        widget_control, event.top, /destroy
        return
    end

    "BULK": begin
        if event.value eq 'ALL' then begin
            widget_control, state.fid, $
              set_value = replicate(1, state.nflags)
            state.flags = 'FFFF'xu
        endif else begin
            widget_control, state.fid, set_value = $
              intarr(state.nflags)
            state.flags = 0u
        endelse
        widget_control, state.doid, /sensitive
    end

    "FLAG": begin
        if event.select then state.flags or= event.value $
        else  state.flags and= (not event.value)
        widget_control, state.doid, /sensitive
    end
endcase

widget_control, sbase, set_uvalue = state

end


pro smei_sequence::flags_menu, group = group, block = block

;init_sys_variables                   ; Set up the flag values.

mbits = self -> get_mask_bits()
if size(mbits, /tname) ne 'STRUCT' then begin
    junk = dialog_message(dialog_parent = group, $
                          ['No images in the current sequence', $
                           'have a flags plane'])
    return
endif

cflags = self -> get_flags()
fnames = ['Sun', 'Moon', 'Venus', 'Jupiter', 'Mercury', 'Saturn', $
          'Mars', 'Bias Columns', 'Dark Columns', 'Particles', $
          'Aurora', 'Squares']
fvalues = [mbits.sun_bit, mbits.moon_bit, mbits.venus_bit, $
           mbits.jupiter_bit, mbits.mercury_bit, mbits.saturn_bit, $
           mbits.mars_bit, mbits.bias_bit, mbits.dark_bit, $
           mbits.particles_bit, mbits.aurora_bit, mbits.squares_bit]

base = widget_base(title = "Contaminant Masking", $
                   /column, $
                   group = group)

label = widget_label(base, $
                     value = "Contaminant Masking")

fid = cw_bgroup(base, $
                fnames, $
                button_uvalue = fvalues, $
                set_value = (cflags and fvalues) ne 0, $
                column = 2, $
                /nonexclusive, $
                uvalue = "FLAG")

junk = cw_bgroup(base, $
                 /row, $
                 ['Clear All', 'Set All'], $
                 button_uvalue = ['NONE', 'ALL'], $
                 uvalue = 'BULK')

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

widget_control, bids[0], sensitive = 0

state = {ss_flag_state, $
         original: self, $
         flags: cflags, $
         nflags: n_elements(fnames), $
         fid: fid, $
         doid: bids[0]}

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

xmanager, "ss_flags", base, no_block = keyword_set(block) eq 0

end
