//
// Evemts.cs: Events, Key mappings
//
// Authors:
// Miguel de Icaza (miguel@gnome.org)
//
using System;
namespace Terminal {
///
/// The Key enumeration contains special encoding for some keys, but can also
/// encode all the unicode values that can be passed.
///
///
///
/// If the SpecialMask is set, then the value is that of the special mask,
/// otherwise, the value is the one of the lower bits (as extracted by CharMask)
///
///
/// Control keys are the values between 1 and 26 corresponding to Control-A to Control-Z
///
///
public enum Key : uint {
CharMask = 0xfffff,
///
/// If the SpecialMask is set, then the value is that of the special mask,
/// otherwise, the value is the one of the lower bits (as extracted by CharMask).
///
SpecialMask = 0xfff00000,
ControlA = 1,
ControlB,
ControlC,
ControlD,
ControlE,
ControlF,
ControlG,
ControlH,
ControlI,
Tab = ControlI,
ControlJ,
ControlK,
ControlL,
ControlM,
ControlN,
ControlO,
ControlP,
ControlQ,
ControlR,
ControlS,
ControlT,
ControlU,
ControlV,
ControlW,
ControlX,
ControlY,
ControlZ,
Esc = 27,
Enter = '\n',
Space = 32,
Delete = 127,
AltMask = 0x80000000,
Backspace = 0x100000,
CursorUp,
CursorDown,
CursorLeft,
CursorRight,
PageUp,
PageDown,
Home,
End,
DeleteChar,
InsertChar,
F1,
F2,
F3,
F4,
F5,
F6,
F7,
F8,
F9,
F10,
BackTab,
Unknown
}
///
/// Describes a keyboard event
///
public struct KeyEvent {
public Key Key;
public int KeyValue => (int)Key;
///
/// Gets a value indicating whether the Alt key was pressed (real or synthesized)
///
/// true if is alternate; otherwise, false.
public bool IsAlt => (Key & Key.AltMask) != 0;
///
/// Determines whether the value is a control key
///
/// true if is ctrl; otherwise, false.
public bool IsCtrl => ((uint)Key >= 1) && ((uint)Key <= 26);
public KeyEvent (Key k)
{
Key = k;
}
}
///
/// Mouse flags reported in MouseEvent.
///
///
/// They just happen to map to the ncurses ones.
///
[Flags]
public enum MouseFlags {
Button1Pressed = unchecked((int)0x2),
Button1Released = unchecked((int)0x1),
Button1Clicked = unchecked((int)0x4),
Button1DoubleClicked = unchecked((int)0x8),
Button1TripleClicked = unchecked((int)0x10),
Button2Pressed = unchecked((int)0x80),
Button2Released = unchecked((int)0x40),
Button2Clicked = unchecked((int)0x100),
Button2DoubleClicked = unchecked((int)0x200),
Button2TrippleClicked = unchecked((int)0x400),
Button3Pressed = unchecked((int)0x2000),
Button3Released = unchecked((int)0x1000),
Button3Clicked = unchecked((int)0x4000),
Button3DoubleClicked = unchecked((int)0x8000),
Button3TripleClicked = unchecked((int)0x10000),
Button4Pressed = unchecked((int)0x80000),
Button4Released = unchecked((int)0x40000),
Button4Clicked = unchecked((int)0x100000),
Button4DoubleClicked = unchecked((int)0x200000),
Button4TripleClicked = unchecked((int)0x400000),
ButtonShift = unchecked((int)0x2000000),
ButtonCtrl = unchecked((int)0x1000000),
ButtonAlt = unchecked((int)0x4000000),
ReportMousePosition = unchecked((int)0x8000000),
AllEvents = unchecked((int)0x7ffffff),
}
///
/// Describes a mouse event
///
public struct MouseEvent {
///
/// The X (column) location for the mouse event.
///
public int X;
///
/// The Y (column) location for the mouse event.
///
public int Y;
///
/// Flags indicating the kind of mouse event that is being posted.
///
public MouseFlags Flags;
///
/// Returns a that represents the current .
///
/// A that represents the current .
public override string ToString()
{
return $"({X},{Y}:{Flags}";
}
}
}