00001 //////////////////////////////////////////////////////////////////////////////// 00002 // Scorched3D (c) 2000-2009 00003 // 00004 // This file is part of Scorched3D. 00005 // 00006 // Scorched3D is free software; you can redistribute it and/or modify 00007 // it under the terms of the GNU General Public License as published by 00008 // the Free Software Foundation; either version 2 of the License, or 00009 // (at your option) any later version. 00010 // 00011 // Scorched3D is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 // GNU General Public License for more details. 00015 // 00016 // You should have received a copy of the GNU General Public License 00017 // along with Scorched3D; if not, write to the Free Software 00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 //////////////////////////////////////////////////////////////////////////////// 00020 00021 #ifndef _KEYBOARD_H_ 00022 #define _KEYBOARD_H_ 00023 00024 #include <common/KeyboardHistory.h> 00025 #include <common/KeyboardKey.h> 00026 #include <string> 00027 #include <list> 00028 #include <map> 00029 00030 #define MAX_KEYBDHIST 1024 00031 #define KEYBOARDKEY(name, key) static KeyboardKey * key = Keyboard::instance()->getKey( name ); 00032 00033 class Keyboard 00034 { 00035 public: 00036 static Keyboard *instance(); 00037 00038 bool loadKeyFile(bool loadDefaults = false); 00039 bool saveKeyFile(); 00040 bool init(); 00041 00042 char *getkeyboardbuffer(unsigned int &bufCnt); 00043 unsigned int getKeyboardState(); 00044 KeyboardHistory::HistoryElement *getkeyboardhistory(unsigned int &histCnt); 00045 00046 void processKeyboardEvent(SDL_Event &event); 00047 static bool &getDvorak(); 00048 00049 KeyboardKey *getKey(const char *name); 00050 std::list<std::string> &getKeyList() { return keyList_; } 00051 std::list<KeyboardKey *> &getCommandKeys() { return commandKeys_; } 00052 std::map<std::string, KeyboardKey *> &getKeyMap() { return keyMap_; } 00053 00054 protected: 00055 static Keyboard *instance_; 00056 static bool dvorak_; // TODO // FIX ME NOT WORKING 00057 KeyboardHistory::HistoryElement keybHist_[MAX_KEYBDHIST]; 00058 int keybHistCnt_; 00059 Uint16 mHighSurrogate; 00060 00061 void clear(); 00062 bool loadKeyFile(const std::string &fileName, bool masterFile); 00063 void handleUnicodeUTF16(Uint16 utf16, SDLKey key); 00064 void raiseUnicodeUTF16(Uint16 utf16, SDLKey key); 00065 00066 std::map<std::string, KeyboardKey *> keyMap_; 00067 std::list<KeyboardKey *> commandKeys_; 00068 std::list<std::string> keyList_; 00069 00070 private: 00071 Keyboard(); 00072 virtual ~Keyboard(); 00073 00074 }; 00075 00076 #endif /* _KEYBOARD_H_ */
1.5.3