55 lines
1.6 KiB
C++
55 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include "ptt_key_chord.h"
|
|
#include <QObject>
|
|
#include <QTimer>
|
|
|
|
class DbManager;
|
|
class PttPortal;
|
|
class QWidget;
|
|
|
|
// Глобальный PTT: Windows/X11 — состояние физических клавиш; Wayland — системный портал.
|
|
// Физические комбинации хранит ui_state radio_ptt_hotkeys, Wayland-комбинации — портал.
|
|
class PttHotkeyManager : public QObject {
|
|
Q_OBJECT
|
|
public:
|
|
static PttHotkeyManager* instance();
|
|
void init(DbManager* db);
|
|
QStringList hotkeys() const;
|
|
void setHotkeys(const QStringList& chords);
|
|
void reload();
|
|
static bool isSupported();
|
|
static bool usesPortal();
|
|
void configurePortal(QWidget* parentWindow);
|
|
QStringList portalDescriptions() const;
|
|
QString portalStatus() const;
|
|
bool portalBusy() const;
|
|
void inhibitPortal(bool inhibited);
|
|
QString describe(const PttKeyChord& chord) const;
|
|
bool beginCapture();
|
|
void endCapture();
|
|
|
|
signals:
|
|
void portalChanged();
|
|
void keysChanged(const PttKeyChord& held);
|
|
|
|
private:
|
|
PttHotkeyManager();
|
|
~PttHotkeyManager() override;
|
|
void pollKeys();
|
|
bool readKeys(PttKeyChord& held) const;
|
|
QString keyName(int key) const;
|
|
|
|
#ifdef UTUN_PTT_PORTAL
|
|
PttPortal* m_portal = nullptr;
|
|
#endif
|
|
DbManager* m_db = nullptr;
|
|
QTimer m_timer;
|
|
void* m_display = nullptr; // собственное X11-соединение, только GUI-поток
|
|
QList<PttKeyChord> m_chords;
|
|
PttKeyChord m_held;
|
|
bool m_capturing = false;
|
|
bool m_captureArmed = false;
|
|
bool m_talking = false;
|
|
};
|