Add initial project structure with essential files including .gitignore, application resources, and various model and view components for the application. Implemented asynchronous parsing support and database structure checks.

This commit is contained in:
2025-12-08 15:21:18 +03:00
parent 4f8c90c15b
commit 3467003721
110 changed files with 35406 additions and 0 deletions
+102
View File
@@ -0,0 +1,102 @@
#ifndef SPECIFICATIONCONTROLLER_H
#define SPECIFICATIONCONTROLLER_H
#include <QObject>
#include <QList>
#include <QStringList>
#include "../model/specificationtablemodel.h"
#include "../model/designatormappingmodel.h"
#include "../model/projectsettingsmodel.h"
class PCBMaterialModel;
class MainController;
class SpecificationController : public QObject
{
Q_OBJECT
public:
explicit SpecificationController(QObject *parent = nullptr);
~SpecificationController();
// Получение модели для отображения в UI
SpecificationTableModel* getTableModel() const { return m_tableModel; }
SpecificationTableModel* getModel() const { return m_tableModel; } // Алиас для совместимости
// Методы для работы с материалами
void setMaterials(const QList<PCBMaterialModel*> &materials);
void setPCBMaterialModel(PCBMaterialModel* model);
void generateTableFromMaterials();
void updateTableFromMaterials(); // Метод для обновления таблицы по кнопке
// Новые методы для управления строками
void addEmptyRow();
void addEmptyRowAt(int position);
void insertEmptyRowAt(int position); // Вставка строки в определенную позицию
void removeRow(int row);
void clearTable();
// Методы для работы с настройками
void setColumnMappings(const QStringList &mappings);
QStringList getColumnMappings() const;
QStringList getAvailableProperties() const;
// Метод для установки модели маппинга дезигнаторов
void setDesignatorMappingModel(DesignatorMappingModel *mappingModel);
// Метод для установки модели таблицы (для интеграции с SpecificationProcessor)
void setModel(SpecificationTableModel *model);
// Метод для установки модели настроек проекта
void setProjectSettingsModel(ProjectSettingsModel *model);
void setMainController(MainController *controller);
// Метод для оптимизации разрывов страниц
void optimizePageBreaks();
// Методы для работы с размером шрифта
int getFontSize() const;
void setFontSize(int fontSize);
int getFontStretch() const;
void setFontStretch(int stretch);
// Методы для работы с децимальными номерами
QString getDecimalNumberBoard() const;
void setDecimalNumberBoard(const QString &value);
QString getDecimalNumberDocument() const;
void setDecimalNumberDocument(const QString &value);
private:
QString getMaterialValue(PCBMaterialModel *material, const QString &propertyName);
QString parseExpression(PCBMaterialModel *material, const QString &expression);
QString formatDielType(int dielType);
QStringList collectPropertyNames();
// Методы для группировки
QString getMaterialType(PCBMaterialModel *material);
// Метод для разделения десигнатора на буквенную и цифровую части
QPair<QString, QString> splitDesignator(const QString &designator);
// Метод для разделения длинных наименований на несколько строк
QList<QString> splitLongDesignation(const QString &designation, const QString originalString="", PCBMaterialModel *material = nullptr, int maxLength = 60);
// Вспомогательный метод для разделения текста по пробелам
QList<QString> splitBySpaces(const QString &text, int maxLength);
// Методы для специфичной логики спецификации
QString getMaterialFormat(PCBMaterialModel *material);
QString getMaterialZone(PCBMaterialModel *material);
QString getMaterialPosition(PCBMaterialModel *material);
SpecificationTableModel *m_tableModel;
DesignatorMappingModel *m_designatorMappingModel;
ProjectSettingsModel *m_projectSettingsModel;
MainController *m_mainController;
QList<PCBMaterialModel*> m_materials;
PCBMaterialModel *m_pcbMaterialModel;
QStringList m_columnMappings;
QStringList m_propertyNames;
};
#endif // SPECIFICATIONCONTROLLER_H