Re: dynamic popupmenu help needed
- To: mathgroup at smc.vnet.net
- Subject: [mg98457] Re: dynamic popupmenu help needed
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Fri, 10 Apr 2009 04:53:43 -0400 (EDT)
- References: <grkgcm$61u$1@smc.vnet.net>
Hi,
> I can't figure out how to get the second popup to insert into a the
> cell where the insertion cursor is:
actually I don't understand what you want to achieve,
> f[e_] := Switch[e, "hey", 1, "you", 2, "now", 3];
> stuff = {{"a", "1", "r"}, {"b", "ee", "23"}, {0}};
> CreatePalette[
> PopupMenu[Dynamic[x], {"hey", "you", "now"}]
> Dynamic@PopupMenu[Dynamic[y], stuff[[f[x]]]]]
> NotebookApply[InputNotebook[], Dynamic[y]]
... the above doesn't do anything reasonable on my machine...
> please any suggestions? Any rewrites welcomed.
Start with something simple. This seems to be clear:
f[e_] := Switch[e, "hey", 1, "you", 2, "now", 3];
stuff = {{"a", "1", "r"}, {"b", "ee", "23"}, {0}};
make sure you understand the building blocks of what you do. This sets x
to the desired value and shows that value:
{PopupMenu[Dynamic[x], {"hey", "you", "now"}], Dynamic[x]}
and this gives a popup menu whose content dynamically changes and shows
which is the current value:
{Dynamic[PopupMenu[Dynamic[y], stuff[[f[x]]]]], Dynamic[y]}
now there are various ways with which you can "initialize" that
PopupMenu to one of the selectable values, with the default, y will just
stay what it was, so cannot be found in the list of possible values
which will make the content of the PopupMenu be viewed as empty. A very
simple way to change that would be to first set y to the first entry in
the new list, e.g.:
{
Dynamic[y = stuff[[f[x], 1]]; PopupMenu[Dynamic[y], stuff[[f[x]]]]],
Dynamic[y]
}
Of course you can insert any code you wish to make that entry appear
when changing x that you wish. Once that works as you want, you can
create a palette that controls y:
CreatePalette[{
Row[{
PopupMenu[Dynamic[x], {"hey", "you", "now"}],
Dynamic[y = stuff[[f[x], 1]];
PopupMenu[Dynamic[y], stuff[[f[x]]]]]
}, Spacer[5]]
}]
or maybe you want to make that a little more robust using a local
(dynamic) variable for x:
CreatePalette[{DynamicModule[{x},
Row[{
PopupMenu[Dynamic[x], {"hey", "you", "now"}],
Dynamic[y = stuff[[f[x], 1]];
PopupMenu[Dynamic[y], stuff[[f[x]]]]]
}, Spacer[5]]
]}]
> Sure wish hierarchical menus were supported ;-p
I think everything is there to build that, but you should be more
precise in defining what these hierarchical menus should behave like...
hth,
albert