164 lines
4.8 KiB
Ada
164 lines
4.8 KiB
Ada
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;
|