123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- #ifndef QHOTKEY_H
- #define QHOTKEY_H
- #include <QKeySequence>
- #include <QLoggingCategory>
- #include <QObject>
- #include <QPair>
- #ifdef QHOTKEY_LIB
- #ifdef QHOTKEY_LIB_BUILD
- #define QHOTKEY_SHARED_EXPORT Q_DECL_EXPORT
- #else
- #define QHOTKEY_SHARED_EXPORT Q_DECL_IMPORT
- #endif
- #else
- #define QHOTKEY_SHARED_EXPORT
- #endif
- //! A class to define global, systemwide Hotkeys
- class QHOTKEY_SHARED_EXPORT QHotkey : public QObject
- {
- Q_OBJECT
- //! @private
- friend class QHotkeyPrivate;
- //! Specifies whether this hotkey is currently registered or not
- Q_PROPERTY(bool registered READ isRegistered WRITE setRegistered NOTIFY
- registeredChanged)
- //! Holds the shortcut this hotkey will be triggered on
- Q_PROPERTY(
- QKeySequence shortcut READ shortcut WRITE setShortcut RESET resetShortcut)
- public:
- //! Defines shortcut with native keycodes
- class QHOTKEY_SHARED_EXPORT NativeShortcut
- {
- public:
- //! The native keycode
- quint32 key;
- //! The native modifiers
- quint32 modifier;
- //! Creates an invalid native shortcut
- NativeShortcut();
- //! Creates a valid native shortcut, with the given key and modifiers
- NativeShortcut(quint32 key, quint32 modifier = 0);
- //! Checks, whether this shortcut is valid or not
- bool isValid() const;
- //! Equality operator
- bool operator==(NativeShortcut other) const;
- //! Inequality operator
- bool operator!=(NativeShortcut other) const;
- private:
- bool valid;
- };
- //! Adds a global mapping of a key sequence to a replacement native shortcut
- static void addGlobalMapping(const QKeySequence& shortcut,
- NativeShortcut nativeShortcut);
- //! Checks if global shortcuts are supported by the current platform
- static bool isPlatformSupported();
- //! Default Constructor
- explicit QHotkey(QObject* parent = nullptr);
- //! Constructs a hotkey with a shortcut and optionally registers it
- explicit QHotkey(const QKeySequence& shortcut,
- bool autoRegister = false,
- QObject* parent = nullptr);
- //! Constructs a hotkey with a key and modifiers and optionally registers it
- explicit QHotkey(Qt::Key keyCode,
- Qt::KeyboardModifiers modifiers,
- bool autoRegister = false,
- QObject* parent = nullptr);
- //! Constructs a hotkey from a native shortcut and optionally registers it
- explicit QHotkey(NativeShortcut shortcut,
- bool autoRegister = false,
- QObject* parent = nullptr);
- ~QHotkey() override;
- //! @readAcFn{QHotkey::registered}
- bool isRegistered() const;
- //! @readAcFn{QHotkey::shortcut}
- QKeySequence shortcut() const;
- //! @readAcFn{QHotkey::shortcut} - the key only
- Qt::Key keyCode() const;
- //! @readAcFn{QHotkey::shortcut} - the modifiers only
- Qt::KeyboardModifiers modifiers() const;
- //! Get the current native shortcut
- NativeShortcut currentNativeShortcut() const;
- public slots:
- //! @writeAcFn{QHotkey::registered}
- bool setRegistered(bool registered);
- //! @writeAcFn{QHotkey::shortcut}
- bool setShortcut(const QKeySequence& shortcut, bool autoRegister = false);
- //! @writeAcFn{QHotkey::shortcut}
- bool setShortcut(Qt::Key keyCode,
- Qt::KeyboardModifiers modifiers,
- bool autoRegister = false);
- //! @resetAcFn{QHotkey::shortcut}
- bool resetShortcut();
- //! Set this hotkey to a native shortcut
- bool setNativeShortcut(QHotkey::NativeShortcut nativeShortcut,
- bool autoRegister = false);
- signals:
- //! Will be emitted if the shortcut is pressed
- void activated(QPrivateSignal);
- //! Will be emitted if the shortcut press is released
- void released(QPrivateSignal);
- //! @notifyAcFn{QHotkey::registered}
- void registeredChanged(bool registered);
- private:
- Qt::Key _keyCode;
- Qt::KeyboardModifiers _modifiers;
- NativeShortcut _nativeShortcut;
- bool _registered;
- };
- uint QHOTKEY_SHARED_EXPORT qHash(QHotkey::NativeShortcut key);
- uint QHOTKEY_SHARED_EXPORT qHash(QHotkey::NativeShortcut key, uint seed);
- QHOTKEY_SHARED_EXPORT Q_DECLARE_LOGGING_CATEGORY(logQHotkey)
- Q_DECLARE_METATYPE(QHotkey::NativeShortcut)
- #endif // QHOTKEY_H
|