Re: widget confusion [message #68852] |
Mon, 23 November 2009 12:56 |
rogass
Messages: 200 Registered: April 2008
|
Senior Member |
|
|
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
|
|
|
Re: widget confusion [message #68855 is a reply to message #68852] |
Mon, 23 November 2009 07:59  |
Wout De Nolf
Messages: 194 Registered: October 2008
|
Senior Member |
|
|
On Mon, 23 Nov 2009 16:53:11 +0100, Wox <spam@nomail.com> wrote:
>
>> function menu_controls,ptr
>> ...
>> widget_control,tlb,set_uvalue=ptr
>> xmanager,'menu_controls',tlb
>
> During restoring (Open), ptr will be changed. You do "widget_control,
> event.top, set_uvalue=ptr" but that doesn't change anything for the
> local "ptr" variable in menu_controls, which is the one you return at
> the end. Hence, nothing changed.
>
>> return,ptr
>> end
So you should not change the pointer but rather what it points to.
Something like this maybe?
'open' : begin
restore, dialog_pickfile(),/verbose
*ptr=temporary(struc)
(*ptr)[1].bp = 0b
print,'imported values:',(*ptr).(0)
widget_control, event.top, set_uvalue=ptr
widget_control,event.top,/destroy
end
'saveas' : begin
struc=*ptr
save,struc,filename=dialog_pickfile()
(*ptr)[1].bp = 0b
widget_control, event.top, set_uvalue=ptr
widget_control,event.top,/destroy
end
|
|
|
Re: widget confusion [message #68856 is a reply to message #68855] |
Mon, 23 November 2009 07:53  |
Wout De Nolf
Messages: 194 Registered: October 2008
|
Senior Member |
|
|
> function menu_controls,ptr
> ...
> widget_control,tlb,set_uvalue=ptr
> xmanager,'menu_controls',tlb
During restoring (Open), ptr will be changed. You do "widget_control,
event.top, set_uvalue=ptr" but that doesn't change anything for the
local "ptr" variable in menu_controls, which is the one you return at
the end. Hence, nothing changed.
> return,ptr
> end
|
|
|
Re: widget confusion [message #68857 is a reply to message #68856] |
Mon, 23 November 2009 07:50  |
jeanh
Messages: 79 Registered: November 2009
|
Member |
|
|
chris wrote:
> Hi there,
> i want to create a program which allows to change parameters by manual
> input, by opening saved parameters and by restoring defaults within a
> widget. After finishing those kinds of inputs the program shall be
> closed by the O.K-Button. Unfortunately, the inputs are ignored. Who
> can help me a little bit with the event handling.
>
> THANKS in advance and regards
>
> CR
>
Hi,
there are a few things here... first, ptr is a pointer, so you do not
need to save it each time you do something... especially when the very
next action is to destroy the widget.
Now, I don't see you reading your value. You need to save "field1" in
your pointer, then access the corresponding value with
widget_control,event.top, get_uValue=ptr ;(begining of the event handler)
widget_control,(*ptr).fieldID, get_value=aot_def_value
Jean
> The following program code may better explain what I mean:
>
> usage: ptr=menu(ptr=ptr) &print, 'Widget result', (*ptr).(0)
>
> pro menu_controls_event,event,ptr
> widget_control, event.top, get_uvalue=ptr
> widget_control, event.id,get_uvalue=action
> case action of
> 'open' : begin
> restore, dialog_pickfile()
> (*ptr)[1].bp = 0b
> print,'imported values:',(*ptr).(0)
> widget_control, event.top, set_uvalue=ptr
> widget_control,event.top,/destroy
> end
> 'saveas' : begin
> save,ptr,filename=dialog_pickfile()
> (*ptr)[1].bp = 0b
> widget_control, event.top, set_uvalue=ptr
> widget_control,event.top,/destroy
> end
> 'ok' : begin
> (*ptr)[1].bp = 1b
> widget_control, event.top, set_uvalue=ptr
> widget_control,event.top,/destroy
> end
> 'cancel' : begin
> (*ptr)[1].bp = 1b
> widget_control, event.top, set_uvalue=ptr
> widget_control,event.top,/destroy
> end
> 'exit' : begin
> (*ptr)[1].bp = 1b
> widget_control, event.top, set_uvalue=ptr
> widget_control,event.top,/destroy
> end
> '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, set_uvalue=ptr
> 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)
> print, 'Final:',(*ptr).(0)
> if (*ptr)[1].bp eq 0b then ptr=menu(ptr=ptr)
> return, ptr
> end
|
|
|