MathGroup Archive 2009

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

Search the Archive

Manipulate: How to correctly adjust one control parameters based on current setting of another control?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg103049] Manipulate: How to correctly adjust one control parameters based on current setting of another control?
  • From: "Nasser Abbasi" <nma at 12000.org>
  • Date: Sat, 5 Sep 2009 05:37:17 -0400 (EDT)
  • Reply-to: "Nasser Abbasi" <nma at 12000.org>

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




  • Prev by Date: Re: Quit Kernel when using Manipulate crashes
  • Next by Date: Inputting Dynamic Variables
  • Previous by thread: smooth Jowkouski Julia of a sinod wing shape
  • Next by thread: Re: Manipulate: How to correctly adjust one control parameters based on current setting of another control?