Re: Question on Dynamic with "DockedCell"
- To: mathgroup at smc.vnet.net
- Subject: [mg104154] Re: [mg104137] Question on Dynamic with "DockedCell"
- From: Adam Griffith <adamg at wolfram.com>
- Date: Wed, 21 Oct 2009 06:30:27 -0400 (EDT)
- References: <200910200854.EAA06280@smc.vnet.net> <4ADDFCBD.1080103@wolfram.com> <9e0fbc710910201324w6d190c45p5ca838c8b02fe1fd@mail.gmail.com>
Hi Jason, Yes, the documentation on these topics is in the works for a future Mathematica release. The trick here is to notice that the option DockedCells takes low-level cell expressions. So anything that is included must be written in the low-level box structure of the front end. For example, type something into an input cell, run it, and then choose Cell>Show Cell Expression on the output cell to view the low-level code. So what I did here: Notebook[........ , DockedCells->Cell[BoxData[ToBoxes at DynamicModule[..... all code.....]], "DockedCell"]] was to let the front end generate the necessary box structure for the DynamicModule by using ToBoxes[] since I didn't want to have to write it myself. For example, In[1]:= ToBoxes[a + b^2] Out[1]= RowBox[{"a", "+", SuperscriptBox["b", "2"]}] Then since we are dealing with boxes, the contents are wrapped in BoxData[]. Hope this helps, -Adam Jason Ledbetter wrote: > Hmm. That organizational structure is different than what I'm using. I > guess I need to comprehend the box structure of mathematica... for > example "BoxData" doesn't seem to be a documented primitive (It is > referenced inside the Cell[] documentation as a one-liner). > > Is there a how-to or otherwise some documentation that describes when > to use BoxData vs. ToBoxes vs. whatever or is it one of those "It > depends and it's complicated" things? > > -jbl > > On Tue, Oct 20, 2009 at 2:09 PM, Adam Griffith <adamg at wolfram.com > <mailto:adamg at wolfram.com>> wrote: > > I would suggest placing the code for the menus in a DynamicModule. > > > Notebook[........ , > DockedCells->Cell[BoxData[ToBoxes at DynamicModule[..... all > code.....], "DockedCell"]] > > -Adam > > > Jason Ledbetter wrote: > > Folk, > I'm attempting to create a dynamically-appearing set of > choices/menus using > ButtonBar in a notebook window but I've been unable to get the > desired > affect to date. I've cobbled together the following code which > almost does > what I'm looking for but I could use some pointers in getting > the rest of > the way. > > The goal here is for the "topMenu" items to appear when the > notebook is > first instantiated and for the "secondMenu" option to appear > when a > "topMenu" option is selected. As it stands now, I'm having to > start with the > "secondMenu" option pre-defined to a bogus value. > > If I were to abstract my goal some more, I'm trying to figure > out how to > dynamically add/remove RowBox items that include ButtonBars > from the > notebook based on options that are selected. > > I'm guessing that I somehow need to programmatically generate > the contents > of a Dynamically wrapped RowBox (e.g., Dynamic[RowBox[...]]) > but I'm not > quite sure how to go about that just yet. > > Any help is greatly appreciated... > > Here's what I have thus far: > > --snip-- > Module[ > > {topMenu, secondMenu}, > > topMenu = {"option1", "option2"}; > secondMenu = {"No option selected"}; > > menuChoice[choice_] := Module[{}, > Switch[choice, > "option1", secondMenu = {"one", "selected"}, > "option2", secondMenu = {"two", "selected"}, _, Print[choice] > ]]; > > CreateWindow[DockedCells -> Cell[ > RowBox[ > { > ToBoxes[ > ButtonBar[ToString[#] :> menuChoice[#] & /@ topMenu] > ], > ToBoxes[ > Dynamic[ > ButtonBar[ToString[#] :> menuChoice[#] & /@ secondMenu] > ] > ] > } > ], > "DockedCell"], > TextAlignment -> Center > ] > ]; > > --snip-- > > > thanks, > > > -jbl > > >
- References:
- Question on Dynamic with "DockedCell"
- From: Jason Ledbetter <jasonbrent@gmail.com>
- Question on Dynamic with "DockedCell"