;+
; vmain
;	Put a value into a top-level variable.
;
; Usage:
;	vmain, value[, name]
;
; Arguments:
;	value	input	any	The value to be sent up to the main
;				program level
;	name	input	string	The name of the variable to use.
;
;
; Keywords:
;	default_name	input	string	A default value for the
;					variable name
;	group		input	long	The widget ID of a calling
;					widget.
;
; Notes:
;	If the name argument is not given, then the user is probmpted
;	for a name (possibly with a default).
;	If the group keyword is given, then the prompt is via a widget
;	interface, otherwise it is via the command line.
;
; History:
;	Original: 13/7/01; SJT
;	Add ability to send to a file: 19/12/02; SJT
;	Removed it again (made specific version for that): 6/1/03; SJT
;-

pro vmain_event, event

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

case mbut of
    'DO': begin
        if event.value eq 'DO' then $
          (scope_varfetch(state.name, level = 1, /enter)) = $
           *state.value
;           junk = routine_names(state.name, *state.value, $
;                                store = 1)

        ptr_free, state.value
        widget_control, event.top, /destroy
    end
    'NAME': begin
        state.name = event.value
        widget_control, state.doid, sensitive =  state.name ne ''
    end
endcase

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

end

pro vmain, value, name, default_name = default_name, group = group
    
if n_params() eq 1 then begin
    if keyword_set(default_name) then dn = default_name $
    else dn = ''

    if keyword_set(group) then begin
        

        base = widget_base(/column, $
                           title = "Top-level name", $
                           /modal, $
                           group = group)

        label = widget_label(base, $
                            value = "Save value to $MAIN$")
        junk = widget_label(base, $
                            value = "or to file")

        junk = cw_ffield(base, $
                         label = "Name:", $
                         uvalue = 'NAME', $
                         /text, $
                         xsize = 10, $
                         /all_events, $
                         value = dn)

        junk = cw_bgroup(base, $
                         /row, $
                         ['Apply', 'Cancel'], $
                         button_uvalue = ['DO', 'DONT'], $
                         uvalue = 'DO', $
                         ids = bids)
        widget_control, bids[1], sensitive = dn ne ''


        state = {vmain_state, $
                 doid: bids[1], $
                 name: dn, $
                 value: ptr_new(value)}

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

        xmanager, 'vmain', base

    endif else begin
        name = ''
        read, "Enter variable name (or space to cancel) ["+dn+"] :_", $
          name
        if name eq '' then name = dn
        if name ne ' ' then (scope_varfetch(name, level = 1, /enter)) $
          = value
; junk = routine_names(name, value, $
;                                                 store = 1) 
    endelse
    
endif else if n_params() eq 2 then (scope_varfetch(name, level = 1, /enter)) $
          = value
; junk = routine_names(name, value, $
;                                                         store = 1) 
end
