Files
GostGenerator/view/componentspreview.cpp
T

159 lines
6.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "componentspreview.h"
ComponentsPreview::ComponentsPreview(ComponentTableModel* model, QWidget *parent)
: QWidget{parent}, m_model(model)
{
setUp();
}
void ComponentsPreview::setUp(){
setWidgets();
setUpLayout();
setUpConnections();
}
void ComponentsPreview::setWidgets(){
m_variantComboBox = new QComboBox(this);
m_tableView = new FreezeTableWidget(this);
// Устанавливаем модель для таблицы
if (m_model) {
m_tableView->setModel(m_model);
// Настраиваем замороженные столбцы (ID и обозначение) после установки модели
m_tableView->setFrozenColumns(2);
}
}
void ComponentsPreview::setUpLayout(){
QVBoxLayout* mainLayout = new QVBoxLayout(this);
QGroupBox* groupBox = new QGroupBox("Варианты исполнения", this);
QHBoxLayout* groupBoxLayout = new QHBoxLayout(groupBox);
groupBoxLayout->addWidget(m_variantComboBox);
mainLayout->addWidget(groupBox);
mainLayout->addWidget(m_tableView);
}
void ComponentsPreview::setUpConnections()
{
// Подключение изменения варианта
connect(m_variantComboBox, QOverload<const QString &>::of(&QComboBox::currentTextChanged),
[this](const QString &text) {
qDebug() << "ComponentsPreview: Изменение варианта в комбобоксе:" << text;
emit variantChanged(text);
});
// Подключение выбора компонента
connect(m_tableView->selectionModel(), &QItemSelectionModel::currentChanged,
[this](const QModelIndex &current, const QModelIndex &previous) {
if (current.isValid()) {
emit componentSelected(current.row());
}
});
// Подключение двойного клика
connect(m_tableView, &QTableView::doubleClicked,
[this](const QModelIndex &index) {
emit componentDoubleClicked(index.row());
});
// Подключение обновления списка вариантов
if (m_model) {
connect(m_model, &ComponentTableModel::variantsChanged,
this, &ComponentsPreview::updateVariantComboBox);
connect(m_model, &ComponentTableModel::currentVariantChanged,
[this]() {
if (m_model && m_variantComboBox->currentText() != m_model->currentVariant()) {
m_variantComboBox->setCurrentText(m_model->currentVariant());
}
});
// Инициализируем комбобокс
updateVariantComboBox();
}
}
void ComponentsPreview::updateVariantComboBox()
{
if (!m_model || !m_variantComboBox)
return;
qDebug() << "ComponentsPreview: Обновление комбобокса вариантов";
// Блокируем сигналы во время обновления
m_variantComboBox->blockSignals(true);
QString currentText = m_variantComboBox->currentText();
m_variantComboBox->clear();
// Добавляем варианты из модели
QStringList variants = m_model->variants();
m_variantComboBox->addItems(variants);
qDebug() << "ComponentsPreview: Доступные варианты:" << variants;
qDebug() << "ComponentsPreview: Текущий вариант модели:" << m_model->currentVariant();
qDebug() << "ComponentsPreview: Текущий текст комбобокса:" << currentText;
// Приоритет: сначала пытаемся установить текущий вариант модели
QString modelCurrentVariant = m_model->currentVariant();
if (!modelCurrentVariant.isEmpty() && variants.contains(modelCurrentVariant)) {
m_variantComboBox->setCurrentText(modelCurrentVariant);
qDebug() << "ComponentsPreview: Установлен вариант модели:" << modelCurrentVariant;
} else if (!currentText.isEmpty() && variants.contains(currentText)) {
// Если текущий вариант модели не найден, пытаемся сохранить предыдущий выбор
m_variantComboBox->setCurrentText(currentText);
qDebug() << "ComponentsPreview: Установлен предыдущий выбор:" << currentText;
} else if (!variants.isEmpty()) {
// Если ничего не подходит, устанавливаем первый доступный вариант
m_variantComboBox->setCurrentIndex(0);
qDebug() << "ComponentsPreview: Установлен первый доступный вариант:" << variants.first();
} else {
qDebug() << "ComponentsPreview: Нет доступных вариантов";
}
// Разблокируем сигналы
m_variantComboBox->blockSignals(false);
}
void ComponentsPreview::updateView()
{
// Обновляем комбобокс вариантов
updateVariantComboBox();
// Обновляем таблицу
if (m_tableView && m_model) {
m_tableView->reset();
m_tableView->resizeColumnsToContents();
}
}
void ComponentsPreview::setCurrentVariant(const QString &variant)
{
qDebug() << "ComponentsPreview: setCurrentVariant вызван с вариантом:" << variant;
if (!m_variantComboBox)
return;
// Блокируем сигналы во время установки
m_variantComboBox->blockSignals(true);
// Устанавливаем вариант в модели компонентов ПЕРЕД установкой в комбобокс
if (m_model) {
m_model->setCurrentVariant(variant);
qDebug() << "ComponentsPreview: Вариант установлен в модели компонентов";
}
// Устанавливаем вариант в комбобокс
int index = m_variantComboBox->findText(variant);
if (index >= 0) {
m_variantComboBox->setCurrentIndex(index);
qDebug() << "ComponentsPreview: Вариант установлен в комбобокс с индексом:" << index;
} else {
qDebug() << "ComponentsPreview: Вариант не найден в комбобоксе:" << variant;
}
// Разблокируем сигналы
m_variantComboBox->blockSignals(false);
}