vdr  1.7.27
keys.h
Go to the documentation of this file.
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