00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "keyboardButton.h"
00020 #include "buttonRegistry.h"
00021
00022 #include <ctype.h>
00023
00024
00025
00026
00027
00028
00029
00030
00031 ButtonHandle KeyboardButton::
00032 ascii_key(char ascii_equivalent) {
00033 return ButtonRegistry::ptr()->find_ascii_button(ascii_equivalent);
00034 }
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 ButtonHandle KeyboardButton::
00045 ascii_key(const string &ascii_equivalent) {
00046 if (ascii_equivalent.empty()) {
00047 return ButtonHandle::none();
00048 } else {
00049 return ButtonRegistry::ptr()->find_ascii_button(ascii_equivalent[0]);
00050 }
00051 }
00052
00053 #define DEFINE_KEYBD_BUTTON_HANDLE(KeyName) \
00054 static ButtonHandle _##KeyName; \
00055 ButtonHandle KeyboardButton::KeyName() { return _##KeyName; }
00056
00057
00058 DEFINE_KEYBD_BUTTON_HANDLE(space)
00059 DEFINE_KEYBD_BUTTON_HANDLE(backspace)
00060 DEFINE_KEYBD_BUTTON_HANDLE(tab)
00061 DEFINE_KEYBD_BUTTON_HANDLE(enter)
00062 DEFINE_KEYBD_BUTTON_HANDLE(escape)
00063 DEFINE_KEYBD_BUTTON_HANDLE(f1)
00064 DEFINE_KEYBD_BUTTON_HANDLE(f2)
00065 DEFINE_KEYBD_BUTTON_HANDLE(f3)
00066 DEFINE_KEYBD_BUTTON_HANDLE(f4)
00067 DEFINE_KEYBD_BUTTON_HANDLE(f5)
00068 DEFINE_KEYBD_BUTTON_HANDLE(f6)
00069 DEFINE_KEYBD_BUTTON_HANDLE(f7)
00070 DEFINE_KEYBD_BUTTON_HANDLE(f8)
00071 DEFINE_KEYBD_BUTTON_HANDLE(f9)
00072 DEFINE_KEYBD_BUTTON_HANDLE(f10)
00073 DEFINE_KEYBD_BUTTON_HANDLE(f11)
00074 DEFINE_KEYBD_BUTTON_HANDLE(f12)
00075 DEFINE_KEYBD_BUTTON_HANDLE(left)
00076 DEFINE_KEYBD_BUTTON_HANDLE(right)
00077 DEFINE_KEYBD_BUTTON_HANDLE(up)
00078 DEFINE_KEYBD_BUTTON_HANDLE(down)
00079 DEFINE_KEYBD_BUTTON_HANDLE(page_up)
00080 DEFINE_KEYBD_BUTTON_HANDLE(page_down)
00081 DEFINE_KEYBD_BUTTON_HANDLE(home)
00082 DEFINE_KEYBD_BUTTON_HANDLE(end)
00083 DEFINE_KEYBD_BUTTON_HANDLE(insert)
00084 DEFINE_KEYBD_BUTTON_HANDLE(del)
00085 DEFINE_KEYBD_BUTTON_HANDLE(meta)
00086 DEFINE_KEYBD_BUTTON_HANDLE(caps_lock)
00087 DEFINE_KEYBD_BUTTON_HANDLE(shift_lock)
00088 DEFINE_KEYBD_BUTTON_HANDLE(scroll_lock)
00089 DEFINE_KEYBD_BUTTON_HANDLE(num_lock)
00090 DEFINE_KEYBD_BUTTON_HANDLE(print_screen)
00091 DEFINE_KEYBD_BUTTON_HANDLE(shift)
00092 DEFINE_KEYBD_BUTTON_HANDLE(control)
00093 DEFINE_KEYBD_BUTTON_HANDLE(alt)
00094
00095
00096
00097
00098
00099
00100
00101
00102 void KeyboardButton::
00103 init_keyboard_buttons() {
00104 ButtonRegistry::ptr()->register_button(_space, "space", ' ');
00105 ButtonRegistry::ptr()->register_button(_backspace, "backspace", '\x08');
00106 ButtonRegistry::ptr()->register_button(_tab, "tab", '\x09');
00107 ButtonRegistry::ptr()->register_button(_enter, "enter", '\x0d');
00108 ButtonRegistry::ptr()->register_button(_escape, "escape", '\x1b');
00109 ButtonRegistry::ptr()->register_button(_del, "delete", '\x7f');
00110
00111 ButtonRegistry::ptr()->register_button(_f1, "f1");
00112 ButtonRegistry::ptr()->register_button(_f2, "f2");
00113 ButtonRegistry::ptr()->register_button(_f3, "f3");
00114 ButtonRegistry::ptr()->register_button(_f4, "f4");
00115 ButtonRegistry::ptr()->register_button(_f5, "f5");
00116 ButtonRegistry::ptr()->register_button(_f6, "f6");
00117 ButtonRegistry::ptr()->register_button(_f7, "f7");
00118 ButtonRegistry::ptr()->register_button(_f8, "f8");
00119 ButtonRegistry::ptr()->register_button(_f9, "f9");
00120 ButtonRegistry::ptr()->register_button(_f10, "f10");
00121 ButtonRegistry::ptr()->register_button(_f11, "f11");
00122 ButtonRegistry::ptr()->register_button(_f12, "f12");
00123
00124 ButtonRegistry::ptr()->register_button(_left, "arrow_left");
00125 ButtonRegistry::ptr()->register_button(_right, "arrow_right");
00126 ButtonRegistry::ptr()->register_button(_up, "arrow_up");
00127 ButtonRegistry::ptr()->register_button(_down, "arrow_down");
00128 ButtonRegistry::ptr()->register_button(_page_up, "page_up");
00129 ButtonRegistry::ptr()->register_button(_page_down, "page_down");
00130 ButtonRegistry::ptr()->register_button(_home, "home");
00131 ButtonRegistry::ptr()->register_button(_end, "end");
00132 ButtonRegistry::ptr()->register_button(_insert, "insert");
00133
00134 ButtonRegistry::ptr()->register_button(_shift, "shift");
00135 ButtonRegistry::ptr()->register_button(_control, "control");
00136 ButtonRegistry::ptr()->register_button(_alt, "alt");
00137 ButtonRegistry::ptr()->register_button(_meta, "meta");
00138 ButtonRegistry::ptr()->register_button(_caps_lock, "caps_lock");
00139 ButtonRegistry::ptr()->register_button(_shift_lock, "shift_lock");
00140 ButtonRegistry::ptr()->register_button(_num_lock, "num_lock");
00141 ButtonRegistry::ptr()->register_button(_scroll_lock, "scroll_lock");
00142 ButtonRegistry::ptr()->register_button(_print_screen, "print_screen");
00143
00144
00145 for (int i = 32; i < 127; i++) {
00146 if (isgraph(i)) {
00147 ButtonHandle key;
00148 ButtonRegistry::ptr()->register_button(key, string(1, (char)i), i);
00149 }
00150 }
00151 }