#include "projectsettingsdialog.h" #include "designatormappingdialog.h" #include // Статические константы 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(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::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(); }