From: Jason Ledbetter on 20 Oct 2009 04:51 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
From: David Reiss on 21 Oct 2009 06:26 I realize that I didn't actually address your specific question directly, but I hope that the tips I gave are applicable to your problem... --David On Oct 20, 4:51 am, Jason Ledbetter <jasonbr...(a)gmail.com> wrote: > Folk, > I'm attempting to create a dynamically-appearing set of choices/menus usi= ng > 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 doe= s > 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 content= s > 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
From: Adam Griffith on 21 Oct 2009 06:27 I would suggest placing the code for the menus in a DynamicModule. Notebook[........ , DockedCells->Cell[BoxData[ToBoxes(a)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 >
From: Jason Ledbetter on 21 Oct 2009 06:28 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(a)wolfram.com> wrote: > I would suggest placing the code for the menus in a DynamicModule. > > > Notebook[........ , DockedCells->Cell[BoxData[ToBoxes(a)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 >> >> >
From: Adam Griffith on 21 Oct 2009 06:28 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(a)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(a)wolfram.com > <mailto:adamg(a)wolfram.com>> wrote: > > I would suggest placing the code for the menus in a DynamicModule. > > > Notebook[........ , > DockedCells->Cell[BoxData[ToBoxes(a)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 > > >
|
Next
|
Last
Pages: 1 2 Prev: Multi-Colored Filling in DateListPlot Next: JLink broken on Snow Leopard |