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

Home » Public Forums » archive » Re: Communication between different widget bases
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: Communication between different widget bases [message #23975] Fri, 02 March 2001 10:17 Go to next message
davidf is currently offline  davidf
Messages: 2866
Registered: September 1996
Senior Member
Michael Baca (mbaca@bos.fti-net.com) writes:

> I have a program that allows the user to view a TVSCL of a data cube with
> intensity obtained at (x,y) position (rows/columsn) over time. Typically the
> user plots the intensity at all positions at a single slice in time, i.e.
> TVSCL, A(*,*,n). I would like to allow the user to open a new window that
> will show the intensity plot vs. time for the position under the mouse
> pointer. Regrettably, I have already used up all of the space in my current
> WIDGET_BASE and I do not have room to add another draw widget. I would like
> to open a new WIDGET_BASE with a draw widget that will change as the mouse
> moves over the image.
>
> Does anyone have any suggestions? Most of the work I have done before
> spawned new WIDGET_BASEs that ran independent of the original one. I can
> already pop up a plot of the point under the mouse after a mouse release
> event, but that's not what I had in mind. I want the plot to change as the
> user moves the mouse to new positions. Is there any way to have real-time
> communication between two widget bases?

I guess there would probably be a dozen different ways
to do this. But the simplest is to just write the pop-up
window as a function that returns information you are
interested in. For example, if you call the function
from within a widget event handler, it might be written
like this:

FUNCTION INTENSITY_PLOT, time, intensity, Group_Leader=gleader
tlb = Widget_Base(Group_Leader=gleader)
drawID = Widget_Draw(tlb, XSize=400, YSize=400)
Widget_Control, tlb, /Realize
Widget_Control, drawID, Get_Value=wid
WSet, wid
Plot, time, intensity
RETURN, {tlb:tlb, drawID:drawID, wid:wid}
END

Suppose you have a field in the info structure
of your main program where you store this information:

info.iplot = Intensity_Plot(time, intensity, Group_Leader=event.top)

Then, when you want to update the plot, all you have to
do it this:

IF Widget_Valid(info.iplot.drawID) THEN BEGIN
WSet, info.iplot.wid
Plot, time, intensity
ENDIF ELSE BEGIN
info.iplot = Intensity_Plot(time, intensity, Group_Leader=event.top)
ENDELSE

You might even want to close the pop-up window
for some reason:

Widget_Control, info.iplot.tlb, /Destroy

Cheers,

David
--
David Fanning, Ph.D.
Fanning Software Consulting
Phone: 970-221-0438 E-Mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Toll-Free IDL Book Orders: 1-888-461-0155
Re: Communication between different widget bases [message #24072 is a reply to message #23975] Fri, 02 March 2001 13:01 Go to previous message
Michael Baca is currently offline  Michael Baca
Messages: 5
Registered: October 1999
Junior Member
Daid,

Thank you for the idea. So far, this appears to do exactly what I need.
Thanks.

Mike
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Re: JULDAY 5.4 not same as 5.3?
Next Topic: Re: Widget event handlers

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

Current Time: Wed Oct 08 17:46:50 PDT 2025

Total time taken to generate the page: 0.00595 seconds