Re: Widget Event_Pro question [message #59600 is a reply to message #59480] |
Wed, 02 April 2008 08:38   |
Spon
Messages: 178 Registered: September 2007
|
Senior Member |
|
|
On Apr 2, 4:23 pm, David Fanning <n...@dfanning.com> wrote:
> Spon writes:
>> I need to define this array before any instances of widget B are open.
>> Can I use a value of [-1L] for this? Or is -1 a valid widget ID number
>> that might cause problems later if IDL decides to label one of my
>> widgets -1 at some point?
>
> All widget IDs are positive. But, a pointer comes
> to mind, too. :-)
>
> Cheers,
>
> David
> --
> David Fanning, Ph.D.
> Fanning Software Consulting, Inc.
> Coyote's Guide to IDL Programming (www.dfanning.com)
> Sepore ma de ni thui. ("Perhaps thou speakest truth.")
I think I'm already doing what you suggest, but just to be sure:
Graphs = PTR_NEW([-1L])
UVal = {Img:Img $
... ;
... ; Loads of other garbage
Graphs:Graphs }
WIDGET_CONTROL, Base, SET_UVALUE = UVal
And then, when I realize a graph widget:
; Register the widget with top level UVal structure
*UVal.Graphs = [(*UVal.Graphs), GraphBase]
WIDGET_CONTROL, Event.Top, SET_UVAL = UVal
; Register top level widget ID in Graph widget UVAL
GraphUVal = { GroupLeader:Event.Top }
WIDGET_CONTROL, GraphBase, SET_UVAL = GraphUVal
Is this what you meant by using a pointer? Or could I do it more
efficiently? The main problem this creates is in my graph deleting
procedure, where I have to first check if the array contains any non-
minus-one entries and then loop through them all, destroying the
associated widgets and reseting them to -1.
Oh, and another question while I'm at it: I'm trying to check if a
widget still exists before trying to load its UVal, I thought that
IF WIDGET_INFO(GraphUVal.GroupLeader, /ACTIVE) THEN BEGIN
would do what I want, but apparently the /ACTIVE keyword doesn't work
with an argument.
Chris
|
|
|