Files
GostGenerator/view/pcbmaterialpreview.cpp
T

119 lines
3.9 KiB
C++

#include "pcbmaterialpreview.h"
#include <QDebug>
PCBMaterialPreview::PCBMaterialPreview(PCBMaterialModel* model, QWidget *parent)
: QWidget(parent)
, m_tableModel(model)
{
setUp();
}
void PCBMaterialPreview::setUp()
{
setWidgets();
setUpLayout();
setUpConnections();
}
void PCBMaterialPreview::setWidgets()
{
// Если модель не передана, создаем новую
if (!m_tableModel) {
m_tableModel = new PCBMaterialModel(this);
}
m_tableView = new QTableView(this);
m_layerCountLabel = new QLabel("Количество слоев: 0", this);
// Настраиваем таблицу
m_tableView->setModel(m_tableModel);
m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
m_tableView->setSelectionMode(QAbstractItemView::SingleSelection);
m_tableView->setAlternatingRowColors(true);
m_tableView->setSortingEnabled(true);
// Настраиваем заголовки
m_tableView->horizontalHeader()->setStretchLastSection(true);
m_tableView->horizontalHeader()->setSectionsClickable(true);
m_tableView->verticalHeader()->setVisible(false);
qDebug() << "PCBMaterialPreview: Виджет создан";
}
void PCBMaterialPreview::setUpLayout()
{
QVBoxLayout* mainLayout = new QVBoxLayout(this);
// Добавляем информацию о количестве слоев
mainLayout->addWidget(m_layerCountLabel);
// Добавляем таблицу
mainLayout->addWidget(m_tableView);
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}
void PCBMaterialPreview::setUpConnections()
{
// Подключаем сигналы выбора строк
if (m_tableView) {
connect(m_tableView->selectionModel(), &QItemSelectionModel::selectionChanged,
[this](const QItemSelection &selected, const QItemSelection &deselected) {
if (!selected.isEmpty()) {
int row = selected.indexes().first().row();
emit materialSelected(row);
}
});
connect(m_tableView, &QTableView::doubleClicked,
[this](const QModelIndex &index) {
emit materialDoubleClicked(index.row());
});
}
}
void PCBMaterialPreview::updateView()
{
if (m_tableModel) {
m_tableModel->loadMaterials();
int layerCount = m_tableModel->getLayerCount();
int materialCount = m_tableModel->getMaterialCount();
m_layerCountLabel->setText(QString("Количество слоев: %1 | Материалов: %2")
.arg(layerCount).arg(materialCount));
qDebug() << "PCBMaterialPreview: Обновлено отображение - слоев:" << layerCount
<< "материалов:" << materialCount;
} else {
qDebug() << "PCBMaterialPreview: m_tableModel равен nullptr";
}
}
void PCBMaterialPreview::setPCBMaterials(const QList<PCBMaterialData> &materials)
{
if (m_tableModel) {
// Этот метод может быть использован для программной установки данных
// В текущей реализации данные загружаются из БД через loadMaterials()
qDebug() << "PCBMaterialPreview: Установлено материалов:" << materials.size();
}
}
void PCBMaterialPreview::setLayerCount(int layerCount)
{
if (m_layerCountLabel) {
m_layerCountLabel->setText(QString("Количество слоев: %1").arg(layerCount));
}
}
void PCBMaterialPreview::clear()
{
if (m_tableModel) {
m_tableModel->clearMaterials();
m_layerCountLabel->setText("Количество слоев: 0");
}
}
PCBMaterialModel* PCBMaterialPreview::tableModel() const
{
return m_tableModel;
}