119 lines
5.3 KiB
C++
119 lines
5.3 KiB
C++
#ifndef SPECIFICATIONPCBCONTROLLER_H
|
||
#define SPECIFICATIONPCBCONTROLLER_H
|
||
|
||
#include <QObject>
|
||
#include <QList>
|
||
#include <QStringList>
|
||
#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<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);
|
||
|
||
// Метод для установки модели таблицы (для интеграции с 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);
|
||
QString getComponentTypeSingular(ComponentModel *component);
|
||
|
||
// Метод для разделения десигнатора на буквенную и цифровую части
|
||
QPair<QString, QString> splitDesignator(const QString &designator);
|
||
|
||
// Метод для разделения длинных наименований на несколько строк
|
||
QList<QString> splitLongDesignation(const QString &designation, const QString originalString="", ComponentModel *component = nullptr, int maxLength = 34);
|
||
|
||
// Вспомогательный метод для разделения текста по пробелам
|
||
QList<QString> splitBySpaces(const QString &text, int maxLength);
|
||
|
||
// Вспомогательный метод для разделения комплексной строки (с запятыми) по середине
|
||
QList<QString> 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<ComponentModel*> m_components;
|
||
QStringList m_columnMappings;
|
||
QStringList m_propertyNames;
|
||
QString m_pcbDocFileName; // Имя PcbDoc файла
|
||
};
|
||
|
||
#endif // SPECIFICATIONPCBCONTROLLER_H
|