
pro spex_fit::xfit_comp_opt_update_widget, wbase
widget_control, wbase, get_uvalue=state

erange = state.erange
s_erange = erange[0] eq -1 ? strpad('All',20) : format_intervals(erange, format='(f9.1)')
widget_control, state.w_erange, set_value='  ' + s_erange + '  '

widget_control, state.w_maxiter, set_value=state.maxiter

widget_control, state.w_uncert, set_value=state.uncert

end
;-----
; Event handlers can't be object methods, so this is just a wrapper to get to the method

pro xfit_comp_opt_event,event
widget_control,event.top,get_uvalue=state
if obj_valid(state.object) then state.object->xfit_comp_opt_event,event
return & end

;-----
; xfit_comp_opt event handler
pro spex_fit::xfit_comp_opt_event, event

widget_control, event.top, get_uvalue=state

widget_control, event.id, get_uvalue=uvalue

if not exist(uvalue) then return

exit = 0

case uvalue of

	'change_erange': begin
		erange_choice = state.erange_choices[widget_info(state.w_erange_plot, /droplist_select)]
		if strpos(erange_choice, 'Standard') ne -1 then $
			self -> plot_spectrum, /overlay_back, spex_units='flux'
		;widget_control, state.w_int_sel, get_value=full_options
		full_options=0
		(self -> get(/obj,class='spex_fitrange')) -> intervals, /erange, full_options=full_options
		end

	'draw_erange': begin
		if not self->valid_plot(/xyplot) then $
			self -> plot_spectrum, /overlay_back, spex_units='flux'
		intervals = self -> get(/spex_erange)
		plotman_obj = self -> get_plotman_obj()
		if intervals[0] ne -1 then $
			plotman_draw_int,'all',{plotman_obj:plotman_obj}, intervals=intervals, type='Analysis'
		end

	'maxiter': state.maxiter = event.value

	'uncert': state.uncert = event.value

	'accept': begin
		self -> set, spex_erange=state.erange, mcurvefit_itmax=state.maxiter, spex_uncert=state.uncert
		exit = 1
		end

	'cancel': exit = 1

	else:

endcase

if exit then widget_control, state.wbase, /destroy

if xalive (state.wbase) then begin
	widget_control, state.wbase, set_uvalue=state
	self -> xfit_comp_opt_update_widget, state.wbase
endif
end

;-----

pro spex_fit::xfit_comp_opt, group=group

wbase = widget_base( group_leader=group, $
					/column, $
					xpad=5, $
					ypad=0, $
					space=10, $
					title='More Fit Options')

tmp = widget_label (wbase, value='More Fit Options', /align_center)

w_optbase = widget_base (wbase, /column, space=10, /frame)

w_erange_base = widget_base (w_optbase, /row, space=10)
w_erange = widget_droplist (w_erange_base, title='Energy range to fit:', $
					value='xxxxxxxxxxxxxxxxxxxxx', uvalue='none')
;w_nbands = widget_label (w_bands_base1, value='', /dynamic_resize)
tmp = widget_button (w_erange_base, value='Change', uvalue='change_erange')
erange_choices = ['Current spectrum plot', 'Standard erange plot']
w_erange_plot = widget_droplist(w_erange_base, title='Use:', value=erange_choices, uvalue='none')
tmp = widget_button (w_erange_base, value='Show', uvalue='draw_erange')

w_optbase2 = widget_base (w_optbase, /row, space=20)

w_maxiter = cw_edroplist (w_optbase2, value=1, format='(i5)', $
	xsize=5, label='# Iterations: ', drop_values=[1,5,10,20,50,100,200,300], uvalue='maxiter')

w_uncert = cw_edroplist (w_optbase2, value=.05, format='(f4.2)', $
	xsize=5, label='Systematic Uncert: ', drop_values=[.01,.02,.03,.04,.05,.06,.07,.08,.09,.10], $
	uvalue='uncert')

w_buttonbase = widget_base (wbase, /row, space=20, /align_center)

tmp = widget_button (w_buttonbase, value='Accept', uvalue='accept')
tmp = widget_button (w_buttonbase, value='Cancel', uvalue='cancel')

widget_offset, group, newbase=wbase, xoffset, yoffset

widget_control, wbase, xoffset=xoffset, yoffset=yoffset

widget_control, wbase, /realize

state = {wbase: wbase, $
	w_erange: w_erange, $
	w_erange_plot: w_erange_plot, $
	w_maxiter: w_maxiter, $
	w_uncert: w_uncert, $
	erange_choices: erange_choices, $
	erange: self->get(/spex_erange), $
	maxiter: self->getalg(/maxiter), $
	uncert: self->get(/spex_uncert), $
	object: self }

widget_control, wbase, set_uvalue=state

self -> xfit_comp_opt_update_widget, wbase

xmanager, 'xfit_comp_opt', wbase, group=group, no_block=0
end