/
pi_coder
/
ByteMachine
Обзор
Документация
Войти
/
pi_coder
/
ByteMachine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/nodes/input_file_node.h
118 строк
5 KB
pimenov-and
Перенос функциональности из старого проекта, в основном это описания узлов
19 июл 2026, 20:13
19 июл 2026, 20:13
cb3c51b
Код
Авторство
О чём код?
//////////////////////////////////////////////////////////////// // ByteMachine // Узел для чтения данных из файла //////////////////////////////////////////////////////////////// #ifndef INPUT_FILE_NODE_H #define INPUT_FILE_NODE_H //============================================================== #include <QFile> #include <QFileSystemWatcher> #include "base_node.h" //============================================================== // Узел для чтения данных из файла //============================================================== class InputFileNode : public BaseNode { Q_OBJECT Q_PROPERTY(QString filePath READ filePath WRITE setFilePath RESET resetFilePath) public: // Конструктор с параметрами explicit InputFileNode(QUndoStack *undoStack, QObject *parent = nullptr); // Чтение из XML void readFromXml(const QDomElement &elem) override; // Запись в XML void writeToXml(QDomDocument &doc, QDomElement &elem) const override; // Получение типа узла [[nodiscard]] NodeTypes type() const noexcept override { return NodeTypes::InFile; } // Функция перерисовки void draw(QPainter *painter, ColorThemes theme = ColorThemes::Light) const override; // Получение копии узла [[nodiscard]] ShPtrBaseNode clone() const override; // Получение текста подсказки [[nodiscard]] QString tooltipText() const override; // Получение размера данных [[nodiscard]] std::size_t dataSize() const override; // Получение байта данных [[nodiscard]] quint8 dataByte(std::size_t index) const override; // Получение блока данных [[nodiscard]] ByteList dataBlock(std::size_t index, std::size_t count) const override; // Функция вызывается при изменении данных void dataChanged() override; // Получение выходных пинов [[nodiscard]] QVector<ShPtrOutputPin> outputPins() override; // Получение выходных пинов (константный вариант) [[nodiscard]] QVector<ShPtrConstOutputPin> outputPins() const override; // Получение пути к файлу [[nodiscard]] QString filePath() const { return file_.fileName(); } // Задание пути к файлу void setFilePath(const QString &path); // Сброс пути к файлу void resetFilePath(); // Получение признака изменения для пути к файлу [[nodiscard]] bool isFilePathModified() const { return !filePath().isEmpty(); } // Функция получения имени свойства для графического // интерфейса по его системному имени [[nodiscard]] QString getUiPropertyName(const QString &systemName) override; // Функция перевода void retranslate() override; private slots: // Функция вызывается при подключении выходного пина void slotOutputPinConnectChanged(ConnectStates state, InputPin *pin); // Функция вызывается при изменении файла void slotFileChanged(); private: // Задание соединений void setConnections(); // Создание выходного пина void createOutputPin(); // Вывод комментариев void drawComments(QPainter *painter, ColorThemes theme = ColorThemes::Light) const; //---------------------------------------------------------- // Чтение/запись в XML //---------------------------------------------------------- // Чтение пути к файлу из XML QString readFilePathFromXml(const QDomElement &elem) const; // Запись пути к файлу в XML void writeFilePathToXml(QDomDocument &doc, QDomElement &elem) const; // Обновление состояния узла void updateStateInfo(); // Файл mutable QFile file_{}; // Объект для слежения за файлом QFileSystemWatcher fileWatcher_{}; // Выходной пин ShPtrOutputPin outputPin_{}; // Идентификатор таймера подсветки int highlightTimerId_{0}; }; //============================================================== using ShPtrInputFileNode = QSharedPointer<InputFileNode>; using ShPtrConstInputFileNode = QSharedPointer<const InputFileNode>; //============================================================== #endif // INPUT_FILE_NODE_H