Hi, I’m trying to design a Menu like the Mathematica FrontEnd:
Current behavior:
If “MouseOver PopUp” then it changes the color from gray to blue.
If “MouseExited PopUp” then it changes the color from blue to gray.
If “Clicked PopUp” then PopUp opens … But if I move the mouse over another PopUp the latter does not turn blue until “Clicked PopUp” again: fail.
I would like this behavior:
When “Clicked PopUp” then the corresponding PopUp opens, and when you move the cursor to another PopUp, only this last PopUp opens -if you had one open before. Same as in the FrontEnd Menu of Mathematica.
Do you have any idea how to achieve this behavior?
Thank you. Example:
OneMenu[Head_, actions_, options___] :=
DynamicModule[{x = Unique["x"], listActions, HeadActions, event},
event =.;
listActions = HeadActions = Table[Delimiter, {Length@actions}];
Do[
HeadActions[[i]] = actions[[i]];
listActions[[i]] = actions[[i]];
If[HeadActions[[i]] ===
Delimiter, (HeadActions[[i]] = Delimiter), (HeadActions[[i]] =
actions[[i, 1]])];
If[listActions[[i]] ==
Delimiter, (listActions[[i]] =
ToExpression["Delimiter\[RuleDelayed]Null"])];
, {i, 1, Length@actions}];
DynamicWrapper[
Mouseover[
PopupMenu[
Dynamic[Refresh[x,
TrackedSymbols :> {}], (event =.; event = #) &], HeadActions,
Head, options, Background -> GrayLevel[0.90]],
PopupMenu[
Dynamic[Refresh[x,
TrackedSymbols :> {}], (event =.; event = #) &], HeadActions,
Head, options, Background -> LightBlue]]
, Refresh[event /. listActions, TrackedSymbols :> {event}]
, SynchronousUpdating -> False]
];
Row[{OneMenu[
"File", {"Save" :> Print[4!],
"Save as..." :> (Print[1!]; Pause[2]; Print[7!]), Delimiter,
"Hello¡" :> Print["Hola¡"]}, Appearance -> "Frameless",
FrameMargins -> {{3, 3}, {0, 0}}, ContentPadding -> False,
ImageSize -> {Automatic, Automatic}],
OneMenu["Edition", {"Save" :> Print[4!],
"Save as..." :> (Print[1!]; Pause[2]; Print[7!]), Delimiter,
"Hello¡" :> Print["Hola¡"]}, Appearance -> "Frameless",
FrameMargins -> {{3, 3}, {0, 0}}, ContentPadding -> False,
ImageSize -> {Automatic, Automatic}],
OneMenu["Operations", {"Sum 1+1" :> Print[(1 + 1)],
",,," :> (Print[19!]; Print[7!]), Delimiter,
"Book¡" :> Print["Libro¡"]}, Appearance -> "Frameless",
FrameMargins -> {{3, 3}, {0, 0}}, ContentPadding -> False,
ImageSize -> {Automatic, Automatic}],
OneMenu["Help", {"." :> Print[1!], ".." :> (Print[2!];), Delimiter,
"Bye¡" :> Print["Adios¡"]}, Appearance -> "Frameless",
FrameMargins -> {{3, 3}, {0, 0}}, ContentPadding -> False,
ImageSize -> {Automatic, Automatic}]}]