comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: widget confusion
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Re: widget confusion [message #68852] Mon, 23 November 2009 12:56
rogass is currently offline  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 Go to previous message
Wout De Nolf is currently offline  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 Go to previous message
Wout De Nolf is currently offline  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 Go to previous message
jeanh is currently offline  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
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Re: Scope_Varfetch "IDL workbench" train wreck
Next Topic: Re: Philips MRI to DICOM converter

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 19:30:05 PDT 2025

Total time taken to generate the page: 0.00303 seconds