Message Boards Message Boards

Design a Menu with the same behavior as the Mathematica FrontEnd Menu?

GROUPS:

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}]}]
Attachments:
Answer
5 months ago

Group Abstract Group Abstract