91 lines
4.0 KiB
C++
91 lines
4.0 KiB
C++
#ifndef PERECHENTABLECONTROLLER_H
|
||
#define PERECHENTABLECONTROLLER_H
|
||
|
||
#include <QObject>
|
||
#include <QList>
|
||
#include <QStringList>
|
||
#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<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);
|
||
|
||
// Метод для установки модели таблицы (для интеграции с 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<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> splitComplexStringByMiddle(const QString &text, int maxLength);
|
||
|
||
PerechenTableModel *m_tableModel;
|
||
DesignatorMappingModel *m_designatorMappingModel;
|
||
ProjectSettingsModel *m_projectSettingsModel;
|
||
QList<ComponentModel*> m_components;
|
||
QStringList m_columnMappings;
|
||
QStringList m_propertyNames;
|
||
};
|
||
|
||
#endif // PERECHENTABLECONTROLLER_H
|