#ifndef SPECIFICATIONCONTROLLER_H #define SPECIFICATIONCONTROLLER_H #include #include #include #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 &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 splitDesignator(const QString &designator); // Метод для разделения длинных наименований на несколько строк QList splitLongDesignation(const QString &designation, const QString originalString="", PCBMaterialModel *material = nullptr, int maxLength = 60); // Вспомогательный метод для разделения текста по пробелам QList 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 m_materials; PCBMaterialModel *m_pcbMaterialModel; QStringList m_columnMappings; QStringList m_propertyNames; }; #endif // SPECIFICATIONCONTROLLER_H