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

Home » Public Forums » archive » Re: Beginning GUI Applications
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: Beginning GUI Applications [message #21267] Fri, 11 August 2000 00:00
Rick Towler is currently offline  Rick Towler
Messages: 821
Registered: August 1998
Senior Member
> Is there a way to pass values between event procedures?

finally one I can answer! :)

Use a data structure. Stick it in the UValue of the top level base
widget. There are a few details but this is the main idea. You get at
the data by using the Get_UValue keyword of Widget_Control.

pro my_event_handler, event
;we have the event structure. It contains the reference to our tlb
;widget. Use that to get our user value that we defined in
;our main program routine.
WIDGET_CONTROL, event.top, GET_UVALUE=info, /NO_COPY

;now I can do anything I want with my info structure
info.xsize=200
info.ysize=400

;Just don't forget to put it back when your done!
WIDGET_CONTROL, event.top, SET_UVALUE=info, /NO_COPY
end

pro my_gui_main

;create the top level base
tlb=widget_base(column=1, mbar=menuID, /TLB_size_events)
;add buttons and draw areas or whatever

realize the widget hierarchy
widget_control, tlb, /realize

;create the anonymous data structure "info"
info = {
;stick important variables/pointers/objects
;you need to pass around in here. For example:
bigdataset:ptr_new(), $
plotobject:obj_new(), $
xsize:50, $
ysize:50, $
}


;here's the good stuff
;stick your data structure into the UValue of the TLB widget
WIDGET_CONTROL, tlb, SET_UVALUE=info, /NO_COPY

;call x manager and your done here
end


You'll want to look at the IDl docs to understand the /NO_COPY keyword.
Basically it forces widget_control when getting uvalues to "detach" your
data from the source (in our case the UValue of the tlb widget) instead
of making a copy of the data. This is generally preferred but your
UValue becomes undefined and if you don't "reattach" your data to it
using Set_Uvalue the next time you try to get the UValue of your tlb it
will be undefined.

Clear as mud? Hopefully this will at least get you started.

You might want to pillage David's website/FTP server for example code.
He has a bunch of simpler widget programs that are well commented.
http://www.dfanning.com

-Rick Towler


hom@sask.usask.ca wrote:
>
> Is there a way to pass values between event procedures?
>
> I want several values to be carried and modified throughout my GUI
> application.
>
> When just coding, I use a main program. When using GUI's, where is the
> "main program"?
>
> I would really appreciate any help!!
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: transparent GIF pixels
Next Topic: page orientation

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

Current Time: Wed Oct 08 20:10:45 PDT 2025

Total time taken to generate the page: 0.00544 seconds