Files
GostGenerator/controller/specificationpcbcontroller.h
T

119 lines
5.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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