/* Copyright (c) 2014-2015, Stanislaw Halik * 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 #ifdef BUILD_api # include "opentrack-compat/export.hpp" #else # include "opentrack-compat/import.hpp" #endif #include "qxt-mini/QxtGlobalShortcut" #include "opentrack-compat/options.hpp" #include "opentrack/main-settings.hpp" #ifdef _WIN32 # include "keybinding-worker.hpp" #endif using namespace options; struct OPENTRACK_EXPORT Shortcuts : public QObject { Q_OBJECT public: using K = #ifndef _WIN32 mem #else Key #endif ; K keyCenter; K keyToggle; K keyZero; #ifdef _WIN32 KeybindingWorker::Token key_token; #endif struct key_opts { value keycode, guid; value button; key_opts(pbundle b, const QString& name) : keycode(b, QString("keycode-%1").arg(name), ""), guid(b, QString("guid-%1").arg(name), ""), button(b, QString("button-%1").arg(name), -1) {} }; struct settings : opts { key_opts center, toggle, zero; main_settings s_main; settings() : opts("keyboard-shortcuts"), center(b, "center"), toggle(b, "toggle"), zero(b, "zero") {} } s; Shortcuts() #ifdef _WIN32 : key_token(KeybindingWorker::add_receiver([&](const Key& k) { receiver(k); })) #endif { reload(); } void reload(); private: void bind_keyboard_shortcut(K &key, key_opts& k); #ifdef _WIN32 void receiver(const Key& k); #endif signals: void center(); void toggle(); void zero(); };