70 lines
5.4 KiB
C++
70 lines
5.4 KiB
C++
/* GUI-диалог настроек с категориями и общим Save: черновик редактируемых страниц загружается при создании.
|
|
* Переключение категорий сохраняет черновик и обновляет диагностические страницы; виджетами владеет Qt-дерево диалога.
|
|
* Save последовательно меняет INI/локальные настройки и ставит команды в мост: возможны частичные изменения при отказе.
|
|
* Аватары и портал PTT имеют немедленные эффекты вне Save/Cancel; язык и listen-сокеты применяются после рестарта. */
|
|
#pragma once
|
|
|
|
#include <QDialog>
|
|
#include <QListWidget>
|
|
#include <QStackedWidget>
|
|
#include <QPushButton>
|
|
#include <QLineEdit>
|
|
#include <QComboBox>
|
|
#include <QCheckBox>
|
|
#include <QString>
|
|
|
|
class QSpinBox;
|
|
class NetworkSettingsPage;
|
|
class DatabaseSettingsPage;
|
|
class StatusPage;
|
|
class NodesPage;
|
|
class SoundSettingsPage;
|
|
class AudioDeviceSettingsPage;
|
|
class StorageSettingsPage;
|
|
class RadioSettingsPage;
|
|
class DbManager;
|
|
class UtunNode;
|
|
class AudioRecorder;
|
|
|
|
class SettingsDialog : public QDialog {
|
|
Q_OBJECT
|
|
public:
|
|
/* configPath копируется; db/recorder заимствованы до уничтожения диалога, nullptr допустим.
|
|
* node передаётся StatusPage через QPointer и может быть удалён раньше. Все вызовы — GUI. */
|
|
explicit SettingsDialog(const QString& configPath, DbManager* db, UtunNode* node,
|
|
AudioRecorder* recorder, QWidget* parent = nullptr);
|
|
|
|
private slots:
|
|
void onCategoryChanged(int row); // Выбрать страницу; DB/status/nodes обновляются, редактируемый черновик сохраняется.
|
|
/* Пройти запись/применение страниц и вызвать accept при завершении UI-шагов.
|
|
* Команды владеют снимками значений; accept не подтверждает commit SQLite/применение ядром. Общей транзакции нет. */
|
|
void onSave();
|
|
// Запустить внешний редактор конфига; ошибки логируются/показываются, повторная загрузка — при создании нового диалога.
|
|
void onEditConfig();
|
|
|
|
private:
|
|
void loadProfileFromConfig(const QString& path); // Найти первую строку my_node_name=, заполнить поле и базу сравнения имени.
|
|
|
|
QString m_configPath; // Собственная копия пути INI.
|
|
QListWidget* m_categoryList; // Категории; индексы совпадают со страницами m_pages.
|
|
QStackedWidget* m_pages; // Владение страницами через Qt-дерево, включая scroll wrapper рации.
|
|
QPushButton* m_saveBtn; // Общая кнопка Save, также default action диалога.
|
|
QLineEdit* m_nicknameEdit; // Черновик собственного отображаемого имени.
|
|
QComboBox* m_sortCombo; // Индекс сортировки: 0=алфавит, 1=последняя активность.
|
|
QComboBox* m_languageCombo; // system/en/ru в item data; сохранённый язык для следующего запуска.
|
|
QComboBox* m_joinPolicyCombo; // Индекс join_policy: 0=авто, 1=спрашивать, 2=запрещать.
|
|
QCheckBox* m_autoConnectCheck; // Черновик group_autoconnect.
|
|
QCheckBox* m_publishCallStatus; // Разрешение публикации своего статуса звонка.
|
|
QSpinBox* m_streamSubblocks; // Полное N RS-блока, 1..255; настройка следующей трансляции.
|
|
QSpinBox* m_streamRedundant; // Избыточные R подблоки, 0..N-1; maximum следует за N.
|
|
QString m_oldNickname; // База сравнения имени: загрузка либо последняя попытка Save.
|
|
NetworkSettingsPage* m_networkPage; // Черновик listen-сокетов и LAN-флагов.
|
|
DatabaseSettingsPage* m_databasePage; // Сведения/обслуживание SQLite, обновление при выборе категории.
|
|
StatusPage* m_statusPage; // Диагностика ядра/времени, обновление при выборе категории.
|
|
NodesPage* m_nodesPage; // Снимок известных узлов БД, обновление при выборе категории.
|
|
SoundSettingsPage* m_soundPage; // Черновик звуков событий.
|
|
AudioDeviceSettingsPage* m_audioDevicePage; // Выбор устройств/аудиопараметров и тесты микрофона/динамика.
|
|
StorageSettingsPage* m_storagePage; // Черновик автозагрузки и лимитов media-хранилища.
|
|
RadioSettingsPage* m_radioPage; // Черновик активации рации и интерфейс PTT-хоткеев.
|
|
};
|