Viewing contents of file '../idllib/contrib/tappin/graffer/gr_ds_menus.pro'
;+
; GR_DS_MENUS
;	Make the menu to set the properties of an XY dataset
;
; Usage:
;	gr_ds_menus, optbb, pdefs
;
; Arguments:
;	optbb	long	input	The widget ID of the parent base
;	pdefs	struct	in/out	The Graffer data & control structure.
;
; History:
;	Farmed out from GRAFFER to facilitate maintenance: 6/12/96;
;	SJT
;	Moved event handler in: 17/1/97; SJT
;	Modify for extended symbol definitions + add compact key:
;	20/1/97; SJT
;	Add CAPTURE key to entry boxes, remove compact key: 6/2/97; SJT
;-

pro Gr_dsp_event, event

widget_control, event.id, get_uvalue = object

base = widget_info(/child, event.top)
widget_control, base, get_uvalue = pdefs, /no_copy

idraw_flag = 1
ichange = 1b
track_flag = strpos(tag_names(event, /struct), 'TRACK') ne -1

if (track_flag) then begin
    idraw_flag = 0
    ichange = 0b
    
    if (event.enter eq 0) then begin
        graff_msg, pdefs.ids.hlptxt, ''
        goto, miss_case
    endif
endif

case object of
    'PSYM': if (track_flag) then $
      graff_msg, pdefs.ids.hlptxt, 'Select plotting symbol for current ' + $
      'data set' $
    else begin
        handle_value, pdefs.data, data, /no_copy
        data(pdefs.cset).psym = event.value
        handle_value, pdefs.data, data, /set, /no_copy
    end
    
    'PLINE': if (track_flag) then $
      graff_msg, pdefs.ids.hlptxt, 'Select joining style for current ' + $
      'data set' $
    else begin
        handle_value, pdefs.data, data, /no_copy
        data(pdefs.cset).pline = event.value
        handle_value, pdefs.data, data, /set, /no_copy
    end
    
    'SSIZE': if (track_flag) then $
      graff_msg, pdefs.ids.hlptxt, 'Set size for plot symbol ' + $
      'in current data set (floating point)' $
    else begin
        handle_value, pdefs.data, data, /no_copy
        data(pdefs.cset).symsize = event.value
        handle_value, pdefs.data, data, /no_copy, /set
    end
        
    
    'COLOUR': if (track_flag) then $
      graff_msg, pdefs.ids.hlptxt, 'Select colour for current data set' $
    else begin
        handle_value, pdefs.data, data, /no_copy
        data(pdefs.cset).colour = event.value-1
        handle_value, pdefs.data, data, /set, /no_copy
    end
        
    'STYLE': if (track_flag) then $
      graff_msg, pdefs.ids.hlptxt, 'Select line style for current data set' $
    else begin
        handle_value, pdefs.data, data, /no_copy
        data(pdefs.cset).line = event.value
        handle_value, pdefs.data, data, /set, /no_copy
    end
    
    'THICK': if (track_flag) then $
      graff_msg, pdefs.ids.hlptxt, 'Set line thickness for current ' + $
      'data set (integer)' $
    else begin
        handle_value, pdefs.data, data, /no_copy
        data(pdefs.cset).thick = event.value
        handle_value, pdefs.data, data, /set, /no_copy
    end
    
    'POLAR': if (track_flag) then $
      graff_msg, pdefs.ids.hlptxt, 'Select rectangular or polar mode' $
    else begin
        handle_value, pdefs.data, data, /no_copy
        data(pdefs.cset).mode = event.value
        handle_value, pdefs.data, data, /no_copy, /set
    end
    
    'XTRA': begin
        val = str_sep(event.value, '.')
        if (n_elements(val) eq 1) then graff_msg, pdefs.ids.hlptxt, $
          'Set other dataset options' $
        else case val(1) of
            'Sort X axis': if (track_flag) then $
              graff_msg, pdefs.ids.hlptxt, 'Toggle sorting of X axis' + $
              ' values before plotting current data set' $
            else begin
                handle_value, pdefs.data, data, /no_copy
                if (val(2) eq 'On') then data(pdefs.cset).sort = 1b $
                else data(pdefs.cset).sort = 0b
                handle_value, pdefs.data, data, /no_copy, /set
            endelse
    
            'Clip to box': if (track_flag) then $
              graff_msg, pdefs.ids.hlptxt, 'Toggle clipping of' + $
              ' current dataset to plot axes' $
            else begin
                handle_value, pdefs.data, data, /no_copy
                if (val(2) eq 'On') then data(pdefs.cset).noclip = 0b $
                else data(pdefs.cset).noclip = 1b
                handle_value, pdefs.data, data, /no_copy, /set
            endelse
            
            'Mouse editing':  if (track_flag) then $
              graff_msg, pdefs.ids.hlptxt, 'Toggle use of mouse to ' + $
              'edit dataset' $
            else begin
                handle_value, pdefs.data, data, /no_copy
                if (val(2) eq 'Enabled') then data(pdefs.cset).medit = 1b $
                else data(pdefs.cset).medit = 0b
                
                widget_control, pdefs.ids.draw, get_uvalue = state
                if (state eq 'DRAW') then widget_control, $
                  pdefs.ids.draw, draw_button_events = $
                  data(pdefs.cset).medit, track = $
                  data(pdefs.cset).medit 
                handle_value, pdefs.data, data, /no_copy, /set
            endelse
        endcase
    end
    
endcase

if (ichange) then begin
    handle_value, pdefs.data, data, /no_copy
    if (data(pdefs.cset).type eq 9 or $
        data(pdefs.cset).type eq -4) then begin
        widget_control, pdefs.ids.plopts(0), map = 0
        widget_control, pdefs.ids.plopts(1), map = 1
    endif else begin
        widget_control, pdefs.ids.plopts(1), map = 0     
        widget_control, pdefs.ids.plopts(0), map = 1     
    endelse
    handle_value, pdefs.data, data, /no_copy, /set
endif

if (idraw_flag and (pdefs.opts.update eq 0)) then gr_plot_object, pdefs
if (ichange) then begin
    pdefs.chflag = 1b
    pdefs.transient.changes = pdefs.transient.changes+1
    if (pdefs.transient.changes gt 20) then begin
        gr_bin_save, pdefs, /auto
        if (pdefs.opts.update eq 1) then gr_plot_object, pdefs
    endif
endif
widget_control, pdefs.ids.chtick, map = pdefs.chflag

Miss_case:

widget_control, base, set_uvalue = pdefs, /no_copy

end


pro Gr_ds_menus, optbb, pdefs

common Gr_psym_maps, psym_bm

pdefs.ids.plopts(0) = widget_base(optbb, /column, xpad = 1, ypad = 1, $
                                  space = 1, event_pro = 'gr_dsp_event')

jjb = widget_base(pdefs.ids.plopts(0), /row, xpad = 1, ypad = 1, space = 1)

pdefs.ids.line = cw_bbselector(jjb, ['____',  $
                                     '....', $
                                     '_ _ ', $
                                     '_._.', $
                                     '_...', $
                                     '__  '], $
                              set_value = 0, uvalue = 'STYLE', $
                              label_left = 'Style:', /track)

pdefs.ids.thick = graff_enter(jjb, /int, /all_ev, xsize = 2, value = $
                              1, uvalue = 'THICK', format = "(I2)", $
                              label = 'Thick:', /track, /capture)

                                ; Change symbol size

pdefs.ids.symsize = graff_enter(jjb, /float, /all_ev, value = '1.0', $
                                uvalue = 'SSIZE', xsize = 5, label = $
                                'Size:', format = "(f5.1)", $
                                /track, /capture)

                                ; Colour, linestyle, thickness etc.

col_list = ['Omit', $
            'White (bg)', $
            'Black', $
            'Red', $
            'Green', $
            'Blue', $
            'Cyan', $
            'Magenta', $
            'Yellow', $
            'Orange', $
            '#7f ff 00', $
            '#00 ff 7f', $
            '#00 7f ff', $
            '#7f 00 ff', $
            'Mauve', $
            'Dark Grey', $
            'Light Grey']

pdefs.ids.colour = cw_bbselector(jjb, col_list, uvalue = 'COLOUR', $
                                 set_value = 1, label_left = $
                                 'Colour:', /track)


jjb = widget_base(pdefs.ids.plopts(0), /row, xpad = 1, ypad = 1, $
                  space = 1)

if (n_elements(psym_bm) eq 0) then gr_psym_bitm
pdefs.ids.psym = cw_bbselector(jjb, psym_bm, uvalue = 'PSYM', $
                               label_left = 'Symbol:', /track) 

pdefs.ids.pline = cw_bbselector(jjb, ['None', 'Line', 'Histo'], uvalue $
                                = 'PLINE', label_left = 'Join:', $
                                /track)


pdefs.ids.mode = cw_bbselector(jjb, ['Rect', 'Polar', $
                                    'Polar (°)'], uvalue = $
                               'POLAR', set_value = 0, /track, $
                               label_left = 'Coords:')

xtras = [{CW_PDSMENU_S, flags:3, name:'Extras', state:0b}, $
         {cw_pdsmenu_s, 1, 'Sort X axis', 0b}, $
         {cw_pdsmenu_s, 0, 'Off', 0b}, $
         {cw_pdsmenu_s, 2, 'On', 0b}, $
         {cw_pdsmenu_s, 1, 'Clip to box', 0b}, $
         {cw_pdsmenu_s, 0, 'On', 0b}, $
         {cw_pdsmenu_s, 2, 'Off', 0b}, $
         {cw_pdsmenu_s, 3, 'Mouse editing', 0b}, $
         {cw_pdsmenu_s, 0, 'Disabled', 0b}, $
         {cw_pdsmenu_s, 2, 'Enabled', 0b}]


junk = cw_pdtsmenu(jjb, xtras, /return_full_name, uvalue = 'XTRA', $
                   /track, /states, ids = buts)
xpos = [1, 4, 7]
pdefs.ids.dsxtra = buts(xpos)

;;pdefs.ids.clip = cw_bbselector(jjb, ['Yes', 'No'], uvalue = $
;;                              'CLIP', set_value = 0, label_left = $
;;                              'Clip?:', /track)
;;pdefs.ids.sort = cw_bbselector(jjb, ['No', 'Yes'], uvalue = $
;;                              'SORT', set_value = 0, label_left = $
;;                              'Sort X?:', /track)

end