ckb-next  beta-v0.2.8 at branch testing
ckb-next driver for corsair devices
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
kbbind.h
Go to the documentation of this file.
1 #ifndef KBBIND_H
2 #define KBBIND_H
3 
4 #include <QFile>
5 #include <QHash>
6 #include <QObject>
7 #include <QProcess>
8 #include "ckbsettings.h"
9 #include "keymap.h"
10 #include "keyaction.h"
11 
12 class Kb;
13 class KbMode;
14 class KbPerf;
15 class KbLight;
16 
17 // Binding setup for a device mode
18 // See also KeyAction, a class for managing binding actions
19 
20 class KbBind : public QObject
21 {
22  Q_OBJECT
23 public:
24  // New binding setup
25  explicit KbBind(KbMode* modeParent, Kb* devParent, const KeyMap& keyMap);
33  KbBind(KbMode* modeParent, Kb* devParent, const KeyMap& keyMap, const KbBind& other);
34 
35  // Load and save from stored settings
36  void load(CkbSettings& settings);
37  void save(CkbSettings& settings);
38  inline bool needsSave() const { return _needsSave; }
39 
40  // Key map
41  inline const KeyMap& map() { return _map; }
42  void map(const KeyMap& map);
43  inline bool isISO() const { return _map.isISO(); }
44  inline bool isKeyboard() const { return _map.isKeyboard(); }
45  inline bool isMouse() const { return _map.isMouse(); }
46  // Related objects
47  KbPerf* perf();
48  KbLight* light();
49 
50  // Global key remap (changes modifiers per Settings widget)
51  // Use only when iterating the map manually; all KbBind functions already take this into account
52  static QString globalRemap(const QString& key);
53  static void setGlobalRemap(const QHash<QString, QString> keyToActual);
54  static void loadGlobalRemap();
55  static void saveGlobalRemap();
56 
57  // Action for a given key. Use KeyAction(action) to get info about it.
58  QString action(const QString& key);
59  // Default action for a key.
60  static QString defaultAction(const QString& key);
61 
62  // Friendly name for a key, taking into account the global key remap
63  QString friendlyName(const QString& key);
64  // Friendly name for the action associated with a key
65  QString friendlyActionName(const QString& key);
66 
67  // Changes a key's action
68  void setAction(const QString& key, const QString& action);
69  inline void setAction(const QStringList& keys, const QString& action) { foreach(const QString& key, keys) setAction(key, action); }
70  // Resets a key to the default action.
71  void resetAction(const QString &key);
72  inline void resetAction(const QStringList& keys) { foreach(const QString& key, keys) resetAction(key); }
73  // Unbinds a key.
74  void noAction(const QString& key);
75  inline void noAction(const QStringList& keys) { foreach(const QString& key, keys) noAction(key); }
76 
77  // Current win lock state
78  inline bool winLock() { return _winLock; }
79  void winLock(bool newWinLock) { _winLock = newWinLock; _needsUpdate = true; }
80 
81  // Updates bindings to the driver. Write "mode %d" first.
82  // By default, nothing will be written unless bindings have changed. Use force = true or call setNeedsUpdate() to override.
83  void update(QFile& cmd, bool force = false);
84  inline void setNeedsUpdate() { _needsUpdate = true; }
85 
89  int getMacroNumber();
90 
94  QString getMacroPath();
95 
101  void handleNotificationChannel(bool start);
102 
103 public slots:
104  // Callback for a keypress event.
105  void keyEvent(const QString& key, bool down);
106 
107 signals:
108  void didLoad();
109  void layoutChanged();
110  void updated();
111 
112 private:
114  inline Kb* devParent() const { return _devParent; }
115  inline KbMode* modeParent() const { return (KbMode*)parent(); }
116 
117  inline KeyAction* bindAction(const QString& key) { if(!_bind.contains(key)) return _bind[key] = new KeyAction(KeyAction::defaultAction(key), this); return _bind[key]; }
118 
119  static QHash<QString, QString> _globalRemap;
120  static quint64 globalRemapTime;
122 
127  QFile* lastCmd;
128 
130  // Key -> action map (no entry = default action)
131  QHash<QString, KeyAction*> _bind;
132 
133  bool _winLock;
136  friend class KeyAction;
137 };
138 
139 #endif // KBBIND_H
void load(CkbSettings &settings)
Definition: kbbind.cpp:58
bool isMouse() const
Definition: kbbind.h:45
bool needsSave() const
Definition: kbbind.h:38
void setAction(const QStringList &keys, const QString &action)
Definition: kbbind.h:69
KbBind(KbMode *modeParent, Kb *devParent, const KeyMap &keyMap)
Definition: kbbind.cpp:12
bool _winLock
Definition: kbbind.h:133
static bool isMouse(Model model)
Definition: keymap.h:95
static QString globalRemap(const QString &key)
Definition: kbbind.cpp:98
KbPerf * perf()
Definition: kbbind.cpp:50
Kb * devParent() const
Definition: kbbind.h:114
static void setGlobalRemap(const QHash< QString, QString > keyToActual)
Definition: kbbind.cpp:104
const KeyMap & map()
Definition: kbbind.h:41
void didLoad()
Definition: moc_kbbind.cpp:155
KeyMap _map
Definition: kbbind.h:129
bool _needsSave
Definition: kbbind.h:135
friend class KeyAction
Definition: kbbind.h:136
QString friendlyActionName(const QString &key)
Definition: kbbind.cpp:157
static bool isKeyboard(Model model)
Definition: keymap.h:93
QString friendlyName(const QString &key)
Definition: kbbind.cpp:150
void resetAction(const QString &key)
Definition: kbbind.cpp:162
KbLight * light()
Definition: kbbind.cpp:54
void resetAction(const QStringList &keys)
Definition: kbbind.h:72
void winLock(bool newWinLock)
Definition: kbbind.h:79
Definition: kbmode.h:36
QString action(const QString &key)
Definition: kbbind.cpp:140
void save(CkbSettings &settings)
Definition: kbbind.cpp:81
bool isKeyboard() const
Definition: kbbind.h:44
Definition: kbperf.h:15
static bool isISO(Layout layout)
Definition: keymap.h:87
Definition: kb.h:11
static QString defaultAction(const QString &key)
Definition: kbbind.cpp:145
Definition: kbbind.h:20
bool winLock()
Definition: kbbind.h:78
void update(QFile &cmd, bool force=false)
Definition: kbbind.cpp:188
void keyEvent(const QString &key, bool down)
Definition: kbbind.cpp:287
QString getMacroPath()
KbBind::getMacroPath.
Definition: kbbind.cpp:265
void setNeedsUpdate()
Definition: kbbind.h:84
void handleNotificationChannel(bool start)
handleNotificationChannel sends commands to ckb-daemon for (de-) activating the notify channel...
Definition: kbbind.cpp:275
static QHash< QString, QString > _globalRemap
Definition: kbbind.h:119
void noAction(const QString &key)
Definition: kbbind.cpp:172
Definition: keymap.h:49
QHash< QString, KeyAction * > _bind
Definition: kbbind.h:131
static void saveGlobalRemap()
Definition: kbbind.cpp:124
void noAction(const QStringList &keys)
Definition: kbbind.h:75
bool isISO() const
Definition: kbbind.h:43
quint64 lastGlobalRemapTime
Definition: kbbind.h:121
QFile * lastCmd
lastCmd is a cache-hack. Because the QFile ist opened in Kb, and we need it in the macro processing f...
Definition: kbbind.h:127
void setAction(const QString &key, const QString &action)
Definition: kbbind.cpp:180
static quint64 globalRemapTime
Definition: kbbind.h:120
int getMacroNumber()
KbBind::getMacroNumber.
Definition: kbbind.cpp:257
void updated()
Definition: moc_kbbind.cpp:167
Kb * _devParent
Definition: kbbind.h:113
bool _needsUpdate
Definition: kbbind.h:134
void layoutChanged()
Definition: moc_kbbind.cpp:161
KbMode * modeParent() const
Definition: kbbind.h:115
static void loadGlobalRemap()
Definition: kbbind.cpp:116
static QString defaultAction(const QString &key)
Definition: keyaction.cpp:44
KeyAction * bindAction(const QString &key)
Definition: kbbind.h:117