;+
; NAME:
;	SMEI_SEQUENCE::PROFILE_MENU
;
;
; PURPOSE:
;	Create a radial or circumferential profile of the images in a
;	smei sequence.
;
;
; CATEGORY:
;	SMEI SEQUENCE
;
;
; CALLING SEQUENCE:
;	seqref -> profile_menu[, group = group]
;
;
; KEYWORD PARAMETERS:
;	group	long	The widget ID of a group leader for the menu.
;
;
; MODIFICATION HISTORY:
;	Original: 15/12/03; SJT
;	Add plane selection: 12/1/04; SJT
;	Add masking menu and missing=nan option: 8/7/09; SJT
;-

pro ss_prof_event, event

widget_control, event.id, get_uvalue = mnu
widget_control, event.top, get_uvalue = state

case mnu of
    "QUIT": begin
        if event.value eq 'DO' then begin
            profile = $
              state.original -> make_profile(state.nbins[0], $
                                             state.nbins[1], $
                                             state.range[0], $
                                             state.range[1], $  
                                             circumferential = $
                                             state.type, pa = pa, $
                                             elong = elong, $
                                             date = date, $
                                             verbose = $
                                             state.verbose, $
                                             plane = $
                                             state.plane, mask $
                                             = state.mask, miss_nan = $
                                             state.miss_nan)
            save_profile, profile, pa, elong, date, group = event.top
        endif
        widget_control, event.top, /destroy
    end
    'TYPE': begin
        state.type = event.index
        widget_control, state.rdescid, set_value = $
          (['Range in position angle', 'Range in ' + $
            'elongation'])[state.type]
    end
    'MIN': state.range[0] = event.value
    'MAX': state.range[1] = event.value
    'NPA': state.nbins[0] = event.value
    'NEL': state.nbins[1] = event.value
    'VERBOSE': state.verbose = event.select
    'NAN': state.miss_nan = event.select
    'PLANE': state.plane = event.index
    'MASK': state.original -> profile_mask_menu, state, group = event.top
endcase

if widget_info(/valid, event.top) then begin
    widget_control, state.doid, sensitive = state.range[1] ne $
      state.range[0]
    widget_control, event.top, set_uvalue = state
endif

end

pro smei_sequence::profile_menu, group = group

base = widget_base(/column, $
                   group = group, $
                  title = "SMEI Sequence profile")

junk = widget_label(base, $
                    value = "Generate profile")

junk = widget_droplist(base, $
                       title = 'Type of profile', $
                       value = ["Radial", "Circumferential"], $
                       uvalue = 'TYPE')

npl = self -> get_n_planes()
if npl gt 0 then begin
    plist = ['Processed', string(indgen(npl)+1, $
                                 format = "('Raw #',I2)")]
    plane = self -> get_plane()
    junk = widget_droplist(base, $
                           title = "Which plane to profile", $
                           value = plist, $
                           uvalue = 'PLANE')
    widget_control, junk, set_droplist_select = plane
endif else plane = 0


jb =  widget_base(base, $
                  /row)

rdescid = widget_label(jb, $
                       value = 'Range in position angle')

minid = cw_ffield(jb, $
                  /float, $
                  xsize = 8, $
                  label = 'from', $
                  format = "(F7.1)", $
                  uvalue = 'MIN')
maxid = cw_ffield(jb, $
                  /float, $
                  xsize = 8, $
                  label = 'to', $
                  format = "(F7.1)", $
                  uvalue = 'MAX')


junk = cw_ffield(base, $
                 label = "Number of bins in position angle", $
                 /int, $
                 xsize = 5, $
                 uvalue = 'NPA', $
                 value = 2)

junk = cw_ffield(base, $
                 label = "Number of bins in elongation", $
                 /int, $
                 xsize = 5, $
                 uvalue = 'NEL', $
                 value = 18)

jb = widget_base(base, $
                 /nonexclusive, $
                 /row)

junk = widget_button(jb, $
                     value = 'Show region profiled', $
                     uvalue = 'VERBOSE')

junk = widget_button(jb, $
                     value = 'Set missing to NaN', $
                     uvalue = 'NAN')

if self -> get_pipe_level() ge 2.0 then begin
    mbits = self -> get_mask_bits()
    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]
    nflags = n_elements(fvalues)
    junk = widget_button(base, $
                         value = 'Set masking', $
                         uvalue = 'MASK')
endif else begin
    fvalues = uintarr(12)
    nflags = 12
endelse

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

widget_control, bids[0], sensitive = 0

state = {ss_prof_state, $
         original: self, $
         type: 0, $
         rdescid: rdescid, $
         minid: minid, $
         maxid: maxid, $
         range: fltarr(2), $
         plane: plane, $
         nbins: [2, 18], $
         verbose: 0b, $
         miss_nan: 0b, $
         mask: 0u, $
         omask: 0u, $
         nflags: nflags, $
         fvalues: fvalues, $
         doid: bids[0], $
         mdoid: 0l, $
         mfid: 0l}

widget_control, base, /real, set_uvalue = state

xmanager, 'ss_prof', base, /no_block

end
