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
>