Add initial project structure with essential files including .gitignore, application resources, and various model and view components for the application. Implemented asynchronous parsing support and database structure checks.

This commit is contained in:
2025-12-08 15:21:18 +03:00
parent 4f8c90c15b
commit 3467003721
110 changed files with 35406 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
#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);
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 = 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;
};
#endif // SPECIFICATIONPCBCONTROLLER_H