mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-02 01:03:29 +01:00
* Remove NStack and replace ustring to string.
* Add unit test and improving some code.
* Adjust code and fix all unit tests errors.
* Add XML Document and move the Rune folder into the Text folder.
* Improve unit tests with byte array on DecodeRune and DecodeLastRune.
* Fix unit test.
* 😂Code review
* Reduce unit tests code.
* Change StringExtensions.Make to StringExtensions.ToString and added some more unit tests.
* Fix merge errors.
* Remove GetTextWidth and calls replaced with StringExtensions.GetColumns.
* Hack to use UseSystemConsole passed in the command line arguments.
* Revert "Hack to use UseSystemConsole passed in the command line arguments."
This reverts commit b74d11c786.
* Remove Application.UseSystemConsole from the config file.
* Fix errors related by removing UseSystemConsole from the config file.
* Fixes #2633. DecodeEscSeq throw an exception if cki is null.
* Fix an exception if SelectedItem is -1.
* Set SelectedItem to 0 and remove unnecessary ToString.
* Using a unique ToString method for Rune and other for byte.
* Fix a bug where a wider rune is added with only a width of 1.
* Force the SelectedGlyph is the one that was typed after jumpList is executed.
* Added more InlineData to RuneTests.
* Reducing significantly the code by using Theory attribute in the TextFormatterTests.
* Override PositionCursor to handle the CharMap cursor position.
* Fix merge errors.
* Minor tweaks to API docs
---------
Co-authored-by: Tig Kindel <tig@users.noreply.github.com>
177 lines
5.3 KiB
C#
177 lines
5.3 KiB
C#
using System.Text;
|
|
using System.Collections.Generic;
|
|
using Terminal.Gui;
|
|
|
|
namespace UICatalog.Scenarios {
|
|
[ScenarioMetadata (Name: "Keys", Description: "Shows how to handle keyboard input")]
|
|
[ScenarioCategory ("Mouse and Keyboard")]
|
|
public class Keys : Scenario {
|
|
|
|
class TestWindow : Window {
|
|
public List<string> _processKeyList = new List<string> ();
|
|
public List<string> _processHotKeyList = new List<string> ();
|
|
public List<string> _processColdKeyList = new List<string> ();
|
|
|
|
public override bool ProcessKey (KeyEvent keyEvent)
|
|
{
|
|
_processKeyList.Add (keyEvent.ToString ());
|
|
return base.ProcessKey (keyEvent);
|
|
}
|
|
|
|
public override bool ProcessHotKey (KeyEvent keyEvent)
|
|
{
|
|
_processHotKeyList.Add (keyEvent.ToString ());
|
|
return base.ProcessHotKey (keyEvent);
|
|
}
|
|
|
|
public override bool ProcessColdKey (KeyEvent keyEvent)
|
|
{
|
|
_processColdKeyList.Add (keyEvent.ToString ());
|
|
|
|
return base.ProcessColdKey (keyEvent);
|
|
}
|
|
}
|
|
|
|
public override void Init ()
|
|
{
|
|
Application.Init ();
|
|
ConfigurationManager.Themes.Theme = Theme;
|
|
ConfigurationManager.Apply ();
|
|
|
|
Win = new TestWindow () {
|
|
Title = $"{Application.QuitKey} to Quit - Scenario: {GetName ()}",
|
|
X = 0,
|
|
Y = 0,
|
|
Width = Dim.Fill (),
|
|
Height = Dim.Fill (),
|
|
ColorScheme = Colors.ColorSchemes [TopLevelColorScheme],
|
|
};
|
|
Application.Top.Add (Win);
|
|
}
|
|
|
|
public override void Setup ()
|
|
{
|
|
// Type text here: ______
|
|
var editLabel = new Label ("Type text here:") {
|
|
X = 0,
|
|
Y = 0,
|
|
};
|
|
Win.Add (editLabel);
|
|
var edit = new TextField ("") {
|
|
X = Pos.Right (editLabel) + 1,
|
|
Y = Pos.Top (editLabel),
|
|
Width = Dim.Fill (2),
|
|
};
|
|
Win.Add (edit);
|
|
|
|
// Last KeyPress: ______
|
|
var keyPressedLabel = new Label ("Last KeyPress:") {
|
|
X = Pos.Left (editLabel),
|
|
Y = Pos.Top (editLabel) + 2,
|
|
};
|
|
Win.Add (keyPressedLabel);
|
|
var labelKeypress = new Label ("") {
|
|
X = Pos.Left (edit),
|
|
Y = Pos.Top (keyPressedLabel),
|
|
TextAlignment = Terminal.Gui.TextAlignment.Centered,
|
|
ColorScheme = Colors.Error,
|
|
AutoSize = true
|
|
};
|
|
Win.Add (labelKeypress);
|
|
|
|
Win.KeyPress += (s,e) => labelKeypress.Text = e.KeyEvent.ToString ();
|
|
|
|
// Key stroke log:
|
|
var keyLogLabel = new Label ("Key stroke log:") {
|
|
X = Pos.Left (editLabel),
|
|
Y = Pos.Top (editLabel) + 4,
|
|
};
|
|
Win.Add (keyLogLabel);
|
|
var fakeKeyPress = new KeyEvent (Key.CtrlMask | Key.A, new KeyModifiers () {
|
|
Alt = true,
|
|
Ctrl = true,
|
|
Shift = true
|
|
});
|
|
var maxLogEntry = $"Key{"",-5}: {fakeKeyPress}".Length;
|
|
var yOffset = (Application.Top == Application.Top ? 1 : 6);
|
|
var keyStrokelist = new List<string> ();
|
|
var keyStrokeListView = new ListView (keyStrokelist) {
|
|
X = 0,
|
|
Y = Pos.Top (keyLogLabel) + yOffset,
|
|
Width = Dim.Percent (30),
|
|
Height = Dim.Fill (),
|
|
};
|
|
keyStrokeListView.ColorScheme = Colors.TopLevel;
|
|
Win.Add (keyStrokeListView);
|
|
|
|
// ProcessKey log:
|
|
var processKeyLogLabel = new Label ("ProcessKey log:") {
|
|
X = Pos.Right (keyStrokeListView) + 1,
|
|
Y = Pos.Top (editLabel) + 4,
|
|
};
|
|
Win.Add (processKeyLogLabel);
|
|
|
|
maxLogEntry = $"{fakeKeyPress}".Length;
|
|
yOffset = (Application.Top == Application.Top ? 1 : 6);
|
|
var processKeyListView = new ListView (((TestWindow)Win)._processKeyList) {
|
|
X = Pos.Left (processKeyLogLabel),
|
|
Y = Pos.Top (processKeyLogLabel) + yOffset,
|
|
Width = Dim.Percent(30),
|
|
Height = Dim.Fill (),
|
|
};
|
|
processKeyListView.ColorScheme = Colors.TopLevel;
|
|
Win.Add (processKeyListView);
|
|
|
|
// ProcessHotKey log:
|
|
// BUGBUG: Label is not positioning right with Pos, so using TextField instead
|
|
var processHotKeyLogLabel = new Label ("ProcessHotKey log:") {
|
|
X = Pos.Right (processKeyListView) + 1,
|
|
Y = Pos.Top (editLabel) + 4,
|
|
};
|
|
Win.Add (processHotKeyLogLabel);
|
|
|
|
yOffset = (Application.Top == Application.Top ? 1 : 6);
|
|
var processHotKeyListView = new ListView (((TestWindow)Win)._processHotKeyList) {
|
|
X = Pos.Left (processHotKeyLogLabel),
|
|
Y = Pos.Top (processHotKeyLogLabel) + yOffset,
|
|
Width = Dim.Percent (20),
|
|
Height = Dim.Fill (),
|
|
};
|
|
processHotKeyListView.ColorScheme = Colors.TopLevel;
|
|
Win.Add (processHotKeyListView);
|
|
|
|
// ProcessColdKey log:
|
|
// BUGBUG: Label is not positioning right with Pos, so using TextField instead
|
|
var processColdKeyLogLabel = new Label ("ProcessColdKey log:") {
|
|
X = Pos.Right (processHotKeyListView) + 1,
|
|
Y = Pos.Top (editLabel) + 4,
|
|
};
|
|
Win.Add (processColdKeyLogLabel);
|
|
|
|
yOffset = (Application.Top == Application.Top ? 1 : 6);
|
|
var processColdKeyListView = new ListView (((TestWindow)Win)._processColdKeyList) {
|
|
X = Pos.Left (processColdKeyLogLabel),
|
|
Y = Pos.Top (processColdKeyLogLabel) + yOffset,
|
|
Width = Dim.Percent (20),
|
|
Height = Dim.Fill (),
|
|
};
|
|
|
|
Win.KeyDown += (s,a) => KeyDownPressUp (a.KeyEvent, "Down");
|
|
Win.KeyPress += (s, a) => KeyDownPressUp (a.KeyEvent, "Press");
|
|
Win.KeyUp += (s, a) => KeyDownPressUp (a.KeyEvent, "Up");
|
|
|
|
void KeyDownPressUp (KeyEvent keyEvent, string updown)
|
|
{
|
|
var msg = $"Key{updown,-5}: {keyEvent}";
|
|
keyStrokelist.Add (msg);
|
|
keyStrokeListView.MoveDown ();
|
|
processKeyListView.MoveDown ();
|
|
processColdKeyListView.MoveDown ();
|
|
processHotKeyListView.MoveDown ();
|
|
}
|
|
|
|
processColdKeyListView.ColorScheme = Colors.TopLevel;
|
|
Win.Add (processColdKeyListView);
|
|
}
|
|
}
|
|
} |