Files
GostGenerator/model/pcbmaterialmodel.cpp
T

218 lines
5.7 KiB
C++

#include "pcbmaterialmodel.h"
#include <QDebug>
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<DielProperty> 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("Неизвестно");
}
}