vdr
1.7.27
|
00001 /* 00002 * keys.h: Remote control Key handling 00003 * 00004 * See the main source file 'vdr.c' for copyright information and 00005 * how to reach the author. 00006 * 00007 * $Id: keys.h 2.1 2010/04/05 10:06:04 kls Exp $ 00008 */ 00009 00010 #ifndef __KEYS_H 00011 #define __KEYS_H 00012 00013 #include "config.h" 00014 #include "tools.h" 00015 00016 enum eKeys { // "Up" and "Down" must be the first two keys! 00017 kUp, 00018 kDown, 00019 kMenu, 00020 kOk, 00021 kBack, 00022 kLeft, 00023 kRight, 00024 kRed, 00025 kGreen, 00026 kYellow, 00027 kBlue, 00028 k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, 00029 kInfo, 00030 kPlay, 00031 kPause, 00032 kStop, 00033 kRecord, 00034 kFastFwd, 00035 kFastRew, 00036 kNext, 00037 kPrev, 00038 kPower, 00039 kChanUp, 00040 kChanDn, 00041 kChanPrev, 00042 kVolUp, 00043 kVolDn, 00044 kMute, 00045 kAudio, 00046 kSubtitles, 00047 kSchedule, 00048 kChannels, 00049 kTimers, 00050 kRecordings, 00051 kSetup, 00052 kCommands, 00053 kUser0, kUser1, kUser2, kUser3, kUser4, kUser5, kUser6, kUser7, kUser8, kUser9, 00054 kNone, 00055 kKbd, 00056 // The following codes are used internally: 00057 k_Plugin, 00058 k_Setup, 00059 // The following flags are OR'd with the above codes: 00060 k_Repeat = 0x8000, 00061 k_Release = 0x4000, 00062 k_Flags = k_Repeat | k_Release, 00063 }; 00064 00065 // This is in preparation for having more key codes: 00066 #define kMarkToggle k0 00067 #define kMarkMoveBack k4 00068 #define kMarkMoveForward k6 00069 #define kMarkJumpBack k7 00070 #define kMarkJumpForward k9 00071 #define kEditCut k2 00072 #define kEditTest k8 00073 00074 #define RAWKEY(k) (eKeys((k) & ~k_Flags)) 00075 #define ISRAWKEY(k) ((k) != kNone && ((k) & k_Flags) == 0) 00076 #define NORMALKEY(k) (eKeys((k) & ~k_Repeat)) 00077 #define ISMODELESSKEY(k) (RAWKEY(k) > k9) 00078 #define ISREALKEY(k) (k != kNone && k != k_Plugin) 00079 00080 #define BASICKEY(k) (eKeys((k) & 0xFFFF)) 00081 #define KBDKEY(k) (eKeys(((k) << 16) | kKbd)) 00082 #define KEYKBD(k) (((k) >> 16) & 0xFFFF) 00083 00084 struct tKey { 00085 eKeys type; 00086 const char *name; 00087 }; 00088 00089 class cKey : public cListObject { 00090 private: 00091 char *remote; 00092 char *code; 00093 eKeys key; 00094 public: 00095 cKey(void); 00096 cKey(const char *Remote, const char *Code, eKeys Key); 00097 ~cKey(); 00098 const char *Remote(void) { return remote; } 00099 const char *Code(void) { return code; } 00100 eKeys Key(void) { return key; } 00101 bool Parse(char *s); 00102 bool Save(FILE *f); 00103 static eKeys FromString(const char *Name); 00104 static const char *ToString(eKeys Key, bool Translate = false); 00105 }; 00106 00107 class cKeys : public cConfig<cKey> { 00108 public: 00109 bool KnowsRemote(const char *Remote); 00110 eKeys Get(const char *Remote, const char *Code); 00111 const char *GetSetup(const char *Remote); 00112 void PutSetup(const char *Remote, const char *Setup); 00113 }; 00114 00115 extern cKeys Keys; 00116 00117 #define MAXKEYSINMACRO 16 00118 00119 class cKeyMacro : public cListObject { 00120 private: 00121 eKeys macro[MAXKEYSINMACRO]; 00122 int numKeys; 00123 char *plugin; 00124 public: 00125 cKeyMacro(void); 00126 ~cKeyMacro(); 00127 bool Parse(char *s); 00128 int NumKeys(void) const { return numKeys; } 00132 const eKeys *Macro(void) const { return macro; } 00133 const char *Plugin(void) const { return plugin; } 00134 }; 00135 00136 class cKeyMacros : public cConfig<cKeyMacro> { 00137 public: 00138 const cKeyMacro *Get(eKeys Key); 00139 }; 00140 00141 extern cKeyMacros KeyMacros; 00142 00143 #endif //__KEYS_H