#ifndef SPECIFICATIONPCBCONTROLLER_H #define SPECIFICATIONPCBCONTROLLER_H #include #include #include #include "../model/specificationpcbtablemodel.h" #include "../model/designatormappingmodel.h" #include "../model/projectsettingsmodel.h" class ComponentModel; class MainController; class SpecificationPCBController : public QObject { Q_OBJECT public: explicit SpecificationPCBController(QObject *parent = nullptr); ~SpecificationPCBController(); // Получение модели для отображения в UI SpecificationPCBTableModel* getTableModel() const { return m_tableModel; } SpecificationPCBTableModel* getModel() const { return m_tableModel; } // Алиас для совместимости // Методы для работы с компонентами void setComponents(const QList &components); void generateTableFromComponents(); void updateTableFromComponents(); // Метод для обновления таблицы по кнопке // Новые методы для управления строками 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); // Метод для установки модели таблицы (для интеграции с SpecificationPCBProcessor) void setModel(SpecificationPCBTableModel *model); // Метод для установки модели настроек проекта void setProjectSettingsModel(ProjectSettingsModel *model); void setMainController(MainController *controller); // Метод для оптимизации разрывов страниц void optimizePageBreaks(); // Метод для перерасчета позиций (начинает с последнего значения + 1) void recalculatePositions(); // Методы для работы с размером шрифта 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); // Методы для работы с названием платы QString getBoardName() const; void setBoardName(const QString &value); // Методы для работы с именем PcbDoc файла void setPcbDocFileName(const QString &fileName); QString getPcbDocFileName() const; private: QString getComponentValue(ComponentModel *component, const QString &propertyName); QString parseExpression(ComponentModel *component, const QString &expression); QStringList collectPropertyNames(); // Методы для группировки QString getComponentType(ComponentModel *component); // Метод для разделения десигнатора на буквенную и цифровую части QPair splitDesignator(const QString &designator); // Метод для разделения длинных наименований на несколько строк QList splitLongDesignation(const QString &designation, const QString originalString="", ComponentModel *component = nullptr, int maxLength = 34); // Вспомогательный метод для разделения текста по пробелам QList splitBySpaces(const QString &text, int maxLength); // Вспомогательный метод для разделения комплексной строки (с запятыми) по середине QList splitComplexStringByMiddle(const QString &text, int maxLength); // Метод для разбиения длинных групп десигнаторов QStringList splitDesignatorGroups(const QStringList &designatorGroups, int maxLength = 30); // Методы для специфичной логики спецификации платы QString getComponentFormat(ComponentModel *component); QString getComponentZone(ComponentModel *component); QString getComponentPosition(ComponentModel *component); SpecificationPCBTableModel *m_tableModel; DesignatorMappingModel *m_designatorMappingModel; ProjectSettingsModel *m_projectSettingsModel; MainController *m_mainController; QList m_components; QStringList m_columnMappings; QStringList m_propertyNames; QString m_pcbDocFileName; // Имя PcbDoc файла }; #endif // SPECIFICATIONPCBCONTROLLER_H