#include "pcbmaterialmodel.h" #include PCBMaterialModel::PCBMaterialModel(QObject *parent) : QAbstractTableModel(parent) , m_database(nullptr) , m_layerCount(0) { qDebug() << "PCBMaterialModel: Модель материалов платы создана"; } int PCBMaterialModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent) return m_materials.size(); } int PCBMaterialModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent) return ColumnCount; } QVariant PCBMaterialModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.row() >= m_materials.size()) { return QVariant(); } const PCBMaterialData &material = m_materials[index.row()]; if (role == Qt::DisplayRole) { switch (index.column()) { case ColumnLayerNumber: return material.layerNumber; case ColumnName: return material.name; case ColumnValue: return material.value; case ColumnHeight: return formatHeight(material.height); case ColumnDielType: return formatDielType(material.dielType); default: return QVariant(); } } if (role == Qt::TextAlignmentRole) { switch (index.column()) { case ColumnLayerNumber: case ColumnHeight: case ColumnDielType: return Qt::AlignCenter; default: return Qt::AlignLeft; } } return QVariant(); } QVariant PCBMaterialModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) { return QVariant(); } if (orientation == Qt::Horizontal) { switch (section) { case ColumnLayerNumber: return tr("№ Слоя"); case ColumnName: return tr("Название"); case ColumnValue: return tr("Значение"); case ColumnHeight: return tr("Толщина (мм)"); case ColumnDielType: return tr("Тип"); default: return QVariant(); } } return QVariant(); } void PCBMaterialModel::setDatabase(DataBaseController *database) { m_database = database; qDebug() << "PCBMaterialModel: База данных установлена:" << (m_database ? "да" : "нет"); } void PCBMaterialModel::loadMaterials() { if (!m_database) { qDebug() << "PCBMaterialModel: ОШИБКА: База данных не установлена!"; return; } qDebug() << "PCBMaterialModel: Загружаем материалы платы из БД..."; beginResetModel(); // Очищаем текущие данные m_materials.clear(); m_layerCount = 0; // Получаем данные PCB PCBData pcbData = m_database->getPCBData(); m_layerCount = pcbData.layerCount; qDebug() << "PCBMaterialModel: Количество слоев из БД:" << m_layerCount; // Получаем материалы QList dielMaterials = m_database->getDielMaterials(); qDebug() << "PCBMaterialModel: Количество материалов из БД:" << dielMaterials.size(); // Конвертируем DielProperty в PCBMaterialData for (const DielProperty &diel : dielMaterials) { PCBMaterialData material( -1, // ID будет установлен позже, если нужно diel.name, diel.value, diel.height, diel.dielType, diel.layerNumber ); m_materials.append(material); qDebug() << "PCBMaterialModel: Добавлен материал:" << material.name << "=" << material.value << "слой:" << material.layerNumber << "толщина:" << material.height << "мм"; } endResetModel(); qDebug() << "PCBMaterialModel: Загрузка завершена. Материалов:" << m_materials.size() << "слоев:" << m_layerCount; } void PCBMaterialModel::clearMaterials() { qDebug() << "PCBMaterialModel: Очищаем материалы"; beginResetModel(); m_materials.clear(); m_layerCount = 0; endResetModel(); } PCBMaterialData PCBMaterialModel::getMaterial(int row) const { if (row >= 0 && row < m_materials.size()) { return m_materials[row]; } return PCBMaterialData(); } QString PCBMaterialModel::getMaterialName(int row) const { if (row >= 0 && row < m_materials.size()) { return m_materials[row].name; } return QString(); } QString PCBMaterialModel::getMaterialValue(int row) const { if (row >= 0 && row < m_materials.size()) { return m_materials[row].value; } return QString(); } double PCBMaterialModel::getMaterialHeight(int row) const { if (row >= 0 && row < m_materials.size()) { return m_materials[row].height; } return 0.0; } int PCBMaterialModel::getMaterialDielType(int row) const { if (row >= 0 && row < m_materials.size()) { return m_materials[row].dielType; } return 0; } int PCBMaterialModel::getMaterialLayerNumber(int row) const { if (row >= 0 && row < m_materials.size()) { return m_materials[row].layerNumber; } return 0; } QString PCBMaterialModel::formatHeight(double height) const { return QString::number(height, 'f', 3); } QString PCBMaterialModel::formatDielType(int dielType) const { switch (dielType) { case 1: return tr("Ядро"); case 2: return tr("Препрег"); default: return tr("Неизвестно"); } }