176 lines
6.5 KiB
C++
176 lines
6.5 KiB
C++
#include "columnsettingsdialog.h"
|
|
#include "../controller/maincontroller.h"
|
|
#include "../model/componenttablemodel.h"
|
|
#include "../model/projectsettingsmodel.h"
|
|
#include <QDebug>
|
|
|
|
// Статические константы
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|