Re: Combining Slider and SetterBar in Manipulate
- To: mathgroup at smc.vnet.net
- Subject: [mg114960] Re: Combining Slider and SetterBar in Manipulate
- From: John Fultz <jfultz at wolfram.com>
- Date: Fri, 24 Dec 2010 04:12:17 -0500 (EST)
- Reply-to: jfultz at wolfram.com
The string is merely a label. The actual value of qt is the numeric value on
the lhs of the rules. So, instead of...
{{qt, 7, "Special"}, {7 -> "Rising", 5 -> "Smile", 20 -> "Saws",
12 -> "Falling"}, ControlType -> SetterBar}
it would be something like this...
{{qt, 3}, {7 -> "Rising", 5 -> "Smile", 20 -> "Saws",
12 -> "Falling"}, ControlType -> SetterBar}
I.e., the initial value would probably be a number (since you seem to be using
numbers as values...although that's certainly not required), and it has to be a
*different* number than any of the ones you're using.
Also...a bit of unsolicited advice. Your use of Block is a *bad* idea. It's
always bad to reference Block-scoped or Module-scoped variables declared outside
of a Manipulate or Dynamic from within that Manipulate/Dynamic. If you're
wanting to localize the variable 'someData', then Manipulate offers you an easy
way to do that. Add someData as a control variable, but no control appearance.
I.e.,
{someData, ControlType->None}
So, after my proposed changes, your code looks like:
Manipulate[
ListLinePlot[someData[[tinx, 2 ;;]]], {{tinx, 1, "Time"}, 1, 25,
1}, {{qt, 3}, {7 -> "Rising", 5 -> "Smile", 20 -> "Saws",
12 -> "Falling"}, ControlType -> SetterBar},
Pane[Text@Dynamic[tinx]], {someData, ControlType -> None},
ControlPlacement -> Top,
Initialization :> (someData =
Table[Sin[i j]*Cos[j] // N, {i, 25}, {j, 12}];
tinx = 1)]
Sincerely,
John Fultz
jfultz at wolfram.com
User Interface Group
Wolfram Research, Inc.
On Thu, 23 Dec 2010 03:56:25 -0500 (EST), JohnH wrote:
> I am looking for a solution to what should be a common and simple
> problem. I have a slider to control time, but I also want to use a
> SetterBar to pick out some interesting dates. The bare bones of my
> current attempt is:
>
> Block[{someData},
> Manipulate[
> ListLinePlot[someData[[tinx,2;;]]],
> {{tinx,1,"Time"},1,25,1},
> {{qt,7,"Special"},{7->"Rising",5->"Smile",20->"Saws",12-
>> "Falling"},ControlType->SetterBar},
> Pane[Text@Dynamic[tinx]],
> ControlPlacement->Top,
> Initialization:>(
> someData=Table[Sin[i j]*Cos[j]//N,{i,25},{j,12}];
> tinx=1)
> ]
> ]
>
> Ideally, none of the setter buttons would be selected if the time was
> not one of the special ones. Clicking on one of the setter buttons
> would set the time to that value.
>
> Any suggestions would be appreciated.