Clarify settings dialog drafts, save semantics and borrowed dependencies

This commit is contained in:
evgeny committed 2026-10-27 17:27:04 +01:00
1 parent 2dd0970295
commit d582f2ea77
2 files changed
+33 -26

No files matched your search

+2 -2
View File
@@ -16,7 +16,7 @@ public:
/* Создать форму и прочитать информацию о файлах; nullptr/неоткрытая БД отключают кнопки операций. */
explicit DatabaseSettingsPage(DbManager* db, QWidget* parent = nullptr);
/* Обновить доступность кнопок и доступную информацию о файлах; PRAGMA не запускает.
* Не заменяет результат последней проверки; вызывается при выборе страницы настроек. */
* Подробности последней проверки сохраняются; при отсутствии БД подпись статуса сообщает о неподключённой БД. */
void refreshStatus();
private slots:
@@ -31,7 +31,7 @@ private:
DbManager* m_db; // Заимствованный менеджер, может быть nullptr; его handle читается при выполнении действия.
QLabel* m_filePathLabel; // Дочерняя подпись пути sqlite3_db_filename(main), доступна для копирования.
QLabel* m_fileSizeLabel; // Дочерняя подпись размера основного файла по QFileInfo.
QLabel* m_walSizeLabel; // Дочерняя подпись размера соседнего -wal либо n/a при его отсутствии.
QLabel* m_walSizeLabel; // Дочерняя подпись известного размера -wal; n/a для отсутствующего WAL у найденного файла БД.
QPushButton* m_quickBtn; // Дочерняя кнопка быстрой проверки.
QPushButton* m_fullBtn; // Дочерняя кнопка полной проверки.
QPushButton* m_optimizeBtn; // Дочерняя кнопка PRAGMA optimize.
+31 -24
View File
@@ -1,4 +1,7 @@
// settingsdialog.h — Settings dialog with category list
/* GUI-диалог настроек с категориями и общим Save: черновик редактируемых страниц загружается при создании.
* Переключение категорий сохраняет черновик и обновляет диагностические страницы; виджетами владеет Qt-дерево диалога.
* Save последовательно меняет INI/локальные настройки и ставит команды в мост: возможны частичные изменения при отказе.
* Аватары и портал PTT имеют немедленные эффекты вне Save/Cancel; язык и listen-сокеты применяются после рестарта. */
#pragma once
#include <QDialog>
@@ -26,37 +29,41 @@ 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);
void onCategoryChanged(int row); // Выбрать страницу; DB/status/nodes обновляются, редактируемый черновик сохраняется.
/* Пройти запись/применение страниц и вызвать accept при завершении UI-шагов.
* Команды владеют снимками значений; accept не подтверждает commit SQLite/применение ядром. Общей транзакции нет. */
void onSave();
// Открывает текущий конфиг во внешнем текстовом редакторе; ошибки показывает пользователю.
// Запустить внешний редактор конфига; ошибки логируются/показываются, повторная загрузка — при создании нового диалога.
void onEditConfig();
private:
void loadProfileFromConfig(const QString& path);
void loadProfileFromConfig(const QString& path); // Найти первую строку my_node_name=, заполнить поле и базу сравнения имени.
QString m_configPath;
QListWidget* m_categoryList;
QStackedWidget* m_pages;
QPushButton* m_saveBtn;
QLineEdit* m_nicknameEdit;
QComboBox* m_sortCombo;
QComboBox* m_languageCombo;
QComboBox* m_joinPolicyCombo;
QCheckBox* m_autoConnectCheck;
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;
QSpinBox* m_streamRedundant;
QString m_oldNickname;
NetworkSettingsPage* m_networkPage;
DatabaseSettingsPage* m_databasePage;
StatusPage* m_statusPage;
NodesPage* m_nodesPage;
SoundSettingsPage* m_soundPage;
AudioDeviceSettingsPage* m_audioDevicePage;
StorageSettingsPage* m_storagePage;
RadioSettingsPage* m_radioPage;
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-хоткеев.
};