On Apr 2, 4:23 pm, David Fanning <n...@[EMAIL PROTECTED]
> 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)
> Se****e 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


|