MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to find which variable caused the trigger in Manipulate[]

  • To: mathgroup at
  • Subject: [mg104149] Re: How to find which variable caused the trigger in Manipulate[]
  • From: "Nasser M. Abbasi" <nma at>
  • Date: Wed, 21 Oct 2009 06:29:32 -0400 (EDT)
  • References: <2009102062036.015058@jfultz2winlap>
  • Reply-to: "Nasser M. Abbasi" <nma at>

> Manipulate[Row[{
> Dynamic[Refresh[r = x; "", TrackedSymbols -> {x}]],
> Dynamic[Refresh[r = y; "", TrackedSymbols -> {y}]],
> Dynamic[Refresh[Text[r], TrackedSymbols -> {y, x}]]}
> ],
> {x, 0, 1, 0.01},
> {y, 0, 1, 0.01},
> {r, "", "", ControlType -> None}
> ]


>>>> "John Fultz" wrote in message

"I can't reproduce this.  In 7.0.0 and 7.0.1, your example perfectly 
remembers for me both the values of x and y, setting the sliders at exactly 
the right point upon reloading.  Perhaps what you meant is that it's not 
remembering the value of *r* after you move the x slider, save, and reload."

Yes, sorry John I was not too clear. Yes, that is what I meant.  The "x" 
slide position does remain in the same position as before closing, BUT what 
is displayed in the Manipulate output is NOT what was there just before 
closing the notebook (which was the value of the current "x" slider). This 
is becuase what is being displayed comes from "r" now "x", and "r" is being 
refreshed each time the notebook is reopened.

"It does properly store the value of r, but once you reload the notebook, 
all of the Dynamics compute again.  Since computing the Dynamics has the 
side effect of setting r, the stored value of r will get wiped out."

Yes, but the problem is that "r" is what gets displayed, hence the display 
does change when closing/opening the notebook, and this is the problem. The 
Display as well as the slides positions should remain the same as before 
closing the notebook. This is a demo requirments. This is what happens with 
Manipulate without using Dynamics[Refresh[...]]] so I was trying to get this 
to behave the same way.

"  This amounts to the same problem as I mentioned in my first 
this example, whether r is initially set to the value of x or y is 

Yes, you are correct, I see your point more clearly now. This is the _main_ 

"  It's undefined because there's nothing in the Mathematica documentation 
which guarantees the order in which the Dynamics are evaluated.  This is 
true both when you initially create it, and also when you load it again from 
disk (or copy and paste it, as well).  It so happens that it's evaluating 
Dynamics left-to-right in the Row, but that's not behavior you should count 
on.  So the setting of r (if that is, indeed, what
you're seeing) is within the designed behavior, and not a bug."

Ok. But now I need to find a way to fix this if I want to have the same GUI 
design as is. I need to way to have "r" have the same value as it was before 
closing the notebook.  Else, this whole approach will not work. I think 
there is some limitation here. I tried many trick to see if I can save "r" 
value somewhere and use a flag and such, I am still looking at it.

I needed a way to be able to detect which slider is being moved each time, 
and at the same time, when the user closes the notebook and reopen it, the 
sliders and the display to be restored to the same state as before closing 
the notebook.

The above 2 requirements seem not to be possible to achieve with the current 
Dynamic[Refresh[...]] solution due to the undefined order of Dynamic 

Oh, well, back to the drawing board. I could always go back to my old 
solution of using flags to remember the state from. But your solution above 
was much better, except for this one problem of how to restore "r" to its 
old value before closing.

Thanks for your help John


  • Prev by Date: Re: Question on Dynamic with "DockedCell"
  • Next by Date: Re: Question on Dynamic with "DockedCell"
  • Previous by thread: Re: How to find which variable caused the trigger in Manipulate[]
  • Next by thread: Re: Re: How to find which variable caused the trigger in Manipulate[]