#ifndef PERECHENTABLECONTROLLER_H #define PERECHENTABLECONTROLLER_H #include #include #include #include "../model/perechentablemodel.h" #include "../model/designatormappingmodel.h" #include "../model/projectsettingsmodel.h" class ComponentModel; class PerechenTableController : public QObject { Q_OBJECT public: explicit PerechenTableController(QObject *parent = nullptr); ~PerechenTableController(); // Получение модели для отображения в UI PerechenTableModel* getTableModel() const { return m_tableModel; } PerechenTableModel* 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); // Метод для установки модели таблицы (для интеграции с PerechenProcessor) void setModel(PerechenTableModel *model); // Метод для установки модели настроек проекта void setProjectSettingsModel(ProjectSettingsModel *model); // Метод для оптимизации разрывов страниц void optimizePageBreaks(); // Методы для работы с размером шрифта int getFontSize() const; void setFontSize(int fontSize); int getFontStretch() const; void setFontStretch(int stretch); 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 = 60); // Вспомогательный метод для разделения текста по пробелам QList splitBySpaces(const QString &text, int maxLength); // Вспомогательный метод для разделения комплексной строки (с запятыми) по середине QList splitComplexStringByMiddle(const QString &text, int maxLength); PerechenTableModel *m_tableModel; DesignatorMappingModel *m_designatorMappingModel; ProjectSettingsModel *m_projectSettingsModel; QList m_components; QStringList m_columnMappings; QStringList m_propertyNames; }; #endif // PERECHENTABLECONTROLLER_H