/
pi_coder
/
ByteMachine
Обзор
Документация
Войти
/
pi_coder
/
ByteMachine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/nodes/size_node.h
171 строка
7 KB
pimenov-and
Перенос функциональности из старого проекта, в основном это описания узлов
19 июл 2026, 20:13
19 июл 2026, 20:13
cb3c51b
Код
Авторство
О чём код?
//////////////////////////////////////////////////////////////// // ByteMachine // Узел для показа размера данных //////////////////////////////////////////////////////////////// #ifndef SIZE_NODE_H #define SIZE_NODE_H //============================================================== #include "base_node.h" #include "size_units.h" //============================================================== class QUndoStack; //============================================================== // Узел для показа размера данных //============================================================== class SizeNode final : public BaseNode { Q_OBJECT Q_PROPERTY(SizeUnits unit READ unit WRITE setUnit RESET resetUnit) Q_PROPERTY(bool bypass READ isBypass WRITE setBypass RESET resetBypass) public: // Конструктор с параметром explicit SizeNode(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::Size; } // Функция вывода void draw(QPainter *painter, ColorThemes theme = ColorThemes::Light) const override; // Получение копии узла [[nodiscard]] ShPtrBaseNode clone() const override; // Получение текста подсказки [[nodiscard]] QString tooltipText() const override; // Получение признака изменения размера [[nodiscard]] bool isResizeble() const override { return true; } // Получение входных пинов [[nodiscard]] QVector<ShPtrInputPin> inputPins() override; // Получение входных пинов (2 вариант) [[nodiscard]] QVector<ShPtrConstInputPin> inputPins() const override; // Получение выходных пинов [[nodiscard]] QVector<ShPtrOutputPin> outputPins() override; // Получение выходных пинов (константный вариант) [[nodiscard]] QVector<ShPtrConstOutputPin> outputPins() 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]] SizeUnits unit() const { return unit_; } // Задание размерности void setUnit(SizeUnits unit); // Сброс размерности void resetUnit(); // Получение признака изменения размерности [[nodiscard]] bool isUnitModified() const { return unit_ != SizeUnits::Byte; } // Получение признака пропуска [[nodiscard]] bool isBypass() const { return isBypass_; } // Задание признака пропуска void setBypass(bool bypass); // Сброс признака пропуска void resetBypass(); // Получение признака изменения пропуска [[nodiscard]] bool isBypassModified() const { return isBypass_; } // Виртуальная функция получения имени свойства из графического // интерфейса по его системному имени [[nodiscard]] QString getUiPropertyName(const QString &systemName) override; // Функция перевода void retranslate() override; private slots: // Функция вызывается при подключении выходного пина void slotOutputPinConnectChanged(ConnectStates state, InputPin *pin); private: // Вывод основы void drawBody(QPainter *painter, ColorThemes theme) const; // Вывод комментариев void drawComments(QPainter *painter, ColorThemes theme) const; // Корректировка высоты узла void correctHeight(); // Перевод байтов в килобайты [[nodiscard]] static double bytesToKilobytes(qint32 count); // Перевод байтов в мегабайты [[nodiscard]] static double bytesToMegabytes(qint32 count); // Получение размера данных в виде строки [[nodiscard]] QString dataSizeToStr() const; // Создание входного пина void createInputPin(); // Создание выходного пина void createOutputPin(); // Получение признака подключения входного пина [[nodiscard]] bool isConnectedInputPin() const; // Получение размера входные данных [[nodiscard]] std::size_t inputDataSize() const; //---------------------------------------------------------- // Чтение/запись в XML //---------------------------------------------------------- // Чтение единицы измерения из XML [[nodiscard]] SizeUnits readUnitFromXml(const QDomElement &elem) const; // Запись единицы измерения в XML void writeUnitToXml(QDomDocument &doc, QDomElement &elem) const; // Обновление состояния узла void updateStateInfo(); // Получение максимальной ширины [[nodiscard]] int maxWidth() const override { return gridSize() * 9; } // Получение минимальной высоты [[nodiscard]] int minHeight() const override { return gridSize() * 4; } // Получение максимальной высоты [[nodiscard]] int maxHeight() const override { return minHeight(); } // Входной пин ShPtrInputPin inputPin_{}; // Выходной пин ShPtrOutputPin outputPin_{}; // Единицы измерения SizeUnits unit_{SizeUnits::Byte}; // Размеры символа static QSize charSize_; }; //============================================================== using ShPtrSizeNode = QSharedPointer<SizeNode>; using ShPtrConstSizeNode = QSharedPointer<SizeNode>; //============================================================== #endif // SIZE_NODE_H