/
pi_coder
/
ByteMachine
Обзор
Документация
Войти
/
pi_coder
/
ByteMachine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/nodes/area_node.h
149 строк
6 KB
pimenov-and
Перенос функциональности из старого проекта, в основном это описания узлов
19 июл 2026, 20:13
19 июл 2026, 20:13
cb3c51b
Код
Авторство
О чём код?
//////////////////////////////////////////////////////////////// // ByteMachine // Декоративный узел для выделения группы узлов //////////////////////////////////////////////////////////////// #ifndef AREA_NODE_H #define AREA_NODE_H //============================================================== #include "base_node.h" #include "area_node_colors.h" #include "area_node_text_aligns.h" //============================================================== // Декоративный узел для выделения группы узлов //============================================================== class AreaNode : public BaseNode { Q_OBJECT Q_PROPERTY(AreaNodeColors color READ color WRITE setColor RESET resetColor) Q_PROPERTY(QString text READ text WRITE setText RESET resetText) Q_PROPERTY(AreaNodeTextAligns textAlign READ textAlign WRITE setTextAlign RESET resetTextAlign) public: // Конструктор с параметрами explicit AreaNode(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::Area; } // Рисование узла void draw(QPainter *painter, ColorThemes theme = ColorThemes::Light) const override; // Получение копии узла [[nodiscard]] ShPtrBaseNode clone() const override; // Получение признака изменения размера [[nodiscard]] bool isResizeble() const override { return true; } // Получение текста подсказки [[nodiscard]] QString tooltipText() const override { return QString{}; } // Получение размера данных [[nodiscard]] std::size_t dataSize() const override; // Получение байта данных [[nodiscard]] quint8 dataByte(std::size_t) const override; // Получение блока данных [[nodiscard]] ByteList dataBlock(std::size_t, std::size_t) const override; // Функция вызывается при изменении данных void dataChanged() override; // Получение цвета [[nodiscard]] AreaNodeColors color() const { return color_; } // Задание цвета void setColor(AreaNodeColors color); // Сброс цвета void resetColor(); // Проверка изменения цвета [[nodiscard]] bool isColorModified() const { return color_ != AreaNodeColors::Mint; } // Получение текста [[nodiscard]] QString text() const { return text_; } // Задание текста void setText(const QString &text); // Сброс текста void resetText(); // Проверка изменения текста [[nodiscard]] bool isTextModified() const { return text_ != "Area"; } // Получение выравнивания текста [[nodiscard]] AreaNodeTextAligns textAlign() const { return textAlign_; } // Задание выравнивания текста void setTextAlign(AreaNodeTextAligns align); // Сброс выравнивания текста void resetTextAlign(); // Проверка изменения текста [[nodiscard]] bool isTextAlignModified() const { return !isTop(textAlign_); } // Функция получения имени свойства для графического // интерфейса по его системному имени [[nodiscard]] QString getUiPropertyName(const QString &systemName) override; // Функция перевода void retranslate() override; private: // Вывод тела void drawBody(QPainter *painter, ColorThemes theme) const; // Вывод маркера изменения размера void drawResizeMarker(QPainter *painter, ColorThemes theme) const; //---------------------------------------------------------- // Чтение/запись в XML //---------------------------------------------------------- // Чтение цвета из XML [[nodiscard]] AreaNodeColors readColorFromXml(const QDomElement &elem) const; // Запись цвета в XML void writeColorToXml(QDomDocument &doc, QDomElement &elem) const; // Чтение текста из XML [[nodiscard]] QString readTextFromXml(const QDomElement &elem) const; // Запись текста в XML void writeTextToXml(QDomDocument &doc, QDomElement &elem) const; // Чтение выравнивания текста из XML [[nodiscard]] AreaNodeTextAligns readTextAlignFromXml(const QDomElement &elem) const; // Запись выравнивания текста в XML void writeTextAlignToXml(QDomDocument &doc, QDomElement &elem) const; // Получение минимально ширины [[nodiscard]] int minWidth() const override { return gridSize() * 6; } // Получение максимальной ширины [[nodiscard]] int maxWidth() const override { return gridSize() * 60; } // Получение минимальной высоты [[nodiscard]] int minHeight() const override { return gridSize() * 6; } // Получение максимальной высоты [[nodiscard]] int maxHeight() const override { return gridSize() * 60; } // Цвет AreaNodeColors color_{AreaNodeColors::Mint}; // Текст QString text_ = "Area"; // Выравнивание текста AreaNodeTextAligns textAlign_{AreaNodeTextAligns::Top}; }; //============================================================== using ShPtrAreaNode = QSharedPointer<AreaNode>; using ShPtrConstAreaNode = QSharedPointer<AreaNode>; //============================================================== #endif // AREA_NODE_H