#include "hotkeying.hpp" #include #include #include QMap hotkeys; // func gets bound only on first set, or load void hotkeying::hotkey(QString seqName, QKeySequence seq, std::function func) { QHotkey *hotkey; if (hotkeys.contains(seqName)) (hotkey = hotkeys.value(seqName))->setShortcut(seq, true); else { hotkey = new QHotkey(seq, true); QObject::connect(hotkey, &QHotkey::activated, func); hotkeys.insert(seqName, hotkey); } settings::settings().setValue(seqName.prepend("hotkey_"), seq.toString()); if (!hotkey->isRegistered() && !seq.toString().isEmpty()) qWarning().noquote().nospace() << "Could not bind the hotkey " << seqName << "! Is the keybind already registered?"; } // forces the hotkey from settings void hotkeying::load(QString seqName, std::function func, QString def) { QHotkey *h; QString name = seqName; name.prepend("hotkey_"); if (hotkeys.contains(seqName)) return; if (settings::settings().contains(name)) h = new QHotkey(QKeySequence(settings::settings().value(name).toString()), true); else h = new QHotkey(def.isNull() ? "" : def, true); QObject::connect(h, &QHotkey::activated, func); hotkeys.insert(seqName, h); if (!h->isRegistered() && (settings::settings().contains(name) || !def.isEmpty())) qWarning().noquote().nospace() << "Could not bind the hotkey " << seqName << "! Is the keybind already registered?"; } bool hotkeying::valid(QString seq) { return seq.isEmpty() || !QKeySequence(seq).toString().isEmpty(); } QString hotkeying::sequence(QString seqName) { return hotkeys.contains(seqName) ? hotkeys.value(seqName)->isRegistered() ? hotkeys.value(seqName)->shortcut().toString() : "" : ""; }