Re: How to find which variable caused the trigger in Manipulate[]
- To: mathgroup at smc.vnet.net
- Subject: [mg104149] Re: How to find which variable caused the trigger in Manipulate[]
- From: "Nasser M. Abbasi" <nma at 12000.org>
- Date: Wed, 21 Oct 2009 06:29:32 -0400 (EDT)
- References: <2009102062036.015058@jfultz2winlap>
- Reply-to: "Nasser M. Abbasi" <nma at 12000.org>
> 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 response...in
this example, whether r is initially set to the value of x or y is
undefined."
Yes, you are correct, I see your point more clearly now. This is the _main_
problem.
" 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
evaluation.
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
--Nasser