Re: Re: Looking for a scrolling list control, or how to create/simulate
- To: mathgroup at smc.vnet.net
- Subject: [mg98876] Re: [mg98828] Re: Looking for a scrolling list control, or how to create/simulate
- From: John Fultz <jfultz at wolfram.com>
- Date: Mon, 20 Apr 2009 19:12:30 -0400 (EDT)
- Reply-to: jfultz at wolfram.com
On Mon, 20 Apr 2009 01:32:49 -0400 (EDT), meitnik wrote: > OK, here is what I have come up with so far. Any corrections or > > improvements? And how do I reuse my custom control outside of the > current notebook cell? That is how do I "install" it for use in other > notebook cells? Thanks. > > ListField[wd_, tz_, ls_] := > DynamicModule[{x}, > ld = Length[ls]; > Framed[ > Pane[ > Column[ > Table[ > With[ > {i = i} > , > Button[Style[ls[[i]], FontSize -> tz], Dynamic[x = ls[[i]]] > , Appearance -> "None" > , ImageSize -> {wd, tz + 2} > , ImageMargins -> 0 > , Alignment -> Left] > ], {i, lt} > ], Spacings -> 0 > ] > , ImageSize -> {wd, Round[(ld*tz/2) + (ld*2) - 4]} > , ImageMargins -> {{1, 0}, {0, 0}} > , Scrollbars -> {False, True} > , AppearanceElements -> None > ] > , FrameMargins -> {{1, 0}, {0, -1}} > ] Dynamic[x] > ] > > mm = {"yes", "no", "Andrew Merit", "Marvin Honks", "Pam Bakes", > "Marie loves", "Anne jo Ann"}; > ListField[120, 14, mm] That's not bad. Aside from a couple of typos, the one bad thing that I see in there is that the second argument of Button[] should *not* have Dynamic wrapped around it. Dynamic has no purpose here, and there's no guarantee that it would have worked. Read this post of mine if you wish to understand further. http://forums.wolfram.com/mathgroup/archive/2009/Feb/msg00424.html Your interface could be improved by having it draw the currently selected item. Here's a modified implementation I created. However, the appearance is tailored for Windows...it might not have the right colors for other platforms. The magic happens in BaseStyle (and note that I moved your Style[] command to the BaseStyle option as well, just to make it cleaner). ListField[wd_, tz_, ls_] := DynamicModule[{x}, ld = Length[ls]; Framed[ Pane[Column[ Table[With[{i = i}, Button[ls[[i]], x = ls[[i]], Appearance -> None, ImageSize -> {wd, tz + 2}, ImageMargins -> 0, Alignment -> Left, BaseStyle -> Dynamic[ Join[{"GenericButton", tz}, If[x === ls[[i]], {FontColor -> White, DrawHighlighted -> True}, {}]]]]], {i, ld}], Spacings -> 0], ImageSize -> {wd, Round[(ld*tz/2) + (ld*2) - 4]}, ImageMargins -> {{1, 0}, {0, 0}}, Scrollbars -> {False, True}, AppearanceElements -> None], FrameMargins -> {{1, 0}, {0, -1}}] ] Sincerely, John Fultz jfultz at wolfram.com User Interface Group Wolfram Research, Inc.