Panda3D
 All Classes Functions Variables Enumerations
keyboardButton.cxx
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 }
 All Classes Functions Variables Enumerations