Panda3D
|
00001 // Filename: keyboardButton.cxx 00002 // Created by: drose (01Mar00) 00003 // 00004 //////////////////////////////////////////////////////////////////// 00005 // 00006 // PANDA 3D SOFTWARE 00007 // Copyright (c) Carnegie Mellon University. All rights reserved. 00008 // 00009 // All use of this software is subject to the terms of the revised BSD 00010 // license. You should have received a copy of this license along 00011 // with this source code in a file named "LICENSE." 00012 // 00013 //////////////////////////////////////////////////////////////////// 00014 00015 #include "keyboardButton.h" 00016 #include "buttonRegistry.h" 00017 00018 #include <ctype.h> 00019 00020 //////////////////////////////////////////////////////////////////// 00021 // Function: KeyboardButton::ascii_key 00022 // Access: Public, Static 00023 // Description: Returns the ButtonHandle associated with the 00024 // particular ASCII character, if there is one, or 00025 // ButtonHandle::none() if there is not. 00026 //////////////////////////////////////////////////////////////////// 00027 ButtonHandle KeyboardButton:: 00028 ascii_key(char ascii_equivalent) { 00029 return ButtonRegistry::ptr()->find_ascii_button(ascii_equivalent); 00030 } 00031 00032 //////////////////////////////////////////////////////////////////// 00033 // Function: KeyboardButton::ascii_key 00034 // Access: Public, Static 00035 // Description: Returns the ButtonHandle associated with the 00036 // particular ASCII character (taken from the first 00037 // character of the indicated string), if there is one, 00038 // or ButtonHandle::none() if there is not. 00039 //////////////////////////////////////////////////////////////////// 00040 ButtonHandle KeyboardButton:: 00041 ascii_key(const string &ascii_equivalent) { 00042 if (ascii_equivalent.empty()) { 00043 return ButtonHandle::none(); 00044 } else { 00045 return ButtonRegistry::ptr()->find_ascii_button(ascii_equivalent[0]); 00046 } 00047 } 00048 00049 #define DEFINE_KEYBD_BUTTON_HANDLE(KeyName) \ 00050 static ButtonHandle _##KeyName; \ 00051 ButtonHandle KeyboardButton::KeyName() { return _##KeyName; } 00052 00053 00054 DEFINE_KEYBD_BUTTON_HANDLE(space) 00055 DEFINE_KEYBD_BUTTON_HANDLE(backspace) 00056 DEFINE_KEYBD_BUTTON_HANDLE(tab) 00057 DEFINE_KEYBD_BUTTON_HANDLE(enter) 00058 DEFINE_KEYBD_BUTTON_HANDLE(escape) 00059 DEFINE_KEYBD_BUTTON_HANDLE(f1) 00060 DEFINE_KEYBD_BUTTON_HANDLE(f2) 00061 DEFINE_KEYBD_BUTTON_HANDLE(f3) 00062 DEFINE_KEYBD_BUTTON_HANDLE(f4) 00063 DEFINE_KEYBD_BUTTON_HANDLE(f5) 00064 DEFINE_KEYBD_BUTTON_HANDLE(f6) 00065 DEFINE_KEYBD_BUTTON_HANDLE(f7) 00066 DEFINE_KEYBD_BUTTON_HANDLE(f8) 00067 DEFINE_KEYBD_BUTTON_HANDLE(f9) 00068 DEFINE_KEYBD_BUTTON_HANDLE(f10) 00069 DEFINE_KEYBD_BUTTON_HANDLE(f11) 00070 DEFINE_KEYBD_BUTTON_HANDLE(f12) 00071 DEFINE_KEYBD_BUTTON_HANDLE(f13) 00072 DEFINE_KEYBD_BUTTON_HANDLE(f14) 00073 DEFINE_KEYBD_BUTTON_HANDLE(f15) 00074 DEFINE_KEYBD_BUTTON_HANDLE(f16) 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(help) 00086 DEFINE_KEYBD_BUTTON_HANDLE(meta) 00087 DEFINE_KEYBD_BUTTON_HANDLE(caps_lock) 00088 DEFINE_KEYBD_BUTTON_HANDLE(shift_lock) 00089 DEFINE_KEYBD_BUTTON_HANDLE(scroll_lock) 00090 DEFINE_KEYBD_BUTTON_HANDLE(num_lock) 00091 DEFINE_KEYBD_BUTTON_HANDLE(print_screen) 00092 DEFINE_KEYBD_BUTTON_HANDLE(pause) 00093 DEFINE_KEYBD_BUTTON_HANDLE(shift) 00094 DEFINE_KEYBD_BUTTON_HANDLE(control) 00095 DEFINE_KEYBD_BUTTON_HANDLE(alt) 00096 DEFINE_KEYBD_BUTTON_HANDLE(lshift) 00097 DEFINE_KEYBD_BUTTON_HANDLE(rshift) 00098 DEFINE_KEYBD_BUTTON_HANDLE(lcontrol) 00099 DEFINE_KEYBD_BUTTON_HANDLE(rcontrol) 00100 DEFINE_KEYBD_BUTTON_HANDLE(lalt) 00101 DEFINE_KEYBD_BUTTON_HANDLE(ralt) 00102 00103 00104 //////////////////////////////////////////////////////////////////// 00105 // Function: KeyboardButton::init_keyboard_buttons 00106 // Access: Public, Static 00107 // Description: This is intended to be called only once, by the 00108 // static initialization performed in config_util.cxx. 00109 //////////////////////////////////////////////////////////////////// 00110 void KeyboardButton:: 00111 init_keyboard_buttons() { 00112 ButtonRegistry::ptr()->register_button(_space, "space", 00113 ButtonHandle::none(), ' '); 00114 ButtonRegistry::ptr()->register_button(_backspace, "backspace", 00115 ButtonHandle::none(), '\x08'); 00116 ButtonRegistry::ptr()->register_button(_tab, "tab", 00117 ButtonHandle::none(), '\x09'); 00118 ButtonRegistry::ptr()->register_button(_enter, "enter", 00119 ButtonHandle::none(), '\x0d'); 00120 ButtonRegistry::ptr()->register_button(_escape, "escape", 00121 ButtonHandle::none(), '\x1b'); 00122 ButtonRegistry::ptr()->register_button(_del, "delete", 00123 ButtonHandle::none(), '\x7f'); 00124 00125 ButtonRegistry::ptr()->register_button(_f1, "f1"); 00126 ButtonRegistry::ptr()->register_button(_f2, "f2"); 00127 ButtonRegistry::ptr()->register_button(_f3, "f3"); 00128 ButtonRegistry::ptr()->register_button(_f4, "f4"); 00129 ButtonRegistry::ptr()->register_button(_f5, "f5"); 00130 ButtonRegistry::ptr()->register_button(_f6, "f6"); 00131 ButtonRegistry::ptr()->register_button(_f7, "f7"); 00132 ButtonRegistry::ptr()->register_button(_f8, "f8"); 00133 ButtonRegistry::ptr()->register_button(_f9, "f9"); 00134 ButtonRegistry::ptr()->register_button(_f10, "f10"); 00135 ButtonRegistry::ptr()->register_button(_f11, "f11"); 00136 ButtonRegistry::ptr()->register_button(_f12, "f12"); 00137 00138 ButtonRegistry::ptr()->register_button(_f13, "f13"); 00139 ButtonRegistry::ptr()->register_button(_f14, "f14"); 00140 ButtonRegistry::ptr()->register_button(_f15, "f15"); 00141 ButtonRegistry::ptr()->register_button(_f16, "f16"); 00142 00143 ButtonRegistry::ptr()->register_button(_left, "arrow_left"); 00144 ButtonRegistry::ptr()->register_button(_right, "arrow_right"); 00145 ButtonRegistry::ptr()->register_button(_up, "arrow_up"); // cannot name this 'up' since it conflicts with key-release name 'up' 00146 ButtonRegistry::ptr()->register_button(_down, "arrow_down"); 00147 ButtonRegistry::ptr()->register_button(_page_up, "page_up"); 00148 ButtonRegistry::ptr()->register_button(_page_down, "page_down"); 00149 ButtonRegistry::ptr()->register_button(_home, "home"); 00150 ButtonRegistry::ptr()->register_button(_end, "end"); 00151 ButtonRegistry::ptr()->register_button(_insert, "insert"); 00152 ButtonRegistry::ptr()->register_button(_help, "help"); 00153 00154 ButtonRegistry::ptr()->register_button(_shift, "shift"); 00155 ButtonRegistry::ptr()->register_button(_control, "control"); 00156 ButtonRegistry::ptr()->register_button(_alt, "alt"); 00157 ButtonRegistry::ptr()->register_button(_meta, "meta"); 00158 ButtonRegistry::ptr()->register_button(_caps_lock, "caps_lock"); 00159 ButtonRegistry::ptr()->register_button(_shift_lock, "shift_lock"); 00160 ButtonRegistry::ptr()->register_button(_num_lock, "num_lock"); 00161 ButtonRegistry::ptr()->register_button(_scroll_lock, "scroll_lock"); 00162 ButtonRegistry::ptr()->register_button(_print_screen, "print_screen"); 00163 ButtonRegistry::ptr()->register_button(_pause, "pause"); 00164 00165 ButtonRegistry::ptr()->register_button(_lshift, "lshift", _shift); 00166 ButtonRegistry::ptr()->register_button(_rshift, "rshift", _shift); 00167 ButtonRegistry::ptr()->register_button(_lcontrol, "lcontrol", _control); 00168 ButtonRegistry::ptr()->register_button(_rcontrol, "rcontrol", _control); 00169 ButtonRegistry::ptr()->register_button(_lalt, "lalt", _alt); 00170 ButtonRegistry::ptr()->register_button(_ralt, "ralt", _alt); 00171 00172 // Also register all of the visible ASCII characters. 00173 for (int i = 32; i < 127; i++) { 00174 if (isgraph(i)) { 00175 ButtonHandle key; 00176 ButtonRegistry::ptr()->register_button(key, string(1, (char)i), 00177 ButtonHandle::none(), i); 00178 } 00179 } 00180 }