Re: Joust in Mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg98338] Re: Joust in Mathematica
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Mon, 6 Apr 2009 05:03:13 -0400 (EDT)
- References: <gr21m6$lr4$1@smc.vnet.net> <6221704.1238754373701.JavaMail.root@m02> <gra1ae$246$1@smc.vnet.net>
Hi David, > Maybe a horizontal scrollbar, and then what are the chances of adding an > invisible locator or EventHandler to alter the width of the left hand panel? the additional scrollbars are not so difficult, it takes a little effort to make the two panes behave more user friendly, but it is rather straightforward (but could probably be improved further). Using locators or EventHandler for this might work but I think it is much easier and probably more robust to stick with the resize areas that the Pane shows with Scrollbars->True. The following has some improvements, but still is more of a demonstration that I think you can probably do what the original poster asked for, although I'm not sure whether I fully understood what that was :-) This defines a function that shows an outline with content in an extra window: Moust[outline_, content_] := CreateDialog[{ DynamicModule[{ widthleft = 150, widthright = 600, height = 400, selectedkey = Level[outline, -1][[1]], outlineview }, Dynamic[ Row[{ Panel[Pane[ outlineview[outline], ImageSize -> Dynamic[{widthleft, height}, ( height = #[[2]]; widthright = widthright + widthleft - #[[1]]; widthleft = #[[1]]; # ) &], Scrollbars -> True ] ], Panel[Pane[ Dynamic[content[selectedkey]], ImageSize -> Dynamic[{widthright, height}, ( height = #[[2]]; widthright = #[[1]]; # ) & ], Scrollbars -> True, Alignment -> {Center, Center} ]] }] ], Initialization :> ( outlineview[key_] := Button[key, selectedkey = key, Appearance -> None]; outlineview[expr_?(StringQ[Head[#]] &)] := OpenerView[{Head[expr], Column[outlineview /@ (List @@ expr)]}]; ) ]} ] This defines an expression which can be shown with the above function: outline = "Functions"[ "Arithmetic"[x, x^2, x^3, x^4, Sqrt[x]], "Elementary"[Log[x], Exp[x]], "Trigonometric"[Sin[x], Cos[x], Tan[x], Cot[x]], "Hyperbolic"[Sinh[x], Cosh[x], Tanh[x]] ] This defines a function which will be used to create the content for the right hand side of the window: content[key_] := Plot[Evaluate[key], {x, 0, 3}, Frame -> True, PlotLabel -> key, Background -> White, ImageSize -> 500 ] This will create the window: Moust[outline, content] hth, albert