00001 #ifndef _KEY_MAPPINGS_H_
00002 #define _KEY_MAPPINGS_H_
00003
00004 #include <qwindowsystem_qws.h>
00005 #include <qmap.h>
00006
00007 #include <qintdict.h>
00008
00009 class MapInfo
00010 {
00011 public:
00012 MapInfo(){};
00013 MapInfo(int code, int mod = 0, int uni = 0,
00014 int shift_uni = 0, int ctrl_uni = 0);
00015
00016 static const QWSServer::KeyMap* findKeyMap(int code);
00017
00018 int keycode;
00019 int modifiers;
00020 int unicode;
00021 int shift_unicode;
00022 int ctrl_unicode;
00023 bool isDefined;
00024 };
00025
00026 class KeyMappings
00027 {
00028 public:
00029 typedef QWSServer::KeyMap KeyMap;
00030 typedef QMap<int, MapInfo> CodeMaps;
00031
00032 KeyMappings();
00033 virtual ~KeyMappings();
00034
00035 void setOriginal(int unicode, int modifiers);
00036 void setModifiers(int modifiers);
00037 void setUnicode(int unicode);
00038 void setKeycode(int keycode);
00039
00040 int getUnicode();
00041 int getKeycode();
00042 int getModifiers();
00043 bool isDefined();
00044
00045 void assign(int keycode, int keymask, int mapcode, int mapmodifiers = 0,
00046 int unicode = 0, int shift_unicode = 0, int ctrl_unicode = 0);
00047 void assignModifier(const QString& type, const QString& state);
00048 void assignUnicode(const QString& kind, const QString& ch);
00049 void assignUnicode(int unicode);
00050 bool apply(int unicode, int keycode, int modifiers, int keymask, bool isPress);
00051 bool apply(int keycode, int keymask, bool isPress);
00052 void setCapsLock(bool on=true){
00053 m_capslock = on;
00054 }
00055
00056 void reset();
00057
00058 void statistics();
00059 private:
00060 QMap<int, CodeMaps*> m_keymaps;
00061 MapInfo m_keyinfo;
00062 int m_modifiers;
00063 CodeMaps::Iterator m_it;
00064
00065 bool m_capslock;
00066 bool m_isMapped;
00067
00068 void init();
00069 void clear();
00070 };
00071
00072 #endif