102 lines
4.4 KiB
C++
102 lines
4.4 KiB
C++
#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
|