222 lines
8.4 KiB
C++
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();
|
|
}
|