using System; using System.ComponentModel; using System.Reflection; namespace Terminal.Gui; /// /// public class Menuv2 : Bar { /// public Menuv2 () : this ([]) { } /// public Menuv2 (IEnumerable shortcuts) : base (shortcuts) { Orientation = Orientation.Vertical; Width = Dim.Auto (); Height = Dim.Auto (DimAutoStyle.Content, 1); Initialized += Menuv2_Initialized; VisibleChanged += OnVisibleChanged; } private void OnVisibleChanged (object sender, EventArgs e) { if (Visible) { //Application.GrabMouse(this); } else { if (Application.MouseGrabView == this) { //Application.UngrabMouse (); } } } private void Menuv2_Initialized (object sender, EventArgs e) { Border.Thickness = new Thickness (1, 1, 1, 1); Border.LineStyle = LineStyle.Single; ColorScheme = Colors.ColorSchemes ["Menu"]; } // Menuv2 arranges the items horizontally. // The first item has no left border, the last item has no right border. // The Shortcuts are configured with the command, help, and key views aligned in reverse order (EndToStart). internal override void OnLayoutStarted (LayoutEventArgs args) { for (int index = 0; index < Subviews.Count; index++) { View barItem = Subviews [index]; if (!barItem.Visible) { continue; } } base.OnLayoutStarted (args); } /// public override View Add (View view) { base.Add (view); if (view is Shortcut shortcut) { shortcut.CanFocus = true; shortcut.Orientation = Orientation.Vertical; shortcut.HighlightStyle |= HighlightStyle.Hover; // TODO: not happy about using AlignmentModes for this. Too implied. // TODO: instead, add a property (a style enum?) to Shortcut to control this //shortcut.AlignmentModes = AlignmentModes.EndToStart; shortcut.Accepting += ShortcutOnAccept; void ShortcutOnAccept (object sender, CommandEventArgs e) { if (Arrangement.HasFlag (ViewArrangement.Overlapped) && Visible) { Visible = false; e.Cancel = true; return; } //if (!e.Handled) //{ // RaiseAcceptEvent (); //} } } return view; } }