Re: Help with dynamic functionality
- To: mathgroup at smc.vnet.net
- Subject: [mg128837] Re: Help with dynamic functionality
- From: awnl <awnl at gmx-topmail.de>
- Date: Thu, 29 Nov 2012 06:07:27 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <k94h9k$bh5$1@smc.vnet.net>
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