Ok, thank you both. You solved the problem - certainly I had some
blonde moments :)
The full working example code is now:
pro menu_controls_event,event,ptr
widget_control, event.top, get_uvalue=ptr
widget_control, event.id,get_uvalue=action
(*ptr)[1].bp = 1b
case action of
'open' : begin
restore, dialog_pickfile()
*ptr=temporary(struc)
(*ptr)[1].bp = 0b
widget_control,event.top,/destroy
end
'saveas' : begin
struc=*ptr
print,'saved values:',struc.(0)
save,struc,filename=dialog_pickfile()
(*ptr)[1].bp = 0b
end
'ok' : widget_control,event.top,/destroy
'cancel' : widget_control,event.top,/destroy
'exit' : widget_control,event.top,/destroy
'aot_def' : begin
(*ptr)[1].bp = 0b
(*ptr)[1].aot_def = float(event.(where(strupcase(tag_names
(event)) eq 'VALUE')))
widget_control, event.top, set_uvalue=ptr
end
'def' : begin
(*ptr)[1].bp= 0b
(*ptr)[1] =(*ptr)[0]
widget_control,event.top,/destroy
end
endcase
end
function menu_controls,ptr
tlb = widget_base(title='test',row=3,mbar=men)
menubase= widget_button(men,value='File')
menu1 = widget_button(menubase,value='Open',uvalue='open')
menu2 = widget_button(menubase,value='Save as',uvalue='saveas')
menu3 = widget_button(menubase,value='Defaults',uvalue='def')
menu4 = widget_button(menubase,value='Exit',uvalue='exit')
field1 = cw_field (tlb,value=(*ptr)[1].aot_def,title='AOT (Optical
Thickness)',$
uvalue='aot_def',/all_events,/column)
field2 = widget_button (tlb,value='Ok',uvalue='ok', /align_center)
field3 = widget_button (tlb,value='Cancel',uvalue='cancel',/
align_center)
widget_control,tlb,/realize
widget_control,tlb,set_uvalue=ptr
xmanager,'menu_controls',tlb
return,ptr
end
function menu,ptr=ptr
if ~keyword_set(ptr) or ~n_elements(ptr) then begin
ptr = {aot_def : 0.1234,bp:0b }
ptr = ptr_new(replicate(ptr,2),/no_copy)
endif
ptr = menu_controls(ptr)
if (*ptr)[1].bp eq 0b then ptr=menu(ptr=ptr)
return, ptr
Thanks again!!!
CR
|