Hi,
> My actual problem is quite involved but I am including a simple
> example for illustrative purposes. I am trying to reproduce
> "Enabled"-like functionality as follows:
>
> Clear[y, SliderModule]; SetAttributes[SliderModule, HoldAll];
> SliderModule[enabled_] := DynamicModule[{x = 0}, {Slider[ Dynamic[x,
> (x = If[enabled, #, 0]) &]], Dynamic[x]}] {Checkbox[Dynamic[y]],
> Dynamic[y], SliderModule[y]}
>
> Ideally when the checkbox is checked then the user is able to move
> the slider; but when it is unchecked the slider resets to zero. The
> problem is when I uncheck the checkbox the slider doesn't reset to
> zero until I click on the slider itself. Is there a way to get the
> slider to immediately reset when I uncheck the checkbox? Please
> remember that this is a simplification of my actual problem so try to
> keep the SliderModule structure the same.
I think this would work as you want:
Clear[isEnabled, sliderModule];
sliderModule[Dynamic[enabled_]] := DynamicModule[{x = 0},
Row[{
Slider[
Dynamic[x],
Enabled -> Dynamic[
If[TrueQ[enabled],(*Print[x];*)True, x = 0; False]
]
],
Dynamic[x]
}]
];
{Checkbox[Dynamic[isEnabled]], Dynamic[isEnabled],
sliderModule[Dynamic[isEnabled]]}
it has the drawback though that the Enabled option will be reevaluated
for every change in x, which might or might not be a problem and can be
checked by uncommenting the Print. Adding the TrackedSymbols option for
that dynamic seems to not work as expected. So here is another version
which recreates the slider when the enable-state is changed but doesn't
do any unnecessary evaluations when the slider is moved:
Clear[isEnabled, sliderModule];
sliderModule[Dynamic[enabled_]] := DynamicModule[{x = 0},
Row[{
Dynamic[
(*Print[x];*)
If[Not@enabled, x = 0];
Slider[Dynamic[x], Enabled -> TrueQ[enabled]],
TrackedSymbols :> {enabled}
],
Dynamic[x]
}]
];
hth,
albert