110 lines
5.2 KiB
C++
110 lines
5.2 KiB
C++
#ifndef VEDOMOSTCONTROLLER_H
|
||
#define VEDOMOSTCONTROLLER_H
|
||
|
||
#include <QObject>
|
||
#include <QList>
|
||
#include <QStringList>
|
||
#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<ComponentModel*> &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<QString, QString> splitDesignator(const QString &designator);
|
||
|
||
// Метод для разделения длинных наименований на несколько строк
|
||
QList<QString> splitLongDesignation(const QString &designation, const QString originalString="", ComponentModel *component = nullptr, int maxLength = 60);
|
||
|
||
// Вспомогательный метод для разделения текста по пробелам
|
||
QList<QString> splitBySpaces(const QString &text, int maxLength);
|
||
|
||
// Вспомогательный метод для разделения текста по соединениям
|
||
QList<QString> splitByConnectors(const QString &text, int maxLength);
|
||
|
||
// Вспомогательный метод для разделения комплексной строки (с запятыми) по середине
|
||
QList<QString> 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<int> &roles = QVector<int>());
|
||
|
||
private:
|
||
VedomostTableModel *m_tableModel;
|
||
DesignatorMappingModel *m_designatorMappingModel;
|
||
ProjectSettingsModel *m_projectSettingsModel;
|
||
MainController *m_mainController;
|
||
QList<ComponentModel*> m_components;
|
||
QStringList m_columnMappings;
|
||
QStringList m_propertyNames;
|
||
};
|
||
|
||
#endif // VEDOMOSTCONTROLLER_H
|