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"