#ifndef VEDOMOSTCONTROLLER_H #define VEDOMOSTCONTROLLER_H #include #include #include #include "../model/vedomosttablemodel.h" #include "../model/designatormappingmodel.h" #include "../model/projectsettingsmodel.h" class ComponentModel; class MainController; class VedomostController : public QObject { Q_OBJECT public: explicit VedomostController(QObject *parent = nullptr); ~VedomostController(); // Получение модели для отображения в UI VedomostTableModel* getTableModel() const { return m_tableModel; } VedomostTableModel* 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); // Метод для установки модели таблицы (для интеграции с VedomostProcessor) void setModel(VedomostTableModel *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); private: QString getComponentValue(ComponentModel *component, const QString &propertyName); QString getComponentRawValue(ComponentModel *component, const QString &propertyName); // Получает сырое значение без вычисления выражений QString getMappedValue(ComponentModel *component, const QString &columnName); QString parseExpression(ComponentModel *component, const QString &expression); QStringList collectPropertyNames(); // Методы для группировки QString getComponentType(ComponentModel *component); QString getComponentTypeName(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 splitByConnectors(const QString &text, int maxLength); // Вспомогательный метод для разделения комплексной строки (с запятыми) по середине QList splitComplexStringByMiddle(const QString &text, int maxLength); // Метод для разбиения длинных групп десигнаторов QStringList splitDesignatorGroups(const QStringList &designatorGroups, int maxLength = 30); // Метод для получения значения "Куда входит" из ProjectParamTable QString getWhereUsed() const; private slots: // Слот для обработки изменений данных в строке (автоматический пересчет totalQuantity) void onRowDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()); private: VedomostTableModel *m_tableModel; DesignatorMappingModel *m_designatorMappingModel; ProjectSettingsModel *m_projectSettingsModel; MainController *m_mainController; QList m_components; QStringList m_columnMappings; QStringList m_propertyNames; }; #endif // VEDOMOSTCONTROLLER_H