Add initial prototype.

This commit is contained in:
Rod Kay
2022-07-31 17:34:54 +10:00
commit 54a53b2ac0
1421 changed files with 358874 additions and 0 deletions

View File

@@ -0,0 +1,163 @@
with
lace.Event,
lace.Subject;
package gel.Keyboard with remote_Types
--
-- Provides an interface for a keyboard.
--
is
type Item is limited interface
and lace.Subject.item;
type View is access all Item'class;
--------
--- Keys
--
type Key is (Nil, -- TODO: Better names.
BACKSPACE,
TAB,
CLEAR,
ENTER,
PAUSE,
ESCAPE,
SPACE,
EXCLAIM,
QUOTEDBL,
HASH,
DOLLAR,
Percent,
AMPERSAND,
QUOTE,
LEFTPAREN,
RIGHTPAREN,
ASTERISK,
PLUS,
COMMA,
MINUS,
PERIOD,
SLASH,
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
COLON, SEMICOLON,
LESS, EQUALS, GREATER,
QUESTION,
AT_key,
LEFTBRACKET,
BACKSLASH,
RIGHTBRACKET,
CARET,
UNDERSCORE,
BACKQUOTE,
a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z,
DELETE,
WORLD_0, WORLD_1, WORLD_2, WORLD_3, WORLD_4, WORLD_5, WORLD_6, WORLD_7, WORLD_8, WORLD_9,
WORLD_10, WORLD_11, WORLD_12, WORLD_13, WORLD_14, WORLD_15, WORLD_16, WORLD_17, WORLD_18, WORLD_19,
WORLD_20, WORLD_21, WORLD_22, WORLD_23, WORLD_24, WORLD_25, WORLD_26, WORLD_27, WORLD_28, WORLD_29,
WORLD_30, WORLD_31, WORLD_32, WORLD_33, WORLD_34, WORLD_35, WORLD_36, WORLD_37, WORLD_38, WORLD_39,
WORLD_40, WORLD_41, WORLD_42, WORLD_43, WORLD_44, WORLD_45, WORLD_46, WORLD_47, WORLD_48, WORLD_49,
WORLD_50, WORLD_51, WORLD_52, WORLD_53, WORLD_54, WORLD_55, WORLD_56, WORLD_57, WORLD_58, WORLD_59,
WORLD_60, WORLD_61, WORLD_62, WORLD_63, WORLD_64, WORLD_65, WORLD_66, WORLD_67, WORLD_68, WORLD_69,
WORLD_70, WORLD_71, WORLD_72, WORLD_73, WORLD_74, WORLD_75, WORLD_76, WORLD_77, WORLD_78, WORLD_79,
WORLD_80, WORLD_81, WORLD_82, WORLD_83, WORLD_84, WORLD_85, WORLD_86, WORLD_87, WORLD_88, WORLD_89,
WORLD_90, WORLD_91, WORLD_92, WORLD_93, WORLD_94, WORLD_95,
KP0, KP1, KP2, KP3, KP4, KP5, KP6, KP7, KP8, KP9,
KP_PERIOD,
KP_DIVIDE, KP_MULTIPLY, KP_MINUS, KP_PLUS,
KP_ENTER, KP_EQUALS,
UP, DOWN, RIGHT, LEFT,
INSERT,
HOME, END_key,
PAGEUP, PAGEDOWN,
F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15,
NUMLOCK, CAPSLOCK, SCROLLLOCK,
RSHIFT, LSHIFT,
RCTRL, LCTRL,
RALT, LALT,
RMETA, LMETA,
LSUPER, RSUPER,
MODE,
COMPOSE,
HELP,
PRINT,
SYSREQ,
BREAK,
MENU,
POWER,
EURO,
UNDO);
function is_Graphic (Self : in Key) return Boolean;
-------------
--- Modifiers
--
type Modifier is (LSHIFT, -- TODO: Better names.
RSHIFT,
LCTRL,
RCTRL,
LALT,
RALT,
LMETA,
RMETA,
NUM,
CAPS,
MODE);
type modifier_Set is array (Modifier) of Boolean;
no_Modifiers : constant modifier_Set;
type modified_Key is
record
Key : keyboard.Key;
modifier_Set : keyboard.modifier_Set;
end record;
function Image (Self : in modified_Key) return Character;
----------
--- Events
--
type key_press_Event is new lace.Event.item with
record
modified_Key : keyboard.modified_Key;
Code : Integer;
end record;
type key_release_Event is new lace.Event.item with
record
modified_Key : keyboard.modified_Key;
end record;
--------------
--- Attributes
--
function Modifiers (Self : in Item) return Modifier_Set is abstract;
--------------
--- Operations
--
procedure emit_key_press_Event (Self : in out Item; Key : in keyboard.Key;
key_Code : in Integer) is abstract;
procedure emit_key_release_Event (Self : in out Item; Key : in keyboard.Key) is abstract;
private
no_Modifiers : constant modifier_Set := [others => False];
end gel.Keyboard;