#include "columnsettingsdialog.h" #include "../controller/maincontroller.h" #include "../model/componenttablemodel.h" #include "../model/projectsettingsmodel.h" #include // Статические константы const QStringList ColumnSettingsDialog::COLUMN_NAMES = QStringList() << "Поз.обозначение" << "Наименование" << "Кол." << "Примечание"; const QStringList ColumnSettingsDialog::DEFAULT_MAPPINGS = QStringList() << "Designator" << "<Пусто>" << "<Пусто>" << "<Пусто>"; ColumnSettingsDialog::ColumnSettingsDialog(const QStringList &availableProperties, const QStringList ¤tMappings, QWidget *parent) : QDialog(parent) , m_availableProperties(availableProperties) , m_currentMappings(currentMappings) , m_controller(nullptr) { setUp(); } ColumnSettingsDialog::ColumnSettingsDialog(MainController *controller, QWidget *parent) : QDialog(parent) , m_controller(controller) { // Загружаем настройки из контроллера if (m_controller) { m_controller->loadProjectSettingsFromDatabase(); m_availableProperties = m_controller->componentTableModel()->propertyNames(); m_currentMappings = m_controller->projectSettingsModel()->columnMappings(); } setUp(); } void ColumnSettingsDialog::setUp() { setWidgets(); setUpLayout(); setUpConnections(); } void ColumnSettingsDialog::setWidgets() { // Создаем комбобоксы для каждой колонки for (int i = 0; i < COLUMN_NAMES.size(); ++i) { QComboBox *comboBox = new QComboBox(this); // Делаем комбобокс редактируемым для ввода выражений comboBox->setEditable(true); // Добавляем доступные свойства for (const QString &property : m_availableProperties) { comboBox->addItem(property); } // Устанавливаем текущее значение if (i < m_currentMappings.size()) { QString currentMapping = m_currentMappings[i]; int index = comboBox->findText(currentMapping); if (index >= 0) { comboBox->setCurrentIndex(index); } else { // Если значение не найдено в списке, устанавливаем его как текст comboBox->setCurrentText(currentMapping); } } m_columnComboBoxes.append(comboBox); } // Создаем кнопки m_okButton = new QPushButton("OK", this); m_cancelButton = new QPushButton("Отмена", this); m_resetButton = new QPushButton("Сброс", this); // Настраиваем диалог setWindowTitle("Настройки колонок"); setModal(true); resize(400, 300); } void ColumnSettingsDialog::setUpLayout() { QVBoxLayout *mainLayout = new QVBoxLayout(this); // Создаем сетку для колонок QGridLayout *gridLayout = new QGridLayout(); // Заголовки gridLayout->addWidget(new QLabel("Колонка", this), 0, 0); gridLayout->addWidget(new QLabel("Источник данных", this), 0, 1); // Строки для каждой колонки for (int i = 0; i < COLUMN_NAMES.size(); ++i) { QLabel *columnLabel = new QLabel(COLUMN_NAMES[i], this); gridLayout->addWidget(columnLabel, i + 1, 0); gridLayout->addWidget(m_columnComboBoxes[i], i + 1, 1); } mainLayout->addLayout(gridLayout); // Кнопки QHBoxLayout *buttonLayout = new QHBoxLayout(); buttonLayout->addWidget(m_resetButton); buttonLayout->addStretch(); buttonLayout->addWidget(m_cancelButton); buttonLayout->addWidget(m_okButton); mainLayout->addLayout(buttonLayout); } void ColumnSettingsDialog::setUpConnections() { connect(m_okButton, &QPushButton::clicked, this, [this]() { // Сохраняем настройки перед закрытием saveSettings(); accept(); }); connect(m_cancelButton, &QPushButton::clicked, this, &QDialog::reject); connect(m_resetButton, &QPushButton::clicked, this, [this]() { // Сбрасываем к значениям по умолчанию for (int i = 0; i < m_columnComboBoxes.size() && i < DEFAULT_MAPPINGS.size(); ++i) { int index = m_columnComboBoxes[i]->findText(DEFAULT_MAPPINGS[i]); if (index >= 0) { m_columnComboBoxes[i]->setCurrentIndex(index); } } }); } QStringList ColumnSettingsDialog::getColumnMappings() const { QStringList mappings; for (QComboBox *comboBox : m_columnComboBoxes) { mappings.append(comboBox->currentText()); } return mappings; } void ColumnSettingsDialog::saveSettings() { qDebug() << "ColumnSettingsDialog: Сохранение настроек столбцов"; if (m_controller) { // Сохраняем настройки столбцов в модель настроек QStringList mappings = getColumnMappings(); m_controller->projectSettingsModel()->setColumnMappings(mappings); // Сохраняем в базу данных m_controller->saveProjectSettingsToDatabase(); // Синхронизируем настройки колонок с PerechenTableController m_controller->syncColumnMappingsWithPerechenController(); qDebug() << "ColumnSettingsDialog: Настройки столбцов синхронизированы с PerechenTableController"; } } void ColumnSettingsDialog::loadSettings() { qDebug() << "ColumnSettingsDialog: Загрузка настроек столбцов"; if (m_controller) { m_controller->loadProjectSettingsFromDatabase(); m_currentMappings = m_controller->projectSettingsModel()->columnMappings(); // Обновляем UI for (int i = 0; i < m_columnComboBoxes.size() && i < m_currentMappings.size(); ++i) { QString mapping = m_currentMappings[i]; int index = m_columnComboBoxes[i]->findText(mapping); if (index >= 0) { m_columnComboBoxes[i]->setCurrentIndex(index); } else { m_columnComboBoxes[i]->setCurrentText(mapping); } } } }