/
pi_coder
/
ByteMachine
Обзор
Документация
Войти
/
pi_coder
/
ByteMachine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/forms/form_designer.h
184 строки
10 KB
pimenov-and
Восстановление функционала старой версии
28 июл 2026, 20:04
28 июл 2026, 20:04
98412d0
Код
Авторство
О чём код?
//////////////////////////////////////////////////////////////// // ByteMachine // Виджет дизайнера //////////////////////////////////////////////////////////////// #ifndef FORM_DESIGNER_H #define FORM_DESIGNER_H //============================================================== #include <QtWidgets> #include <QPoint> #include "i_drag_and_drop.h" #include "nodes/base_node.h" #include "nodes/moving_node_connection.h" #include "ui_form_designer.h" #include "nodes/nodes.h" //============================================================== // Виджет дизайнера //============================================================== class FormDesigner : public QWidget, IDragAndDrop { Q_OBJECT public: // Конструктор с параметром explicit FormDesigner(QWidget *parent = nullptr); // Получение видимости сетки [[nodiscard]] bool isGridVisible() const { return isGridVisible_; } // Задание видимости сетки void setGridVisible(bool visible); // Перетаскивание узла void dragNode(const QPoint &pos) override; // Скрытие перетаскиваемого узла void hideDragNode() override; // Отпускание узла void dropNode(NodeTypes nodeType, const QPoint &pos) override; private slots: // Добавление узла через контекстное меню void slotAddNodeFromContextMenu(); // Удаление узла через контекстное меню void slotRemoveNodeFromContextMenu(); private: // Функция вызывается при возникновении события void changeEvent(QEvent *event) override; // Функция вызывается при перерисовке void paintEvent(QPaintEvent *event) override; // Функция вызывается при нажатии мыши void mousePressEvent(QMouseEvent *event) override; // Функция вызвается при перемещении мыши void mouseMoveEvent(QMouseEvent *event) override; // Функция вызывается при отпускании мыши void mouseReleaseEvent(QMouseEvent *event) override; // Функция вызывается при показе контекстного меню void contextMenuEvent(QContextMenuEvent *event) override; #ifndef Q_OS_WASM // Функция вызывается при приёме перетаскиваемого узла void dragEnterEvent(QDragEnterEvent *event) override; // Функция вызывается при отпускании перетаскиваемого узла void dropEvent(QDropEvent *event) override; #endif // Q_OS_WASM // Задание соединений void setConnections(); // Заливка фона void fillBackgound(QPainter *painter, const QRect &clipRect, ColorThemes theme) const; // Вывод сетки void drawGrid(QPainter *painter, ColorThemes theme) const; // Вывод узлов void drawNodes(QPainter *painter, ColorThemes theme) const; // Вывод перемещаемого соединения void drawMoveConnection(QPainter *painter, ColorThemes theme) const; // Рисование соединений пинов void drawPinConnectedLines(QPainter *painter, ColorThemes theme) const; // Вывод линии со стрелкой void drawLineWithArraw(QPainter *painter, const QColor &color, const QPoint &pt1, const QPoint &pt2) const; // Вывод перетаскиваемого узла void drawDragNode(QPainter *painter) const; // Задание размера символа void setCharSize(QPainter *painter); // Функция вызывается при выборе пункта контекстного меню // "Change file path" для узла InFileNode void changeFilePath(ShPtrInputFileNode node) const; // Создание контекстного меню [[nodiscard]] QMenu* createContextMenu() const; // Создание контекстного меню узлов категории "Standard" [[nodiscard]] QMenu* createStandardNodesContextMenu() const; // Создание контекстного меню узлов категории "Visualization" [[nodiscard]] QMenu* createVisualizationNodesContextMenu() const; // Создание контекстного меню узлов категории "Script" [[nodiscard]] QMenu* createScriptNodesContextMenu() const; // Создание контекстного меню узлов категории "Communication" [[nodiscard]] QMenu* createCommunicationNodesContextMenu() const; // Создание контекстного меню узлов категории "Other" [[nodiscard]] QMenu* createOtherNodesContextMenu() const; // Создание меню для преобразования узлов категории "Standard" [[nodiscard]] QMenu* createMorphStandardNodeContextMenu() const; // Создание меню для преобразования узлов категории "Visualization" [[nodiscard]] QMenu* createMorphVisualizationNodeContextMenu() const; // Создание меню для преобразования узлов категории "Script" [[nodiscard]] QMenu* createMorphScriptNodeContextMenu() const; // Создание меню для преобразования узлов категории "Communication" [[nodiscard]] QMenu* createMorphCommunicationNodeContextMenu() const; // Создание меню для преобразования узлов категории "Other" [[nodiscard]] QMenu* createMorphOtherNodeContextMenu() const; // Создание меню для преобразования узлов [[nodiscard]] QMenu* createMorphNodeContextMenu() const; // Создание контекстного меню узла [[nodiscard]] QMenu* createNodeContextMenu(ShPtrBaseNode node) const; // Добавление пунктов в контекстное меню для определённого типа узла void addTypeNodeMenuItems(QMenu *menu, ShPtrBaseNode node) const; // Добавление пунктов в контекстное меню для узла Generate void addGenerateNodeMenuItems(QMenu *menu, ShPtrGenerateNode node) const; // Добавление пунктов в контекстное меню для узла InFile void addInFileNodeMenuItems(QMenu *menu, ShPtrInputFileNode node) const; // Добавление пунктов в контекстное меню для узла OutFile void addOutFileNodeMenuItems(QMenu *menu, ShPtrOutputFileNode node) const; // Добавление пунктов в контекстное меню для узла Take void addTakeNodeMenuItems(QMenu *menu, ShPtrTakeNode node) const; // Добавление пунктов в контекстное меню для узла Skip void addSkipNodeMenuItems(QMenu *menu, ShPtrSkipNode node) const; // Добавление пунктов в контекстное меню для узла Reverse void addReverseNodeMenuItems(QMenu *menu, ShPtrReverseNode node) const; // Добавление пунктов в контекстное меню для узла Size void addSizeNodeMenuItems(QMenu *menu, ShPtrSizeNode node) const; // Добавление пунктов в контекстное меню для узла Dump void addDumpNodeMenuItems(QMenu *menu, ShPtrDumpNode node) const; // Добавление пунктов в контекстное меню для узла Paint void addPaintNodeMenuItems(QMenu *menu, ShPtrPaintNode node) const; // Добавление пунктов в контекстное меню для узла Struct void addStructNodeMenuItems(QMenu *menu, ShPtrStructNode node) const; // Добавление пунктов в контекстное меню для узла Graph void addGraphNodeMenuItems(QMenu *menu, ShPtrGraphNode node) const; #ifndef Q_OS_WASM // Добавление пунктов в контекстное меню для узла ComReader void addComReaderNodeMenuItems(QMenu *menu, ShPtrComReaderNode node) const; // Добавление пунктов в контекстное меню для узла ComWriter void addComWriterNodeMenuItems(QMenu *menu, ShPtrComWriterNode node) const; #endif // Q_OS_WASM // Добавление пунктов в контекстное меню для узла Area void addAreaNodeMenuItems(QMenu *menu, ShPtrAreaNode node) const; // Интерфейс пользователя Ui::FormDesigner ui_{}; // Перемещаемый узел ShPtrBaseNode movingNode_{}; // Смещение при захвате перетаскиваемого узла QPoint movingDragOffsetNode_{}; // Видимость сетки bool isGridVisible_{true}; // Положение меню QPoint menuPos_{}; // Перетаскиваемое соединение узла MovingNodeConnection movingConnection_{}; // Узел, для которого изменяются размеры ShPtrBaseNode resizebleNode_{}; // Признак перетаскивания узла bool isDragNode_{false}; // Позиция перетаскиваемого узла QPoint dragNodePos_{}; }; //============================================================== #endif // FORM_DESIGNER_H