Files
GostGenerator/view/projectsettingsdialog.cpp
T

222 lines
8.4 KiB
C++

#include "projectsettingsdialog.h"
#include "designatormappingdialog.h"
#include <QDebug>
// Статические константы
const QString ProjectSettingsDialog::DEFAULT_VARIANT = "No Variations";
ProjectSettingsDialog::ProjectSettingsDialog(ProjectSettingsModel *settingsModel,
DesignatorMappingModel *mappingModel,
QWidget *parent)
: QDialog(parent)
, m_settingsModel(settingsModel)
, m_mappingModel(mappingModel)
{
setUp();
}
void ProjectSettingsDialog::setUp()
{
setWidgets();
setUpLayout();
setUpConnections();
}
void ProjectSettingsDialog::setWidgets()
{
// Создаем виджет с вкладками
m_tabWidget = new QTabWidget(this);
// Создаем вкладку для вариантов исполнения
QWidget *variantTab = new QWidget();
QVBoxLayout *variantTabLayout = new QVBoxLayout(variantTab);
QGroupBox *variantGroup = new QGroupBox("Вариант исполнения", variantTab);
QVBoxLayout *variantGroupLayout = new QVBoxLayout(variantGroup);
QLabel *variantLabel = new QLabel("Выберите текущий вариант исполнения:", variantGroup);
m_variantComboBox = new QComboBox(variantGroup);
// Заполняем комбобокс доступными вариантами
if (m_settingsModel) {
QStringList variants = m_settingsModel->availableVariants();
qDebug() << "ProjectSettingsDialog: Доступные варианты:" << variants;
m_variantComboBox->addItems(variants);
// Устанавливаем текущий вариант
QString currentVariant = m_settingsModel->currentVariant();
qDebug() << "ProjectSettingsDialog: Текущий вариант:" << currentVariant;
int index = m_variantComboBox->findText(currentVariant);
if (index >= 0) {
m_variantComboBox->setCurrentIndex(index);
qDebug() << "ProjectSettingsDialog: Установлен вариант с индексом:" << index;
} else {
qDebug() << "ProjectSettingsDialog: Текущий вариант не найден в списке";
}
} else {
qDebug() << "ProjectSettingsDialog: m_settingsModel равен nullptr";
}
variantGroupLayout->addWidget(variantLabel);
variantGroupLayout->addWidget(m_variantComboBox);
variantTabLayout->addWidget(variantGroup);
variantTabLayout->addStretch();
// Добавляем вкладку вариантов
m_tabWidget->addTab(variantTab, "Варианты исполнения");
// Создаем вкладку для маппинга дезигнаторов
if (m_mappingModel) {
createDesignatorMappingTab();
}
// Создаем кнопки
m_okButton = new QPushButton("OK", this);
m_cancelButton = new QPushButton("Отмена", this);
m_resetButton = new QPushButton("Сброс", this);
m_saveButton = new QPushButton("Сохранить", this);
// Настраиваем диалог
setWindowTitle("Настройки проекта");
setModal(true);
resize(600, 400);
// Устанавливаем основной layout
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(m_tabWidget);
setLayout(mainLayout);
}
void ProjectSettingsDialog::setUpLayout()
{
// Кнопки
QHBoxLayout *buttonLayout = new QHBoxLayout();
buttonLayout->addWidget(m_resetButton);
buttonLayout->addWidget(m_saveButton);
buttonLayout->addStretch();
buttonLayout->addWidget(m_cancelButton);
buttonLayout->addWidget(m_okButton);
// Добавляем кнопки к основному layout
QVBoxLayout *mainLayout = qobject_cast<QVBoxLayout*>(layout());
if (mainLayout) {
mainLayout->addLayout(buttonLayout);
}
}
void ProjectSettingsDialog::setUpConnections()
{
connect(m_okButton, &QPushButton::clicked, this, &QDialog::accept);
connect(m_cancelButton, &QPushButton::clicked, this, &QDialog::reject);
connect(m_resetButton, &QPushButton::clicked, this, &ProjectSettingsDialog::onResetToDefaults);
connect(m_saveButton, &QPushButton::clicked, this, &ProjectSettingsDialog::onSaveSettings);
// Подключение изменения варианта
connect(m_variantComboBox, QOverload<const QString &>::of(&QComboBox::currentTextChanged),
this, &ProjectSettingsDialog::onVariantChanged);
// Подключение обновления доступных вариантов
if (m_settingsModel) {
connect(m_settingsModel, &ProjectSettingsModel::availableVariantsChanged,
this, &ProjectSettingsDialog::onAvailableVariantsChanged);
}
}
void ProjectSettingsDialog::createDesignatorMappingTab()
{
QWidget *mappingTab = new QWidget();
QVBoxLayout *mappingTabLayout = new QVBoxLayout(mappingTab);
// Создаем группу для настроек маппинга дезигнаторов
QGroupBox *mappingGroup = new QGroupBox("Маппинг дезигнаторов компонентов", mappingTab);
QVBoxLayout *mappingGroupLayout = new QVBoxLayout(mappingGroup);
QLabel *mappingLabel = new QLabel("Настройте соответствие дезигнаторов компонентов их типам:", mappingGroup);
mappingLabel->setWordWrap(true);
QPushButton *editMappingButton = new QPushButton("Редактировать маппинг", mappingGroup);
editMappingButton->setMinimumHeight(30);
// Подключаем кнопку к открытию диалога редактирования
connect(editMappingButton, &QPushButton::clicked, [this]() {
if (m_mappingModel) {
DesignatorMappingDialog dialog(m_mappingModel, this);
dialog.exec();
}
});
mappingGroupLayout->addWidget(mappingLabel);
mappingGroupLayout->addWidget(editMappingButton);
mappingGroupLayout->addStretch();
mappingTabLayout->addWidget(mappingGroup);
mappingTabLayout->addStretch();
// Добавляем вкладку
m_tabWidget->addTab(mappingTab, "Дезигнаторы");
}
QString ProjectSettingsDialog::getCurrentVariant() const
{
return m_variantComboBox->currentText();
}
void ProjectSettingsDialog::onVariantChanged(const QString &variant)
{
qDebug() << "ProjectSettingsDialog: Изменен вариант на:" << variant;
if (m_settingsModel) {
m_settingsModel->setCurrentVariant(variant);
}
}
void ProjectSettingsDialog::onAvailableVariantsChanged()
{
qDebug() << "ProjectSettingsDialog: Обновление доступных вариантов";
if (m_settingsModel && m_variantComboBox) {
QStringList variants = m_settingsModel->availableVariants();
qDebug() << "ProjectSettingsDialog: Новые доступные варианты:" << variants;
// Блокируем сигналы во время обновления
m_variantComboBox->blockSignals(true);
// Очищаем и заполняем комбобокс
m_variantComboBox->clear();
m_variantComboBox->addItems(variants);
// Устанавливаем текущий вариант
QString currentVariant = m_settingsModel->currentVariant();
int index = m_variantComboBox->findText(currentVariant);
if (index >= 0) {
m_variantComboBox->setCurrentIndex(index);
qDebug() << "ProjectSettingsDialog: Установлен вариант с индексом:" << index;
} else {
qDebug() << "ProjectSettingsDialog: Текущий вариант не найден в списке";
}
// Разблокируем сигналы
m_variantComboBox->blockSignals(false);
}
}
void ProjectSettingsDialog::onResetToDefaults()
{
qDebug() << "ProjectSettingsDialog: Сброс к значениям по умолчанию";
if (m_settingsModel) {
m_settingsModel->resetToDefaults();
}
// Обновляем UI
m_variantComboBox->setCurrentText(DEFAULT_VARIANT);
}
void ProjectSettingsDialog::onSaveSettings()
{
qDebug() << "ProjectSettingsDialog: Сохранение настроек";
accept();
}