// This file is part of Desktop App Toolkit, // a set of libraries for developing nice desktop applications. // // For license and copyright information please follow this link: // https://github.com/desktop-app/legal/blob/master/LEGAL // #pragma once #include "base/global_shortcuts.h" namespace base { using GlobalShortcutKeyGeneric = uint64; class GlobalShortcutValueGeneric final : public GlobalShortcutValue { public: GlobalShortcutValueGeneric( std::vector descriptors); QString toDisplayString() override; QByteArray serialize() override; const std::vector &descriptors() const { return _descriptors; } private: std::vector _descriptors; }; class GlobalShortcutManagerGeneric final : public GlobalShortcutManager , public QObject { public: GlobalShortcutManagerGeneric(); ~GlobalShortcutManagerGeneric(); void startRecording( Fn progress, Fn done) override; void stopRecording() override; void startWatching( GlobalShortcut shortcut, Fn callback) override; void stopWatching(GlobalShortcut shortcut) override; GlobalShortcut shortcutFromSerialized(QByteArray serialized) override; // Thread-safe. void schedule(GlobalShortcutKeyGeneric descriptor, bool down); private: struct Watch { GlobalShortcut shortcut; std::vector sorted; Fn callback; }; void process(GlobalShortcutKeyGeneric descriptor, bool down); void processRecording(GlobalShortcutKeyGeneric descriptor, bool down); void processRecordingPress(GlobalShortcutKeyGeneric descriptor); void processRecordingRelease(GlobalShortcutKeyGeneric descriptor); void finishRecording(); Fn _recordingProgress; Fn _recordingDone; std::vector _recordingDown; flat_set _recordingUp; flat_set _down; std::vector _watchlist; std::vector _pressed; bool _recording = false; }; } // namespace base