diff --git a/Terminal.Gui/Core/Application.cs b/Terminal.Gui/Core/Application.cs index 3c41d67db..d486f817d 100644 --- a/Terminal.Gui/Core/Application.cs +++ b/Terminal.Gui/Core/Application.cs @@ -481,6 +481,7 @@ namespace Terminal.Gui { if (closeDriver) { MainLoop = null; Driver.End (); + Driver = null; } _initialized = false; diff --git a/Terminal.Gui/Core/ConsoleDriver.cs b/Terminal.Gui/Core/ConsoleDriver.cs index 088e14ae7..fb3015893 100644 --- a/Terminal.Gui/Core/ConsoleDriver.cs +++ b/Terminal.Gui/Core/ConsoleDriver.cs @@ -5,7 +5,7 @@ // Miguel de Icaza (miguel@gnome.org) // // Define this to enable diagnostics drawing for Window Frames -#define DRAW_WINDOW_FRAME_DIAGNOSTICS +//#define DRAW_WINDOW_FRAME_DIAGNOSTICS using NStack; using System; using System.Runtime.CompilerServices; diff --git a/UICatalog/UICatalog.cs b/UICatalog/UICatalog.cs index c99e0aa91..62266184c 100644 --- a/UICatalog/UICatalog.cs +++ b/UICatalog/UICatalog.cs @@ -55,6 +55,8 @@ namespace UICatalog { private static StatusItem _scrolllock; private static Scenario _runningScenario = null; + private static bool _useSystemConsole = false; + private static MenuItem _sysConsoleMenu; static void Main (string [] args) { @@ -76,6 +78,7 @@ namespace UICatalog { Scenario scenario = GetScenarioToRun (); while (scenario != null) { + Application.UseSystemConsole = _useSystemConsole; Application.Init (); scenario.Init (Application.Top); scenario.Setup (); @@ -86,15 +89,58 @@ namespace UICatalog { Application.Shutdown (); } + /// + /// This shows the selection UI. Each time it is run, it calls Application.Init to reset everything. + /// + /// + private static Scenario GetScenarioToRun () + { + Application.UseSystemConsole = false; + Application.Init (); + + if (_menu == null) { + Setup (); + } + + _top = Application.Top; + + _top.KeyDown += KeyDownHandler; + + _top.Add (_menu); + _top.Add (_leftPane); + _top.Add (_rightPane); + _top.Add (_statusBar); + + _top.Ready += (o, a) => { + if (_runningScenario != null) { + _top.SetFocus (_rightPane); + _runningScenario = null; + } + }; + + Application.Run (_top, false); + Application.Shutdown (); + return _runningScenario; + } + + /// /// Create all controls. This gets called once and the controls remain with their state between Sceanrio runs. /// private static void Setup () { + void HandleSysConsoleMenuChange () + { + _useSystemConsole = !_useSystemConsole; + _sysConsoleMenu.Title = $"[{(_useSystemConsole ? 'x' : ' ')}] _Use System Console"; + } + _sysConsoleMenu = new MenuItem ($"[{(_useSystemConsole ? 'x' : ' ')}] _Use System Console", "", () => HandleSysConsoleMenuChange ()); + _menu = new MenuBar (new MenuBarItem [] { new MenuBarItem ("_File", new MenuItem [] { new MenuItem ("_Quit", "", () => Application.RequestStop() ) }), + new MenuBarItem ("_Settings", new MenuItem [] { _sysConsoleMenu }), new MenuBarItem ("_About...", "About this app", () => MessageBox.Query (50, 10, "About UI Catalog", "UI Catalog is a comprehensive sample library for Terminal.Gui", "Ok")), }); @@ -142,24 +188,17 @@ namespace UICatalog { CanFocus = true, }; - //_scenarioListView.OnKeyPress += (KeyEvent ke) => { - // if (_top.MostFocused == _scenarioListView && ke.Key == Key.Enter) { - // _scenarioListView_OpenSelectedItem (null, null); - // } - //}; - _scenarioListView.OpenSelectedItem += _scenarioListView_OpenSelectedItem; _rightPane.Add (_scenarioListView); _categoryListView.SelectedItem = 0; _categoryListView.OnSelectedChanged (); - _capslock = new StatusItem (Key.CharMask, "CapslockOff", null); - _numlock = new StatusItem (Key.CharMask, "NumlockOff", null); - _scrolllock = new StatusItem (Key.CharMask, "ScrolllockOff", null); + _capslock = new StatusItem (Key.CharMask, "Capslock", null); + _numlock = new StatusItem (Key.CharMask, "Numlock", null); + _scrolllock = new StatusItem (Key.CharMask, "Scrolllock", null); _statusBar = new StatusBar (new StatusItem [] { - //new StatusItem(Key.F1, "~F1~ Help", () => Help()), new StatusItem(Key.ControlQ, "~CTRL-Q~ Quit", () => { if (_runningScenario is null){ // This causes GetScenarioToRun to return null @@ -175,51 +214,6 @@ namespace UICatalog { }); } - /// - /// This shows the selection UI. Each time it is run, it calls Application.Init to reset everything. - /// - /// - private static Scenario GetScenarioToRun () - { - Application.Init (); - - if (_menu == null) { - Setup (); - } - - _top = Application.Top; - - _top.KeyDown += KeyDownHandler; - - _top.Add (_menu); - _top.Add (_leftPane); - _top.Add (_rightPane); - _top.Add (_statusBar); - - // HACK: There is no other way to SetFocus before Application.Run. See Issue #445 -#if false - if (_runningScenario != null) - Application.Iteration += Application_Iteration; -#else - _top.Ready += (o, a) => { - if (_runningScenario != null) { - _top.SetFocus (_rightPane); - _runningScenario = null; - } - }; -#endif - - Application.Run (_top, false); - return _runningScenario; - } - -#if false - private static void Application_Iteration (object sender, EventArgs e) - { - Application.Iteration -= Application_Iteration; - _top.SetFocus (_rightPane); - } -#endif private static void _scenarioListView_OpenSelectedItem (object sender, EventArgs e) { if (_runningScenario is null) { @@ -232,7 +226,7 @@ namespace UICatalog { internal class ScenarioListDataSource : IListDataSource { public List Scenarios { get; set; } - public bool IsMarked (int item) => false;// Scenarios [item].IsMarked; + public bool IsMarked (int item) => false; public int Count => Scenarios.Count; @@ -274,7 +268,6 @@ namespace UICatalog { { return Scenarios; } - } /// @@ -285,15 +278,7 @@ namespace UICatalog { /// private static void KeyDownHandler (object sender, View.KeyEventEventArgs a) { - if (_runningScenario != null) { - //switch (ke.Key) { - //case Key.Esc: - // //_runningScenario.RequestStop (); - // break; - //case Key.Enter: - // break; - //}< - } else if (a.KeyEvent.Key == Key.Tab || a.KeyEvent.Key == Key.BackTab) { + if (a.KeyEvent.Key == Key.Tab || a.KeyEvent.Key == Key.BackTab) { // BUGBUG: Work around Issue #434 by implementing our own TAB navigation if (_top.MostFocused == _categoryListView) _top.SetFocus (_rightPane); @@ -302,26 +287,26 @@ namespace UICatalog { } if (a.KeyEvent.IsCapslock) { - _capslock.Title = "CapslockOn"; + _capslock.Title = "Capslock On"; _statusBar.SetNeedsDisplay (); } else { - _capslock.Title = "CapslockOff"; + _capslock.Title = "Capslock Off"; _statusBar.SetNeedsDisplay (); } if (a.KeyEvent.IsNumlock) { - _numlock.Title = "NumlockOn"; + _numlock.Title = "Numlock On"; _statusBar.SetNeedsDisplay (); } else { - _numlock.Title = "NumlockOff"; + _numlock.Title = "Numlock Off"; _statusBar.SetNeedsDisplay (); } if (a.KeyEvent.IsScrolllock) { - _scrolllock.Title = "ScrolllockOn"; + _scrolllock.Title = "Scrolllock On"; _statusBar.SetNeedsDisplay (); } else { - _scrolllock.Title = "ScrolllockOff"; + _scrolllock.Title = "Scrolllock Off"; _statusBar.SetNeedsDisplay (); } }