diff --git a/Terminal.Gui/Application/ApplicationKeyboard.cs b/Terminal.Gui/Application/ApplicationKeyboard.cs
index 167e1dfb0..984d711c8 100644
--- a/Terminal.Gui/Application/ApplicationKeyboard.cs
+++ b/Terminal.Gui/Application/ApplicationKeyboard.cs
@@ -289,6 +289,5 @@ partial class Application
///
/// This is an internal method used by the class to remove Application key bindings.
///
- /// The view that is bound to the key.
internal static void ClearKeyBindings () { _keyBindings.Clear (); }
}
diff --git a/Terminal.Gui/Views/Bar.cs b/Terminal.Gui/Views/Bar.cs
deleted file mode 100644
index ec3aabf4f..000000000
--- a/Terminal.Gui/Views/Bar.cs
+++ /dev/null
@@ -1,233 +0,0 @@
-namespace Terminal.Gui;
-
-///
-/// Provides a horizontally or vertically oriented container for other views to be used as a menu, toolbar, or status bar.
-///
-///
-///
-public class Bar : View
-{
- ///
- public Bar ()
- {
- SetInitialProperties ();
- }
-
- ///
- /// Gets or sets the for this . The default is
- /// .
- ///
- public Orientation Orientation { get; set; } = Orientation.Horizontal;
-
- public bool StatusBarStyle { get; set; } = true;
-
- public override void Add (View view)
- {
- if (Orientation == Orientation.Horizontal)
- {
- //view.AutoSize = true;
- }
-
- //if (StatusBarStyle)
- //{
- // // Light up right border
- // view.BorderStyle = LineStyle.Single;
- // view.Border.Thickness = new Thickness (0, 0, 1, 0);
- //}
-
- //if (view is not Shortcut)
- //{
- // if (StatusBarStyle)
- // {
- // view.Padding.Thickness = new Thickness (0, 0, 1, 0);
- // }
-
- // view.Margin.Thickness = new Thickness (1, 0, 0, 0);
- //}
-
- //view.ColorScheme = ColorScheme;
-
- // Add any HotKey keybindings to our bindings
- IEnumerable> bindings = view.KeyBindings.Bindings.Where (b => b.Value.Scope == KeyBindingScope.HotKey);
-
- foreach (KeyValuePair binding in bindings)
- {
- AddCommand (
- binding.Value.Commands [0],
- () =>
- {
- if (view is Shortcut shortcut)
- {
- return shortcut.CommandView.InvokeCommands (binding.Value.Commands);
- }
-
- return false;
- });
- KeyBindings.Add (binding.Key, binding.Value);
- }
-
- base.Add (view);
- }
-
- private void Bar_LayoutStarted (object sender, LayoutEventArgs e)
- {
- View prevBarItem = null;
-
- switch (Orientation)
- {
- case Orientation.Horizontal:
- for (var index = 0; index < Subviews.Count; index++)
- {
- View barItem = Subviews [index];
-
- if (!barItem.Visible)
- {
- continue;
- }
-
- if (prevBarItem == null)
- {
- barItem.X = 0;
- }
- else
- {
- // Make view to right be autosize
- //Subviews [^1].AutoSize = true;
-
- // Align the view to the right of the previous view
- barItem.X = Pos.Right (prevBarItem);
- }
-
- barItem.Y = Pos.Center ();
- barItem.SetRelativeLayout (new Size (int.MaxValue, int.MaxValue));
- prevBarItem = barItem;
- }
-
- break;
-
- case Orientation.Vertical:
- // CommandView is aligned left, HelpView is aligned right, KeyView is aligned right
- // All CommandView's are the same width, all HelpView's are the same width,
- // all KeyView's are the same width
-
- int maxCommandWidth = 0;
- int maxHelpWidth = 0;
-
- List shortcuts = Subviews.Where (s => s is Shortcut && s.Visible).Cast ().ToList ();
-
- foreach (Shortcut shortcut in shortcuts)
- {
- // Let AutoSize do its thing to get the minimum width of each CommandView and HelpView
- shortcut.CommandView.SetRelativeLayout (new Size (int.MaxValue, int.MaxValue));
- shortcut.KeyView.SetRelativeLayout (new Size (int.MaxValue, int.MaxValue));
- shortcut.HelpView.SetRelativeLayout (new Size (int.MaxValue, int.MaxValue));
- }
-
- maxCommandWidth = shortcuts.Max (s => s.CommandView.Frame.Width);
- maxHelpWidth = shortcuts.Max (s => s.HelpView.Frame.Width);
-
- // Set the width of all CommandView's and HelpView's to the max width
- foreach (Shortcut shortcut in shortcuts)
- {
- shortcut.CommandView.Width = Dim.Auto (minimumContentDim: maxCommandWidth);
- shortcut.KeyView.Width = Dim.Auto ();
- shortcut.HelpView.Width = Dim.Auto (minimumContentDim: maxHelpWidth);
-
- // shortcut.LayoutSubviews ();
- }
-
- // Set the overall size of the Bar and arrange the views vertically
-
- var maxBarItemWidth = 0;
-
- for (var index = 0; index < Subviews.Count; index++)
- {
- View barItem = Subviews [index];
-
- if (!barItem.Visible)
- {
- continue;
- }
-
- if (prevBarItem == null)
- {
- barItem.Y = 0;
- }
- else
- {
- // Align the view to the bottom of the previous view
- barItem.Y = index;
- }
-
- prevBarItem = barItem;
-
- if (barItem is Shortcut shortcut)
- {
- //shortcut.SetRelativeLayout (new (int.MaxValue, int.MaxValue));
- maxBarItemWidth = Math.Max (maxBarItemWidth, shortcut.Frame.Width);
- }
- else
- {
- maxBarItemWidth = Math.Max (maxBarItemWidth, barItem.Frame.Width);
- }
-
- barItem.X = 0;
- }
-
- foreach (Shortcut shortcut in shortcuts)
- {
- if (Width is DimAuto)
- {
- shortcut.Width = Dim.Auto (DimAutoStyle.Content, minimumContentDim: maxBarItemWidth);
- }
- else
- {
- //shortcut._container.Width = Dim.Fill ();
- // shortcut.Width = Dim.Fill ();
- }
-
- shortcut.LayoutSubviews ();
- }
-
-
- //for (var index = 0; index < Subviews.Count; index++)
- //{
- // var shortcut = Subviews [index] as Shortcut;
-
- // if (shortcut is { Visible: false })
- // {
- // continue;
- // }
-
- // if (Width is DimAuto)
- // {
- // shortcut._container.Width = Dim.Auto (DimAutoStyle.Content, minimumContentDim: maxBarItemWidth);
- // }
- // else
- // {
- // shortcut._container.Width = Dim.Fill ();
- // shortcut.Width = Dim.Fill ();
- // }
-
- // //shortcut.SetContentSize (new (maxBarItemWidth, 1));
- // //shortcut.Width = Dim.Auto (DimAutoStyle.Content, minimumContentDim: int.Max(maxBarItemWidth, GetContentSize().Width));
-
- //}
-
-
-
- break;
- }
- }
-
- private void SetInitialProperties ()
- {
- ColorScheme = Colors.ColorSchemes ["Menu"];
- CanFocus = true;
-
- Width = Dim.Auto ();
- Height = Dim.Auto ();
-
- LayoutStarted += Bar_LayoutStarted;
- }
-}
diff --git a/Terminal.Gui/Views/Shortcut.cs b/Terminal.Gui/Views/Shortcut.cs
deleted file mode 100644
index a5ca12d3f..000000000
--- a/Terminal.Gui/Views/Shortcut.cs
+++ /dev/null
@@ -1,529 +0,0 @@
-using System.ComponentModel;
-
-namespace Terminal.Gui;
-
-// TODO: I don't love the name Shortcut, but I can't think of a better one right now. Shortcut is a bit overloaded.
-// TODO: It can mean "Application-scoped key binding" or "A key binding that is displayed in a visual way".
-// TODO: I tried `BarItem` but that's not great either as it implies it can only be used in `Bar`s.
-
-///
-/// Displays a command, help text, and a key binding. Useful for displaying a command in such as a
-/// menu, toolbar, or status bar.
-///
-///
-///
-/// When the user clicks on the or presses the key
-/// specified by the command is invoked, causing the
-/// event to be fired
-///
-///
-/// If is , the
-/// be invoked regardless of what View has focus, enabling an application-wide keyboard shortcut.
-///
-///
-/// Set to change the Command text displayed in the .
-/// By default, the text is the of .
-///
-///
-/// Set to change the Help text displayed in the .
-///
-///
-/// The text displayed for the is the string representation of the .
-/// If the is , the text is not displayed.
-///
-///
-public class Shortcut : View
-{
- // Hosts the Command, Help, and Key Views. Needed (IIRC - wrote a long time ago) to allow mouse clicks to be handled by the Shortcut.
- internal readonly View _container;
-
- ///
- /// Creates a new instance of .
- ///
- public Shortcut ()
- {
- CanFocus = true;
- Width = Dim.Auto (DimAutoStyle.Content);
- Height = Dim.Auto (DimAutoStyle.Content);
-
- //Height = Dim.Auto (minimumContentDim: 1, maximumContentDim: 1);
-
- AddCommand (Gui.Command.HotKey, () => true);
- AddCommand (Gui.Command.Accept, OnAccept);
- KeyBindings.Add (KeyCode.Space, Gui.Command.Accept);
- KeyBindings.Add (KeyCode.Enter, Gui.Command.Accept);
-
- _container = new ()
- {
- Id = "_container",
- // Only the Shortcut (_container) should be able to have focus, not any subviews.
- CanFocus = true,
- Width = Dim.Auto (DimAutoStyle.Content, 1),
- Height = Dim.Auto (DimAutoStyle.Content, 1),
- BorderStyle = LineStyle.Dashed
- };
-
- CommandView = new ();
-
- HelpView = new ()
- {
- Id = "_helpView",
- // Only the Shortcut should be able to have focus, not any subviews
- CanFocus = false,
- X = Pos.Align (Alignment.End, AlignmentModes.IgnoreFirstOrLast | AlignmentModes.AddSpaceBetweenItems),
- Y = Pos.Center (),
-
- // Helpview is the only subview that doesn't have a min width
- Width = Dim.Auto (DimAutoStyle.Text),
- Height = Dim.Auto (DimAutoStyle.Text),
- ColorScheme = Colors.ColorSchemes ["Error"]
- };
- _container.Add (HelpView);
-
- // HelpView.TextAlignment = Alignment.End;
- HelpView.MouseClick += Shortcut_MouseClick;
-
- KeyView = new ()
- {
- Id = "_keyView",
- // Only the Shortcut should be able to have focus, not any subviews
- CanFocus = false,
- X = Pos.Align (Alignment.End, AlignmentModes.IgnoreFirstOrLast | AlignmentModes.AddSpaceBetweenItems),
- Y = Pos.Center (),
-
- // Bar will set the width of all KeyViews to the width of the widest KeyView.
- Width = Dim.Auto (DimAutoStyle.Text),
- Height = Dim.Auto (DimAutoStyle.Text),
- };
- _container.Add (KeyView);
-
- KeyView.MouseClick += Shortcut_MouseClick;
-
- CommandView.Margin.Thickness = new Thickness (1, 0, 1, 0);
- HelpView.Margin.Thickness = new Thickness (1, 0, 1, 0);
- KeyView.Margin.Thickness = new Thickness (1, 0, 1, 0);
-
- MouseClick += Shortcut_MouseClick;
-
- TitleChanged += Shortcut_TitleChanged;
- Initialized += OnInitialized;
-
- Add (_container);
-
- return;
-
- void OnInitialized (object sender, EventArgs e)
- {
- if (ColorScheme != null)
- {
- var cs = new ColorScheme (ColorScheme)
- {
- Normal = ColorScheme.HotNormal,
- HotNormal = ColorScheme.Normal
- };
- KeyView.ColorScheme = cs;
- }
- }
- }
-
- private void Shortcut_MouseClick (object sender, MouseEventEventArgs e)
- {
- // When the Shortcut is clicked, we want to invoke the Command and Set focus
- View view = sender as View;
- if (!e.Handled && Command.HasValue)
- {
- // If the subview (likely CommandView) didn't handle the mouse click, invoke the command.
- bool? handled = false;
- handled = InvokeCommand (Command.Value);
- if (handled.HasValue)
- {
- e.Handled = handled.Value;
- }
- }
- if (CanFocus)
- {
- SetFocus ();
- }
- e.Handled = true;
- }
-
- ///
- public override ColorScheme ColorScheme
- {
- get
- {
- if (base.ColorScheme == null)
- {
- return SuperView?.ColorScheme ?? base.ColorScheme;
- }
-
- return base.ColorScheme;
- }
- set
- {
- base.ColorScheme = value;
-
- if (ColorScheme != null)
- {
- var cs = new ColorScheme (ColorScheme)
- {
- Normal = ColorScheme.HotNormal,
- HotNormal = ColorScheme.Normal
- };
- KeyView.ColorScheme = cs;
- }
- }
- }
-
- #region Command
-
- private Command? _command;
-
- ///
- /// Gets or sets the that will be invoked when the user clicks on the or
- /// presses .
- ///
- public Command? Command
- {
- get => _command;
- set
- {
- if (value != null)
- {
- _command = value.Value;
- UpdateKeyBinding ();
- }
- }
- }
-
- private View _commandView;
-
- ///
- /// Gets or sets the View that displays the command text and hotkey.
- ///
- ///
- ///
- /// By default, the of the is displayed as the Shortcut's
- /// command text.
- ///
- ///
- /// By default, the CommandView is a with set to
- /// .
- ///
- ///
- /// Setting the will add it to the and remove any existing
- /// .
- ///
- ///
- ///
- ///
- /// This example illustrates how to add a to a that toggles the
- /// property.
- ///
- ///
- /// var force16ColorsShortcut = new Shortcut
- /// {
- /// Key = Key.F6,
- /// KeyBindingScope = KeyBindingScope.HotKey,
- /// Command = Command.Accept,
- /// CommandView = new CheckBox { Text = "Force 16 Colors" }
- /// };
- /// var cb = force16ColorsShortcut.CommandView as CheckBox;
- /// cb.Checked = Application.Force16Colors;
- ///
- /// cb.Toggled += (s, e) =>
- /// {
- /// var cb = s as CheckBox;
- /// Application.Force16Colors = cb!.Checked == true;
- /// Application.Refresh();
- /// };
- /// StatusBar.Add(force16ColorsShortcut);
- ///
- ///
-
- public View CommandView
- {
- get => _commandView;
- set
- {
- if (value == null)
- {
- throw new ArgumentNullException ();
- }
-
- if (_commandView is { })
- {
- _container.Remove (_commandView);
- _commandView?.Dispose ();
- }
-
-
- _commandView = value;
- _commandView.Id = "_commandView";
-
- // TODO: Determine if it makes sense to allow the CommandView to be focusable.
- // Right now, we don't set CanFocus to false here.
- _commandView.CanFocus = false;
-
- // Bar will set the width of all CommandViews to the width of the widest CommandViews.
- _commandView.Width = Dim.Auto (DimAutoStyle.Text);
- _commandView.Height = Dim.Auto (DimAutoStyle.Text);
- _commandView.X = X = Pos.Align (Alignment.End, AlignmentModes.IgnoreFirstOrLast | AlignmentModes.AddSpaceBetweenItems);
- _commandView.Y = Pos.Center ();
-
- _commandView.MouseClick += Shortcut_MouseClick;
- _commandView.Accept += CommandView_Accept;
-
- _commandView.Margin.Thickness = new (1, 0, 1, 0);
-
- _commandView.HotKeyChanged += (s, e) =>
- {
- if (e.NewKey != Key.Empty)
- {
- // Add it
- AddKeyBindingsForHotKey (e.OldKey, e.NewKey);
- }
- };
-
- _commandView.HotKeySpecifier = new ('_');
-
- _container.Remove (HelpView);
- _container.Remove (KeyView);
- _container.Add (_commandView, HelpView, KeyView);
-
- UpdateKeyBinding();
-
- }
- }
-
- private void _commandView_MouseEvent (object sender, MouseEventEventArgs e)
- {
- e.Handled = true;
- }
-
- private void Shortcut_TitleChanged (object sender, StateEventArgs e)
- {
- // If the Title changes, update the CommandView text. This is a helper to make it easier to set the CommandView text.
- // CommandView is public and replaceable, but this is a convenience.
- _commandView.Text = Title;
- }
-
- private void CommandView_Accept (object sender, CancelEventArgs e)
- {
- // When the CommandView fires its Accept event, we want to act as though the
- // Shortcut was clicked.
- var args = new HandledEventArgs ();
- Accept?.Invoke (this, args);
-
- if (args.Handled)
- {
- e.Cancel = args.Handled;
- }
- }
-
- #endregion Command
-
- #region Help
-
- ///
- /// The subview that displays the help text for the command. Internal for unit testing.
- ///
- internal View HelpView { get; set; }
-
- ///
- /// Gets or sets the help text displayed in the middle of the Shortcut.
- ///
- public override string Text
- {
- get => base.Text;
- set
- {
- //base.Text = value;
- if (HelpView != null)
- {
- HelpView.Text = value;
- }
- }
- }
-
- #endregion Help
-
- #region Key
-
- private Key _key;
-
- ///
- /// Gets or sets the that will be bound to the command.
- ///
- public Key Key
- {
- get => _key;
- set
- {
- if (value == null)
- {
- throw new ArgumentNullException ();
- }
-
- _key = value;
-
- if (Command != null)
- {
- UpdateKeyBinding ();
- }
-
- KeyView.Text = $"{Key}";
- KeyView.Visible = Key != Key.Empty;
- }
- }
-
- private KeyBindingScope _keyBindingScope;
-
- ///
- /// Gets or sets the scope for the key binding for how is bound to .
- ///
- public KeyBindingScope KeyBindingScope
- {
- get => _keyBindingScope;
- set
- {
- _keyBindingScope = value;
-
- if (Command != null)
- {
- UpdateKeyBinding ();
- }
- }
- }
-
- ///
- /// Gets the subview that displays the key. Internal for unit testing.
- ///
-
- internal View KeyView { get; }
-
- private void UpdateKeyBinding ()
- {
- if (KeyBindingScope == KeyBindingScope.Application)
- {
- // return;
- }
-
- if (Command != null && Key != null && Key != Key.Empty)
- {
- // CommandView holds our command/keybinding
- // Add a key binding for this command to this Shortcut
- if (CommandView.GetSupportedCommands ().Contains (Command.Value))
- {
- CommandView.KeyBindings.Remove (Key);
- CommandView.KeyBindings.Add (Key, KeyBindingScope, Command.Value);
- }
- else
- {
- // throw new InvalidOperationException ($"CommandView does not support the command {Command.Value}");
- }
- }
- }
-
- #endregion Key
-
- ///
- /// The event fired when the command is received. This
- /// occurs if the user clicks on the Shortcut or presses .
- ///
- public new event EventHandler Accept;
-
- ///
- /// Called when the command is received. This
- /// occurs if the user clicks on the Bar with the mouse or presses the key bound to
- /// Command.Accept (Space by default).
- ///
- protected new bool? OnAccept ()
- {
- // TODO: This is not completely thought through.
-
-
-
- if (Key == null || Key == Key.Empty)
- {
- return false;
- }
-
- var handled = false;
- var keyCopy = new Key (Key);
-
- switch (KeyBindingScope)
- {
- case KeyBindingScope.Application:
- // Simulate a key down to invoke the Application scoped key binding
- handled = Application.OnKeyDown (keyCopy);
-
- break;
- case KeyBindingScope.Focused:
- handled = InvokeCommand (Command.Value) == true;
- handled = false;
-
- break;
- case KeyBindingScope.HotKey:
- if (Command.HasValue)
- {
- //handled = _commandView.InvokeCommand (Gui.Command.HotKey) == true;
- //handled = false;
- }
- break;
- }
-
- //if (handled == false)
- {
- var args = new HandledEventArgs ();
- Accept?.Invoke (this, args);
- handled = args.Handled;
- }
-
- return handled;
- }
-
- ///
- public override bool OnEnter (View view)
- {
- // TODO: This is a hack. Need to refine this.
- var cs = new ColorScheme (ColorScheme)
- {
- Normal = ColorScheme.Focus,
- HotNormal = ColorScheme.HotFocus
- };
-
- _container.ColorScheme = cs;
-
- cs = new (ColorScheme)
- {
- Normal = ColorScheme.HotFocus,
- HotNormal = ColorScheme.Focus
- };
- KeyView.ColorScheme = cs;
-
- return base.OnEnter (view);
- }
-
- ///
- public override bool OnLeave (View view)
- {
- // TODO: This is a hack. Need to refine this.
- var cs = new ColorScheme (ColorScheme)
- {
- Normal = ColorScheme.Normal,
- HotNormal = ColorScheme.HotNormal
- };
-
- _container.ColorScheme = cs;
-
- cs = new (ColorScheme)
- {
- Normal = ColorScheme.HotNormal,
- HotNormal = ColorScheme.Normal
- };
- KeyView.ColorScheme = cs;
-
- return base.OnLeave (view);
- }
-}
diff --git a/UICatalog/Scenarios/Bars.cs b/UICatalog/Scenarios/Bars.cs
deleted file mode 100644
index 26a4e5aab..000000000
--- a/UICatalog/Scenarios/Bars.cs
+++ /dev/null
@@ -1,489 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Terminal.Gui;
-
-namespace UICatalog.Scenarios;
-
-[ScenarioMetadata ("Bars", "Illustrates Bar views (e.g. StatusBar)")]
-[ScenarioCategory ("Controls")]
-public class Bars : Scenario
-{
- public override void Main ()
- {
- Application.Init ();
- Window app = new ();
-
- app.Loaded += App_Loaded;
-
- Application.Run (app);
- app.Dispose ();
- Application.Shutdown ();
- }
-
-
- // Setting everything up in Loaded handler because we change the
- // QuitKey and it only sticks if changed after init
- private void App_Loaded (object sender, EventArgs e)
- {
- Application.QuitKey = Key.Z.WithCtrl;
- Application.Top.Title = $"{Application.QuitKey} to Quit - Scenario: {GetName ()}";
-
- List eventSource = new ();
- ListView eventLog = new ListView ()
- {
- X = Pos.AnchorEnd (),
- Width = 50,
- Height = Dim.Fill (),
- ColorScheme = Colors.ColorSchemes ["Toplevel"],
- Source = new ListWrapper (eventSource)
- };
- Application.Top.Add (eventLog);
-
- var shortcut1 = new Shortcut
- {
- Title = "_Zigzag",
- Key = Key.Z.WithAlt,
- Text = "Gonna zig zag",
- KeyBindingScope = KeyBindingScope.HotKey,
- Command = Command.Accept,
- };
- shortcut1.Accept += (s, e) =>
- {
- eventSource.Add ($"Accept: {s}");
- eventLog.MoveDown ();
- };
- Application.Top.Add (shortcut1);
- shortcut1.SetFocus ();
-
- //var shortcut2 = new Shortcut
- //{
- // Title = "Za_G",
- // Text = "Gonna zag",
- // Key = Key.G.WithAlt,
- // KeyBindingScope = KeyBindingScope.HotKey,
- // Command = Command.Accept,
- // X = Pos.Left (shortcut1),
- // Y = Pos.Bottom (shortcut1),
- // //Width = 50,
- //};
-
-
- //var shortcut3 = new Shortcut
- //{
- // Title = "Shortcut3",
- // Key = Key.D3.WithCtrl,
- // Text = "Number Three",
- // KeyBindingScope = KeyBindingScope.Application,
- // Command = Command.Accept,
- //};
-
- //shortcut3.Accept += (s, e) =>
- // {
- // eventSource.Add ($"Accept: {s}");
- // eventLog.MoveDown ();
- // };
-
- //var shortcut4 = new Shortcut
- //{
- // Title = "Shortcut4",
- // Text = "Number 4",
- // Key = Key.F4,
- // KeyBindingScope = KeyBindingScope.Application,
- // Command = Command.Accept,
- //};
-
- //var cb = new CheckBox ()
- //{
- // Title = "Hello",// shortcut4.Text
- //};
-
- //cb.Toggled += (s, e) =>
- // {
- // eventSource.Add ($"Toggled: {s}");
- // eventLog.MoveDown ();
- // };
-
- //shortcut4.CommandView = cb;
-
- //shortcut4.Accept += (s, e) =>
- // {
- // eventSource.Add ($"Accept: {s}");
- // eventLog.MoveDown ();
- // };
-
- //var bar = new Bar
- //{
- // X = 2,
- // Y = Pos.Bottom(shortcut1),
- // Orientation = Orientation.Vertical,
- // StatusBarStyle = false,
- // Width = Dim.Percent(40)
- //};
- //bar.Add (shortcut3, shortcut4);
-
- ////CheckBox hello = new ()
- ////{
- //// Title = "Hello",
- //// X = 0,
- //// Y = 1,
- ////};
- ////Application.Top.Add (hello);
- ////hello.Toggled += (s, e) =>
- //// {
- //// eventSource.Add ($"Toggled: {s}");
- //// eventLog.MoveDown ();
- //// };
-
- //Application.Top.Add (bar);
-
- // BUGBUG: This should not be needed
- //Application.Top.LayoutSubviews ();
-
- //SetupMenuBar ();
- //SetupContentMenu ();
- // SetupStatusBar ();
- }
-
- private void Button_Clicked (object sender, EventArgs e) { MessageBox.Query ("Hi", $"You clicked {sender}"); }
-
- //private void SetupContentMenu ()
- //{
- // Application.Top.Add (new Label { Text = "Right Click for Context Menu", X = Pos.Center (), Y = 4 });
- // Application.Top.MouseClick += ShowContextMenu;
- //}
-
- //private void ShowContextMenu (object s, MouseEventEventArgs e)
- //{
- // if (e.MouseEvent.Flags != MouseFlags.Button3Clicked)
- // {
- // return;
- // }
-
- // var contextMenu = new Bar
- // {
- // Id = "contextMenu",
- // X = e.MouseEvent.Position.X,
- // Y = e.MouseEvent.Position.Y,
- // Width = Dim.Auto (DimAutoStyle.Content),
- // Height = Dim.Auto (DimAutoStyle.Content),
- // Orientation = Orientation.Vertical,
- // StatusBarStyle = false,
- // BorderStyle = LineStyle.Rounded,
- // Modal = true,
- // };
-
- // var newMenu = new Shortcut
- // {
- // Title = "_New...",
- // Text = "Create a new file",
- // Key = Key.N.WithCtrl,
- // CanFocus = true
- // };
-
- // newMenu.Accept += (s, e) =>
- // {
- // contextMenu.RequestStop ();
-
- // Application.AddTimeout (
- // new TimeSpan (0),
- // () =>
- // {
- // MessageBox.Query ("File", "New");
-
- // return false;
- // });
- // };
-
- // var open = new Shortcut
- // {
- // Title = "_Open...",
- // Text = "Show the File Open Dialog",
- // Key = Key.O.WithCtrl,
- // CanFocus = true
- // };
-
- // open.Accept += (s, e) =>
- // {
- // contextMenu.RequestStop ();
-
- // Application.AddTimeout (
- // new TimeSpan (0),
- // () =>
- // {
- // MessageBox.Query ("File", "Open");
-
- // return false;
- // });
- // };
-
- // var save = new Shortcut
- // {
- // Title = "_Save...",
- // Text = "Save",
- // Key = Key.S.WithCtrl,
- // CanFocus = true
- // };
-
- // save.Accept += (s, e) =>
- // {
- // contextMenu.RequestStop ();
-
- // Application.AddTimeout (
- // new TimeSpan (0),
- // () =>
- // {
- // MessageBox.Query ("File", "Save");
-
- // return false;
- // });
- // };
-
- // var saveAs = new Shortcut
- // {
- // Title = "Save _As...",
- // Text = "Save As",
- // Key = Key.A.WithCtrl,
- // CanFocus = true
- // };
-
- // saveAs.Accept += (s, e) =>
- // {
- // contextMenu.RequestStop ();
-
- // Application.AddTimeout (
- // new TimeSpan (0),
- // () =>
- // {
- // MessageBox.Query ("File", "Save As");
-
- // return false;
- // });
- // };
-
- // contextMenu.Add (newMenu, open, save, saveAs);
-
- // contextMenu.KeyBindings.Add (Key.Esc, Command.QuitToplevel);
-
- // contextMenu.Initialized += Menu_Initialized;
-
- // void Application_MouseEvent (object sender, MouseEvent e)
- // {
- // // If user clicks outside of the menuWindow, close it
- // if (!contextMenu.Frame.Contains (e.Position.X, e.Position.Y))
- // {
- // if (e.Flags is (MouseFlags.Button1Clicked or MouseFlags.Button3Clicked))
- // {
- // contextMenu.RequestStop ();
- // }
- // }
- // }
-
- // Application.MouseEvent += Application_MouseEvent;
-
- // Application.Run (contextMenu);
- // contextMenu.Dispose ();
-
- // Application.MouseEvent -= Application_MouseEvent;
- //}
-
- private void Menu_Initialized (object sender, EventArgs e)
- {
- // BUGBUG: this should not be needed
-
- ((View)(sender)).LayoutSubviews ();
- }
-
- //private void SetupMenuBar ()
- //{
- // var menuBar = new Bar
- // {
- // Id = "menuBar",
-
- // X = 0,
- // Y = 0,
- // Width = Dim.Fill (),
- // Height = Dim.Auto (DimAutoStyle.Content),
- // StatusBarStyle = true
- // };
-
- // var fileMenu = new Shortcut
- // {
- // Title = "_File",
- // Key = Key.F.WithAlt,
- // KeyBindingScope = KeyBindingScope.HotKey,
- // Command = Command.Accept,
- // };
- // fileMenu.HelpView.Visible = false;
- // fileMenu.KeyView.Visible = false;
-
- // fileMenu.Accept += (s, e) =>
- // {
- // fileMenu.SetFocus ();
-
- // if (s is View view)
- // {
- // var menu = new Bar
- // {
- // X = view.Frame.X + 1,
- // Y = view.Frame.Y + 1,
- // ColorScheme = view.ColorScheme,
- // Orientation = Orientation.Vertical,
- // StatusBarStyle = false,
- // BorderStyle = LineStyle.Dotted,
- // Width = Dim.Auto (DimAutoStyle.Content),
- // Height = Dim.Auto (DimAutoStyle.Content),
- // };
-
- // menu.KeyBindings.Add (Key.Esc, Command.QuitToplevel);
-
- // var newMenu = new Shortcut
- // {
- // Title = "_New...",
- // Text = "Create a new file",
- // Key = Key.N.WithCtrl
- // };
-
- // var open = new Shortcut
- // {
- // Title = "_Open...",
- // Text = "Show the File Open Dialog",
- // Key = Key.O.WithCtrl
- // };
-
- // var save = new Shortcut
- // {
- // Title = "_Save...",
- // Text = "Save",
- // Key = Key.S.WithCtrl
- // };
-
- // menu.Add (newMenu, open, save);
-
- // // BUGBUG: this is all bad
- // menu.Initialized += Menu_Initialized;
- // open.Initialized += Menu_Initialized;
- // save.Initialized += Menu_Initialized;
- // newMenu.Initialized += Menu_Initialized;
-
- // Application.Run (menu);
- // menu.Dispose ();
- // Application.Refresh ();
- // }
- // };
-
- // var editMenu = new Shortcut
- // {
- // Title = "_Edit",
-
- // //Key = Key.E.WithAlt,
- // KeyBindingScope = KeyBindingScope.HotKey,
- // Command = Command.Accept
- // };
-
- // editMenu.Accept += (s, e) => { };
- // editMenu.HelpView.Visible = false;
- // editMenu.KeyView.Visible = false;
-
- // menuBar.Add (fileMenu, editMenu);
-
- // menuBar.Initialized += Menu_Initialized;
-
- // Application.Top.Add (menuBar);
- //}
-
- private void SetupStatusBar ()
- {
- var statusBar = new Bar
- {
- Id = "statusBar",
- X = 0,
- Y = Pos.AnchorEnd (),
- Width = Dim.Fill (),
- };
-
- var shortcut = new Shortcut
- {
- Text = "Quit Application",
- Title = "Q_uit",
- Key = Application.QuitKey,
- KeyBindingScope = KeyBindingScope.Application,
- Command = Command.QuitToplevel,
- CanFocus = false
- };
-
- statusBar.Add (shortcut);
-
- shortcut = new Shortcut
- {
- Text = "Help Text",
- Title = "Help",
- Key = Key.F1,
- KeyBindingScope = KeyBindingScope.HotKey,
- Command = Command.Accept,
- CanFocus = false
- };
-
- var labelHelp = new Label
- {
- X = Pos.Center (),
- Y = Pos.Top (statusBar) - 1,
- Text = "Help"
- };
- Application.Top.Add (labelHelp);
-
- shortcut.Accept += (s, e) =>
- {
- labelHelp.Text = labelHelp.Text + "!";
- e.Handled = true;
- };
-
- statusBar.Add (shortcut);
-
- shortcut = new Shortcut
- {
- Title = "_Show/Hide",
- Key = Key.F10,
- KeyBindingScope = KeyBindingScope.HotKey,
- Command = Command.ToggleExpandCollapse,
- CommandView = new CheckBox
- {
- Text = "_Show/Hide"
- },
- CanFocus = false
- };
-
- statusBar.Add (shortcut);
-
- var button1 = new Button
- {
- Text = "I'll Hide",
- Visible = false
- };
- button1.Accept += Button_Clicked;
- statusBar.Add (button1);
-
- ((CheckBox)shortcut.CommandView).Toggled += (s, e) =>
- {
- button1.Visible = !button1.Visible;
- button1.Enabled = button1.Visible;
- };
-
- statusBar.Add (new Label { HotKeySpecifier = new Rune ('_'), Text = "Fo_cusLabel", CanFocus = true });
-
- var button2 = new Button
- {
- Text = "Or me!",
- };
- button2.Accept += (s, e) => Application.RequestStop ();
-
- statusBar.Add (button2);
-
- statusBar.Initialized += Menu_Initialized;
-
- Application.Top.Add (statusBar);
-
-
- }
-
-}