summaryrefslogtreecommitdiffhomepage
path: root/opentrack-logic/shortcuts.h
diff options
context:
space:
mode:
Diffstat (limited to 'opentrack-logic/shortcuts.h')
-rw-r--r--opentrack-logic/shortcuts.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/opentrack-logic/shortcuts.h b/opentrack-logic/shortcuts.h
new file mode 100644
index 00000000..87e24d4f
--- /dev/null
+++ b/opentrack-logic/shortcuts.h
@@ -0,0 +1,66 @@
+/* Copyright (c) 2014-2015, Stanislaw Halik <sthalik@misaki.pl>
+
+ * Permission to use, copy, modify, and/or distribute this
+ * software for any purpose with or without fee is hereby granted,
+ * provided that the above copyright notice and this permission
+ * notice appear in all copies.
+ */
+
+#pragma once
+#include <QObject>
+#include <tuple>
+#include <vector>
+#include <functional>
+
+#include "export.hpp"
+
+#include "qxt-mini/QxtGlobalShortcut"
+#include "opentrack-compat/options.hpp"
+#include "main-settings.hpp"
+
+#ifdef _WIN32
+# include "keybinding-worker.hpp"
+#endif
+
+#if defined(__GNUC__) && !defined(_WIN32)
+# define unused_on_unix(t, i) t __attribute__((unused)) i
+#else
+# define unused_on_unix(t, i) t i
+#endif
+
+using namespace options;
+
+struct OPENTRACK_LOGIC_EXPORT Shortcuts : public QObject
+{
+ Q_OBJECT
+
+public:
+ using K =
+#ifndef _WIN32
+ mem<QxtGlobalShortcut>
+#else
+ Key
+#endif
+ ;
+
+ using fun = std::function<void(bool)>;
+ using tt = std::tuple<K, fun, bool>;
+ std::vector<tt> keys;
+#ifdef _WIN32
+ KeybindingWorker::Token key_token;
+#endif
+
+ Shortcuts()
+#ifdef _WIN32
+ : key_token([&](const Key& k) { receiver(k); })
+#endif
+ {}
+
+ void reload(const std::vector<std::tuple<key_opts&, fun, bool>> &keys_);
+private:
+ void free_binding(K& key);
+ void bind_keyboard_shortcut(K &key, const key_opts& k, bool held);
+#ifdef _WIN32
+ void receiver(const Key& k);
+#endif
+};