1from fsgs.util import sdl2
2
3# with open(os.expanduser('~/Desktop/keys.txt'), 'wb') as f:
4#     for key in sorted(sdl_key_codes.keys()):
5#         value = str(sdl_key_codes[key])
6#         sdl_name = 'SDLK_' + key.upper()
7#         try:
8#             dik_name = 'DIK_' + sdlk_to_dik[key.upper()]
9#         except KeyError:
10#             dik_name = ''
11#         try:
12#             dik_code = str(dinput_key_codes[key.upper()])
13#         except KeyError:
14#             dik_code = ''
15#         f.write("    '" + sdl_name + "': (" + value + ", '" + dik_name +
16#                 "', " + dik_code + '),\n')
17
18
19class Key(object):
20    def __init__(self, name):
21        self.name = name
22
23    @property
24    def sdl_name(self):
25        return self.name
26
27    # Deprecated
28    @property
29    def sdl_code(self):
30        return key_table[self.name][0]
31
32    @property
33    def sdl2_key_code(self):
34        return key_table[self.name][0]
35
36    @property
37    def dinput_name(self):
38        return key_table[self.name][1]
39
40    @property
41    def dinput_code(self):
42        return key_table[self.name][2]
43
44    @property
45    def sdl2_scan_code(self):
46        return key_table[self.name][3]
47
48    def __str__(self):
49        return "<Key {}>".format(self.name)
50
51
52class Keyboard(object):
53    @staticmethod
54    def key(name):
55        # try:
56        #     code = name.key.keysym.sym
57        # except AttributeError:
58        #     pass
59        print("key({})".format(name))
60        try:
61            code = name["key"]
62        except (KeyError, TypeError):
63            pass
64        else:
65            name = sdl_key_code_to_name[code]
66        if isinstance(name, int):
67            name = sdl_key_code_to_name[name]
68        name = name.upper()
69        if name.startswith("SDLK_"):
70            pass
71        else:
72            name = "SDLK_" + name
73        return Key(name)
74
75
76# class Keyboard(object):
77#     @staticmethod
78#     def key(name):
79#         if isinstance(name, int):
80#             name = sdl_key_code_to_name[name]
81#         name = name.upper()
82#         if name.startswith("SDLK_"):
83#             pass
84#         else:
85#             name = "SDLK_" + name
86#         return Key(name)
87
88
89key_table = {
90    "SDLK_NO_KEY": (0, "DIK_NO_KEY", 0, 0),
91    "SDLK_0": (48, "DIK_0", 11, sdl2.SDL_SCANCODE_0),
92    "SDLK_1": (49, "DIK_1", 2, sdl2.SDL_SCANCODE_1),
93    "SDLK_2": (50, "DIK_2", 3, sdl2.SDL_SCANCODE_2),
94    "SDLK_3": (51, "DIK_3", 4, sdl2.SDL_SCANCODE_3),
95    "SDLK_4": (52, "DIK_4", 5, sdl2.SDL_SCANCODE_4),
96    "SDLK_5": (53, "DIK_5", 6, sdl2.SDL_SCANCODE_5),
97    "SDLK_6": (54, "DIK_6", 7, sdl2.SDL_SCANCODE_6),
98    "SDLK_7": (55, "DIK_7", 8, sdl2.SDL_SCANCODE_7),
99    "SDLK_8": (56, "DIK_8", 9, sdl2.SDL_SCANCODE_8),
100    "SDLK_9": (57, "DIK_9", 10, sdl2.SDL_SCANCODE_9),
101    "SDLK_A": (97, "DIK_A", 30, sdl2.SDL_SCANCODE_A),
102    "SDLK_AMPERSAND": (38, "", 0),
103    "SDLK_ASTERISK": (42, "", 0),
104    "SDLK_AT": (64, "DIK_AT", 145),
105    "SDLK_B": (98, "DIK_B", 48),
106    "SDLK_BACKQUOTE": (96, "DIK_GRAVE", 0),
107    "SDLK_BACKSLASH": (92, "DIK_BACKSLASH", 43),
108    "SDLK_BACKSPACE": (sdl2.SDLK_BACKSPACE, "DIK_BACK", 14),
109    "SDLK_BREAK": (318, "", 0),
110    "SDLK_C": (99, "DIK_C", 46, sdl2.SDL_SCANCODE_C),
111    "SDLK_CAPSLOCK": (301, "DIK_CAPITAL", 58),
112    "SDLK_CARET": (94, "", 0),
113    "SDLK_CLEAR": (12, "", 0),
114    "SDLK_COLON": (58, "DIK_COLON", 146),
115    "SDLK_COMMA": (44, "DIK_COMMA", 51),
116    "SDLK_COMPOSE": (314, "", 0),
117    "SDLK_D": (100, "DIK_D", 32, sdl2.SDL_SCANCODE_D),
118    "SDLK_DELETE": (sdl2.SDLK_DELETE, "DIK_DELETE", 211),
119    "SDLK_DOLLAR": (36, "", 0),
120    "SDLK_DOWN": (sdl2.SDLK_DOWN, "DIK_DOWN", 208, sdl2.SDL_SCANCODE_DOWN),
121    "SDLK_E": (101, "DIK_E", 18),
122    "SDLK_END": (sdl2.SDLK_END, "DIK_END", 207),
123    "SDLK_EQUALS": (61, "DIK_EQUALS", 13),
124    "SDLK_ESCAPE": (sdl2.SDLK_ESCAPE, "DIK_ESCAPE", 1),
125    "SDLK_EURO": (321, "", 0),
126    "SDLK_EXCLAIM": (33, "", 0),
127    "SDLK_F": (102, "DIK_F", 33),
128    "SDLK_F1": (282, "DIK_F1", 59),
129    "SDLK_F10": (291, "DIK_F10", 68),
130    "SDLK_F11": (292, "DIK_F11", 87),
131    "SDLK_F12": (293, "DIK_F12", 88),
132    "SDLK_F13": (294, "DIK_F13", 100),
133    "SDLK_F14": (295, "DIK_F14", 101),
134    "SDLK_F15": (296, "DIK_F15", 102),
135    "SDLK_F2": (283, "DIK_F2", 60),
136    "SDLK_F3": (284, "DIK_F3", 61),
137    "SDLK_F4": (285, "DIK_F4", 62),
138    "SDLK_F5": (286, "DIK_F5", 63),
139    "SDLK_F6": (287, "DIK_F6", 64),
140    "SDLK_F7": (288, "DIK_F7", 65),
141    "SDLK_F8": (289, "DIK_F8", 66),
142    "SDLK_F9": (290, "DIK_F9", 67),
143    "SDLK_G": (103, "DIK_G", 34),
144    "SDLK_GREATER": (62, "", 0),
145    "SDLK_H": (104, "DIK_H", 35),
146    "SDLK_HASH": (35, "", 0),
147    "SDLK_HELP": (315, "", 0),
148    "SDLK_HOME": (sdl2.SDLK_HOME, "DIK_HOME", 199),
149    "SDLK_I": (105, "DIK_I", 23),
150    "SDLK_INSERT": (sdl2.SDLK_INSERT, "DIK_INSERT", 210),
151    "SDLK_J": (106, "DIK_J", 36),
152    "SDLK_K": (107, "DIK_K", 37),
153    "SDLK_KP0": (sdl2.SDLK_KP_0, "DIK_NUMPAD0", 82),
154    "SDLK_KP1": (sdl2.SDLK_KP_1, "DIK_NUMPAD1", 79),
155    "SDLK_KP2": (sdl2.SDLK_KP_2, "DIK_NUMPAD2", 80),
156    "SDLK_KP3": (sdl2.SDLK_KP_3, "DIK_NUMPAD3", 81),
157    "SDLK_KP4": (sdl2.SDLK_KP_4, "DIK_NUMPAD4", 75),
158    "SDLK_KP5": (sdl2.SDLK_KP_5, "DIK_NUMPAD5", 76),
159    "SDLK_KP6": (sdl2.SDLK_KP_6, "DIK_NUMPAD6", 77),
160    "SDLK_KP7": (sdl2.SDLK_KP_7, "DIK_NUMPAD7", 71),
161    "SDLK_KP8": (sdl2.SDLK_KP_8, "DIK_NUMPAD8", 72),
162    "SDLK_KP9": (sdl2.SDLK_KP_9, "DIK_NUMPAD9", 73),
163    "SDLK_KP_DIVIDE": (267, "DIK_DIVIDE", 181),
164    "SDLK_KP_ENTER": (271, "DIK_NUMPADENTER", 156),
165    "SDLK_KP_EQUALS": (272, "", 141),
166    "SDLK_KP_MINUS": (269, "DIK_SUBTRACT", 74),
167    "SDLK_KP_MULTIPLY": (268, "DIK_MULTIPLY", 55),
168    "SDLK_KP_PERIOD": (sdl2.SDLK_KP_PERIOD, "DIK_DECIMAL", 83),
169    "SDLK_KP_PLUS": (270, "DIK_ADD", 78),
170    "SDLK_L": (108, "DIK_L", 38, sdl2.SDL_SCANCODE_L),
171    "SDLK_LALT": (308, "DIK_LMENU", 56, sdl2.SDL_SCANCODE_LALT),
172    "SDLK_LCTRL": (
173        sdl2.SDLK_LCTRL,
174        "DIK_LCONTROL",
175        29,
176        sdl2.SDL_SCANCODE_LCTRL,
177    ),
178    "SDLK_LEFT": (sdl2.SDLK_LEFT, "DIK_LEFT", 203, sdl2.SDL_SCANCODE_LEFT),
179    "SDLK_LEFTBRACKET": (91, "DIK_LBRACKET", 26),
180    "SDLK_LEFTPAREN": (40, "", 0),
181    "SDLK_LESS": (60, "", 0),
182    "SDLK_LMETA": (310, "", 0),
183    "SDLK_LSHIFT": (
184        sdl2.SDLK_LSHIFT,
185        "DIK_LSHIFT",
186        42,
187        sdl2.SDL_SCANCODE_LSHIFT,
188    ),
189    "SDLK_LSUPER": (311, "DIK_LWIN", 219),  # SDL_SCANCODE_LGUI ?
190    "SDLK_M": (109, "DIK_M", 50),
191    "SDLK_MENU": (319, "", 0),
192    "SDLK_MINUS": (45, "DIK_MINUS", 12),
193    "SDLK_MODE": (313, "", 0),
194    "SDLK_N": (110, "DIK_N", 49),
195    "SDLK_NUMLOCK": (300, "DIK_NUMLOCK", 69),
196    "SDLK_O": (111, "DIK_O", 24),
197    "SDLK_P": (112, "DIK_P", 25),
198    "SDLK_PAGEDOWN": (sdl2.SDLK_PAGEDOWN, "DIK_NEXT", 209),
199    "SDLK_PAGEUP": (sdl2.SDLK_PAGEUP, "DIK_PRIOR", 201),
200    "SDLK_PAUSE": (19, "", 0),
201    "SDLK_PERIOD": (46, "DIK_PERIOD", 52),
202    "SDLK_PLUS": (43, "", 0),
203    "SDLK_POWER": (320, "", 0),
204    "SDLK_PRINT": (316, "", 0),
205    "SDLK_Q": (113, "DIK_Q", 16),
206    "SDLK_QUESTION": (63, "", 0),
207    "SDLK_QUOTE": (39, "DIK_APOSTROPHE", 40),
208    "SDLK_QUOTEDBL": (34, "", 0),
209    "SDLK_R": (114, "DIK_R", 19),
210    "SDLK_RALT": (307, "DIK_RMENU", 184),
211    "SDLK_RCTRL": (
212        sdl2.SDLK_RCTRL,
213        "DIK_RCONTROL",
214        157,
215        sdl2.SDL_SCANCODE_RCTRL,
216    ),
217    "SDLK_RETURN": (
218        sdl2.SDLK_RETURN,
219        "DIK_RETURN",
220        28,
221        sdl2.SDL_SCANCODE_RETURN,
222    ),
223    "SDLK_RIGHT": (sdl2.SDLK_RIGHT, "DIK_RIGHT", 205, sdl2.SDL_SCANCODE_RIGHT),
224    "SDLK_RIGHTBRACKET": (93, "DIK_RBRACKET", 27),
225    "SDLK_RIGHTPAREN": (41, "", 0),
226    "SDLK_RMETA": (309, "", 0),
227    "SDLK_RSHIFT": (
228        sdl2.SDLK_RSHIFT,
229        "DIK_RSHIFT",
230        54,
231        sdl2.SDL_SCANCODE_RSHIFT,
232    ),
233    "SDLK_RSUPER": (312, "DIK_RWIN", 220),
234    "SDLK_S": (115, "DIK_S", 31, sdl2.SDL_SCANCODE_S),
235    "SDLK_SCROLLOCK": (302, "DIK_SCROLL", 70),
236    "SDLK_SEMICOLON": (59, "DIK_SEMICOLON", 39),
237    "SDLK_SLASH": (47, "DIK_SLASH", 53),
238    "SDLK_SPACE": (sdl2.SDLK_SPACE, "DIK_SPACE", 57, sdl2.SDL_SCANCODE_SPACE),
239    "SDLK_SYSREQ": (317, "DIK_SYSRQ", 183),
240    "SDLK_T": (116, "DIK_T", 20),
241    "SDLK_TAB": (9, "DIK_TAB", 15),
242    "SDLK_U": (117, "DIK_U", 22),
243    "SDLK_UNDERSCORE": (95, "", 147),
244    "SDLK_UNDO": (322, "", 0),
245    "SDLK_UP": (sdl2.SDLK_UP, "DIK_UP", 200, sdl2.SDL_SCANCODE_UP),
246    "SDLK_V": (118, "DIK_V", 47),
247    "SDLK_W": (119, "DIK_W", 17),
248    "SDLK_WORLD_0": (160, ""),
249    "SDLK_WORLD_1": (161, ""),
250    "SDLK_WORLD_10": (170, ""),
251    "SDLK_WORLD_11": (171, ""),
252    "SDLK_WORLD_12": (172, ""),
253    "SDLK_WORLD_13": (173, ""),
254    "SDLK_WORLD_14": (174, ""),
255    "SDLK_WORLD_15": (175, ""),
256    "SDLK_WORLD_16": (176, ""),
257    "SDLK_WORLD_17": (177, ""),
258    "SDLK_WORLD_18": (178, ""),
259    "SDLK_WORLD_19": (179, ""),
260    "SDLK_WORLD_2": (162, ""),
261    "SDLK_WORLD_20": (180, ""),
262    "SDLK_WORLD_21": (181, ""),
263    "SDLK_WORLD_22": (182, ""),
264    "SDLK_WORLD_23": (183, ""),
265    "SDLK_WORLD_24": (184, ""),
266    "SDLK_WORLD_25": (185, ""),
267    "SDLK_WORLD_26": (186, ""),
268    "SDLK_WORLD_27": (187, ""),
269    "SDLK_WORLD_28": (188, ""),
270    "SDLK_WORLD_29": (189, ""),
271    "SDLK_WORLD_3": (163, ""),
272    "SDLK_WORLD_30": (190, ""),
273    "SDLK_WORLD_31": (191, ""),
274    "SDLK_WORLD_32": (192, ""),
275    "SDLK_WORLD_33": (193, ""),
276    "SDLK_WORLD_34": (194, ""),
277    "SDLK_WORLD_35": (195, ""),
278    "SDLK_WORLD_36": (196, ""),
279    "SDLK_WORLD_37": (197, ""),
280    "SDLK_WORLD_38": (198, ""),
281    "SDLK_WORLD_39": (199, ""),
282    "SDLK_WORLD_4": (164, ""),
283    "SDLK_WORLD_40": (200, ""),
284    "SDLK_WORLD_41": (201, ""),
285    "SDLK_WORLD_42": (202, ""),
286    "SDLK_WORLD_43": (203, ""),
287    "SDLK_WORLD_44": (204, ""),
288    "SDLK_WORLD_45": (205, ""),
289    "SDLK_WORLD_46": (206, ""),
290    "SDLK_WORLD_47": (207, ""),
291    "SDLK_WORLD_48": (208, ""),
292    "SDLK_WORLD_49": (209, ""),
293    "SDLK_WORLD_5": (165, ""),
294    "SDLK_WORLD_50": (210, ""),
295    "SDLK_WORLD_51": (211, ""),
296    "SDLK_WORLD_52": (212, ""),
297    "SDLK_WORLD_53": (213, ""),
298    "SDLK_WORLD_54": (214, ""),
299    "SDLK_WORLD_55": (215, ""),
300    "SDLK_WORLD_56": (216, ""),
301    "SDLK_WORLD_57": (217, ""),
302    "SDLK_WORLD_58": (218, ""),
303    "SDLK_WORLD_59": (219, ""),
304    "SDLK_WORLD_6": (166, ""),
305    "SDLK_WORLD_60": (220, ""),
306    "SDLK_WORLD_61": (221, ""),
307    "SDLK_WORLD_62": (222, ""),
308    "SDLK_WORLD_63": (223, ""),
309    "SDLK_WORLD_64": (224, ""),
310    "SDLK_WORLD_65": (225, ""),
311    "SDLK_WORLD_66": (226, ""),
312    "SDLK_WORLD_67": (227, ""),
313    "SDLK_WORLD_68": (228, ""),
314    "SDLK_WORLD_69": (229, ""),
315    "SDLK_WORLD_7": (167, ""),
316    "SDLK_WORLD_70": (230, ""),
317    "SDLK_WORLD_71": (231, ""),
318    "SDLK_WORLD_72": (232, ""),
319    "SDLK_WORLD_73": (233, ""),
320    "SDLK_WORLD_74": (234, ""),
321    "SDLK_WORLD_75": (235, ""),
322    "SDLK_WORLD_76": (236, ""),
323    "SDLK_WORLD_77": (237, ""),
324    "SDLK_WORLD_78": (238, ""),
325    "SDLK_WORLD_79": (239, ""),
326    "SDLK_WORLD_8": (168, ""),
327    "SDLK_WORLD_80": (240, ""),
328    "SDLK_WORLD_81": (241, ""),
329    "SDLK_WORLD_82": (242, ""),
330    "SDLK_WORLD_83": (243, ""),
331    "SDLK_WORLD_84": (244, ""),
332    "SDLK_WORLD_85": (245, ""),
333    "SDLK_WORLD_86": (246, ""),
334    "SDLK_WORLD_87": (247, ""),
335    "SDLK_WORLD_88": (248, ""),
336    "SDLK_WORLD_89": (249, ""),
337    "SDLK_WORLD_9": (169, ""),
338    "SDLK_WORLD_90": (250, ""),
339    "SDLK_WORLD_91": (251, ""),
340    "SDLK_WORLD_92": (252, ""),
341    "SDLK_WORLD_93": (253, ""),
342    "SDLK_WORLD_94": (254, ""),
343    "SDLK_WORLD_95": (255, ""),
344    "SDLK_X": (120, "DIK_X", 45, sdl2.SDL_SCANCODE_X),
345    "SDLK_Y": (121, "DIK_Y", 21, sdl2.SDL_SCANCODE_Y),
346    "SDLK_Z": (122, "DIK_Z", 44, sdl2.SDL_SCANCODE_Z),
347}
348
349sdl_key_code_to_name = {}
350for key, value in key_table.items():
351    sdl_key_code_to_name[value[0]] = key
352