Re: Manipulate: How to correctly adjust one control parameters based on current setting of another control?
- To: mathgroup at smc.vnet.net
- Subject: [mg103068] Re: [mg103049] Manipulate: How to correctly adjust one control parameters based on current setting of another control?
- From: "Nasser Abbasi" <nma at 12000.org>
- Date: Sun, 6 Sep 2009 07:39:18 -0400 (EDT)
- References: <20090905140636.DGOQ8.61612.imail@eastrmwml28>
- Reply-to: "Nasser Abbasi" <nma at 12000.org>
> > You can nest Manipulate > > Manipulate[ > Manipulate[ > Text[x], > {{x, 1, "x ="}, > If[choice == 1, 0, 1], > If[choice == 1, 10, 20], > 0.1}], > {{choice, 1, "select choice"}, > {1 -> "UP", -1 -> "DOWN"}, > ControlType -> SetterBar}] > > > Bob Hanlon > Thank you Bob for your solution using nested Manipulate. Interesting. However, I am writing something with the hope to have it as a demonstration for the Wolfram demo site, and one is not allowed to use nested Manipulate. Here is the guidelines page: http://demonstrations.wolfram.com/guidelines.html "Nested Manipulates or functions that return Manipulate are not allowed. Keep things simple and use only one Manipulate command per Demonstration." Thank you again, --Nasser > ---- Nasser Abbasi <nma at 12000.org> wrote: > > ============= > Hello. > > This is Mathematica 7. > > I have Manipulate control (a slider) which I want to dynamically adjust > its > initial value and maximum value based on what one selects as a choice from > another control (SetterBar) and also change the position of the slider > (i.e. > the current value of the slider) based on the choice selected. > > The following code below seems to work initially. Using 'If' statement, I > check the current choice, and set the initial and maximum value of the > slider. > > The problem though is that the current value of the slider (i.e. the > current > position of the slider) remains at whatever value it was before the user > changed the choice, and this could result in the current value of the > slider > being larger than the maximum being set for the new choice. > > What I want is the following: When the user selects a new choice (from the > SetterBar), I want to reset the current position on the slider as well the > initial and the maximum value. > > Here is the code to help explain: > > Manipulate[Text[x], > > {{x, 1, "x="}, If[choice == 1, 0, 1], If[choice == 1, 10, 20], 0.1}, > > {{choice, 1, "select choice"}, {1 -> "UP", -1 -> "DOWN"}, ControlType -> > SetterBar} > > ] > > So, when one selects UP, I change the initial slider value to start at 1 > instead of at 0, and made the maximum slider to be 10 instead of 20. > However, the value of 'x' itself could be at say 12 at this time (becuase > the user was moving it), and so it overflows now. > > How can I also update 'x' to start at some specific value each time the > user > changes the choice from UP to DOWN or from DOWN to UP? Putting another If > statement does NOT work: > > Manipulate[Text[x], > > {{x, If[choice == 1, 3, 5], "x="}, If[choice == 1, 0, 1], If[choice == > 1, > 10, 20], 0.1}, > > {{choice, 1, "select choice"}, {1 -> "UP", -1 -> "DOWN"}, > ControlType -> SetterBar} > > ] > > I know I need to use Dynamic[] somewhere, but I not sure where and how to > force current slider value to rest each time the setterbar is clicked. I > need some sort of action associated with SetterBar which I can use each > time > its value changes, but SetterBar has no such option. > > any help is appreciated. > > --Nasser >