#include "radiosettingspage.h" #include "ptt_hotkey_manager.h" #include "../db/db_manager.h" #include #include #include RadioSettingsPage::RadioSettingsPage(DbManager* db, QWidget* parent) : QWidget(parent), m_db(db) { auto* layout = new QVBoxLayout(this); auto* title = new QLabel("Рация (PTT)", this); title->setStyleSheet("font-weight: bold; font-size: 13px;"); layout->addWidget(title); auto* hint = new QLabel( "Глобальные хоткеи передачи: удержание любой комбинации активирует PTT " "из любого приложения (рация канала должна быть включена).", this); hint->setWordWrap(true); hint->setStyleSheet("color: gray; font-size: 11px;"); layout->addWidget(hint); if (!PttHotkeyManager::isSupported()) { auto* warn = new QLabel("Глобальные хоткеи не поддерживаются на этой платформе.", this); warn->setStyleSheet("color: #e74c3c; font-size: 12px;"); layout->addWidget(warn); } auto* form = new QFormLayout(); for (int i = 0; i < 3; i++) { auto* edit = new QKeySequenceEdit(this); edit->setStyleSheet( "QKeySequenceEdit { border: 1px solid palette(mid); border-radius: 4px;" " padding: 6px 10px; font-size: 13px; background: palette(base); }"); m_edits.append(edit); form->addRow(QString("PTT хоткей %1:").arg(i + 1), edit); } layout->addLayout(form); layout->addStretch(1); loadFromDb(); } void RadioSettingsPage::loadFromDb() { QStringList seqs; if (m_db && m_db->isOpen()) { const QString raw = m_db->getUiState("radio_ptt_hotkeys"); if (!raw.isEmpty()) seqs = raw.split('|', Qt::SkipEmptyParts); } for (int i = 0; i < m_edits.size(); i++) m_edits[i]->setKeySequence(i < seqs.size() ? QKeySequence(seqs[i]) : QKeySequence()); } QStringList RadioSettingsPage::hotkeys() const { QStringList out; for (QKeySequenceEdit* e : m_edits) { const QKeySequence seq = e->keySequence(); if (!seq.isEmpty()) out << seq.toString(); } return out; } void RadioSettingsPage::apply() { PttHotkeyManager::instance()->setHotkeys(hotkeys()); }