You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

68 lines
2.3 KiB

#include "radiosettingspage.h"
#include "ptt_hotkey_manager.h"
#include "../db/db_manager.h"
#include <QFormLayout>
#include <QLabel>
#include <QKeySequenceEdit>
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());
}