Re: How to find which variable caused the trigger in Manipulate[]
- To: mathgroup at smc.vnet.net
- Subject: [mg103788] Re: How to find which variable caused the trigger in Manipulate[]
- From: "Nasser Abbasi" <nma at 12000.org>
- Date: Tue, 6 Oct 2009 08:00:31 -0400 (EDT)
"Nasser Abbasi" <nma at 12000.org> wrote in message news:... > > Again, I want something like this > > Manipulate[ > process[( pickTheCorrectControlVariableWhichChanged ], > {a, 0, 1}, {b, 0, 1}, Initialization :> > > (process[arg_] := Module[{}, Plot[Sin[arg*x], {x, -Pi, Pi}]]) > ] > > I made some progress and I think I have a solution. I save the old value of each control variable in a global variable, then in the Manipulate expression, I check, using an If statement which current value of the control variable is different from the old value. I got it to work ok finally. Here is an example: olda = 999; oldb = 999; Manipulate[ If[olda != a, {olda = a; Style[StringJoin["a=", ToString[a]]]}, If[oldb != b, {oldb = b; Style[StringJoin["b=", ToString[b]]]}, Text["this message should NOT show up!"]]], {a, 0, 1}, {b, 0, 1}, LocalizeVariables -> True, TrackedSymbols -> {a, b}] Here is another example as the above, but with plot olda = 999; oldb = 999; Manipulate[ If[olda != a, {olda = a; Plot[Sin[a*x], {x, -Pi, Pi}, PlotLabel -> "a"]}, If[oldb != b, {oldb = b; Plot[Sin[b*x], {x, -Pi, Pi}, PlotLabel -> "b"]}, Text["this message should NOT show up!"]]], {a, 0, 1}, {b, 0, 1}, LocalizeVariables -> True, TrackedSymbols -> {a, b}, ContinuousAction -> False] So, the above seems to do what I want. i.e. a way to find which control variable changed. The problem is where to save these olda and oldb global variables as I am writing this for a demo. I could ofcourse have a Module around the whole thing as follows and have olda and olodb as local variables to the module Module[{oldb = 999, olda = 999}, Manipulate[If[olda != a, {olda = a; Plot[Sin[a*x], {x, -Pi, Pi}, PlotLabel -> "a"]}, If[oldb != b, {oldb = b; Plot[Sin[b*x], {x, -Pi, Pi}, PlotLabel -> "b"]}, Text["this message should NOT show up!"]]], {a, 0, 1}, {b, 0, 1}, LocalizeVariables -> True, TrackedSymbols -> {a, b}, ContinuousAction -> False ] ] But I am not sure if this is allowed in a demonstration. I need to check. If so, then my problem is finally solved --Nasser