function MB_data_parse_input

forward_function MB_DP_segment_selection, MB_DP_select_input_file, MB_DP_select_output_file, MB_DP_order_selection, MB_DP_cancel_event, MB_DP_execute_event

main_base = widget_base(title = 'MB DATA PARSE', xoffset = 300, yoffset = 300, column=1)

input_base = widget_base(main_base, row=2, frame=1)

  input_file_base = widget_base(input_base, column=1, frame=1, /base_align_right)
    input_file_label = widget_label(input_file_base, value = 'Input File:', /align_center)
    input_file_field = CW_field(input_file_base, title = '', xsize = 60)
    input_file_button = widget_button(input_file_base, value = 'Select Input File', event_func = 'MB_DP_select_input_file', uvalue = input_file_field)

  widget_control, input_file_base, set_uvalue = input_file_field

  input_order_base = widget_base(input_base, column=1, frame=1)
  ;  input_order_label = widget_label(input_order_base, value = 'Byte Order', /align_center)
    input_order_array = ['Swap Byte Order']
    input_order_button = cw_bgroup(input_order_base, input_order_array, /nonexclusive, /row, event_func = 'MB_DP_order_selection', frame = 0)

    widget_control, input_order_button, set_value = [0]

  widget_control, input_order_base, set_uvalue = input_order_button

  input_segment_base = widget_base(input_base, column=1, frame=1, /base_align_right)
    input_seglemt_label = widget_label(input_segment_base, value = 'Data Segment', /align_center)
    input_segment_array = ['Moessbauer', 'Energy', 'Drive Error', 'Temperature', 'Compressed Spectra', $
                           'Backup Spectrum', 'Instrument Parameters', 'Logbook', 'Hardware ID']
    input_segment_button = cw_bgroup(input_segment_base, input_segment_array, /exclusive, row=2, event_func = 'MB_DP_segment_selection', frame = 0)

    widget_control, input_segment_button, set_value = 0

  widget_control, input_segment_base, set_uvalue = input_segment_button

widget_control, input_base, set_uvalue = {input_file_base:input_file_base, input_order_base:input_order_base, input_segment_base:input_segment_base}


output_base = widget_base(main_base, column=1, frame=1)

  output_file_base = widget_base(output_base, column=1, frame=1, /base_align_right)
    output_file_label = widget_label(output_file_base, value = 'Output File:', /align_center)
    output_file_field = CW_field(output_file_base, title = '', xsize = 60)
    output_file_button = widget_button(output_file_base, value = 'Select Output File', event_func = 'MB_DP_select_output_file', uvalue = output_file_field)

  widget_control, output_file_base, set_uvalue = output_file_field

widget_control, output_base, set_uvalue = {output_file_base:output_file_base}


activate_base = widget_base(main_base, frame=1, column=2)
  execute_button = widget_button(activate_base, value = 'Execute', event_func = 'MB_DP_execute_event')
  cancel_button = widget_button(activate_base, value = 'Cancel', event_func = 'MB_DP_cancel_event')


  command_info_ptr = ptr_new({cancel:long(1)})
  input_info_ptr = ptr_new(/allocate_heap)
  output_info_ptr = ptr_new(/allocate_heap)

  base_info = {input_base:input_base, output_base:output_base, activate_base:activate_base, command_info_ptr:command_info_ptr, $
         input_info_ptr:input_info_ptr, output_info_ptr:output_info_ptr}

  widget_control, main_base, set_uvalue = base_info


widget_control, main_base, /realize
XMANAGER, 'MB_DATA_PARSE', main_base


command_info = *command_info_ptr
ptr_free, command_info_ptr

if (command_info.cancel EQ 0) then begin
  input_info = *input_info_ptr
  ptr_free, input_info_ptr

  output_info = *output_info_ptr
  ptr_free, output_info_ptr

endif else begin
  input_info = ''
  output_info = ''

  ptr_free, input_info_ptr
  ptr_free, output_info_ptr

endelse

return_info = {command_info:command_info, input_info:input_info, output_info:output_info}

return, return_info

END


function MB_DP_select_input_file, event

  widget_control, event.id, get_uvalue = output_file_field

  widget_control, output_file_field, get_value = current_out_filename
  new_filename = dialog_pickfile(file = current_out_filename, title = 'Select Input File')

  if (strlen(new_filename) GT 0) then begin
    widget_control, output_file_field, set_value = new_filename
  endif

return, 0

END


function MB_DP_segment_selection, event

;  print, event

return, 0

END


function MB_DP_order_selection, event

;  print, event

return, 0

END


function MB_DP_select_output_file, event

  widget_control, event.id, get_uvalue = output_file_field

  widget_control, output_file_field, get_value = current_out_filename
  new_filename = dialog_pickfile(file = current_out_filename, title = 'Select Output File')

  if (strlen(new_filename) GT 0) then begin
    widget_control, output_file_field, set_value = new_filename
  endif

return, 0

END



function MB_DP_cancel_event, event

  widget_control, event.top, /destroy

return, 0

END


function MB_DP_execute_event, event

  widget_control, event.top, get_uvalue = base_info

  widget_control, base_info.input_base, get_uvalue = input_base_info
  widget_control, input_base_info.input_file_base, get_uvalue = input_file_field
  widget_control, input_file_field, get_value = input_file

  widget_control, input_base_info.input_order_base, get_uvalue = input_order_button
  widget_control, input_order_button, get_value = input_order

  widget_control, input_base_info.input_segment_base, get_uvalue = input_segment_button
  widget_control, input_segment_button, get_value = input_segment

  input_info = {input_file:input_file, input_order:input_order, input_segment:input_segment}

  *base_info.input_info_ptr = input_info

  widget_control, base_info.output_base, get_uvalue = output_base_info
  widget_control, output_base_info.output_file_base, get_uvalue = output_file_field
  widget_control, output_file_field, get_value = output_file

  output_info = {output_file:output_file}

  *base_info.output_info_ptr = output_info

  (*base_info.command_info_ptr).cancel = 0

  widget_control, event.top, /destroy

return, 0

END