|
- #pragma once
-
- #include "domain/control_logic_model.h"
-
- #include <QGraphicsView>
-
- #include <string>
-
- class LogicEditorService;
- struct LogicEditorResult;
- class QGraphicsPathItem;
- class QGraphicsScene;
- class QMouseEvent;
- class QResizeEvent;
-
- class LogicEditorWidget final : public QGraphicsView
- {
- Q_OBJECT
-
- public:
- explicit LogicEditorWidget(
- LogicEditorService &editor_service,
- QWidget *parent = nullptr);
-
- void setLogicId(const std::string &logic_id);
- void setEditingEnabled(bool enabled);
- void reloadLogic();
- void selectNode(const std::string &node_id);
- std::string selectedNodeId() const;
- LogicEditorResult addNode(const LogicNodeConfig &config);
- LogicEditorResult deleteSelected();
-
- signals:
- void nodeSelected(const QString &node_id);
- void nodeChanged(const QString &node_id);
- void graphChanged();
- void editorError(const QString &message);
-
- protected:
- void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
- void resizeEvent(QResizeEvent *event) override;
-
- private:
- class NodeItem;
- class ConnectionItem;
-
- void handleSelectionChanged();
- void handleNodePositionChanged(const std::string &node_id);
- void updateConnections();
- void updatePreview(const QPointF &scene_position);
- void clearPreview();
- NodeItem *nodeAtPort(const QPointF &scene_position, bool output) const;
- LogicPoint nextNodePosition() const;
- void reportFailure(const LogicEditorResult &result);
-
- LogicEditorService &editor_service_;
- QGraphicsScene *scene_ = nullptr;
- std::string logic_id_;
- bool editing_enabled_ = true;
- std::string connecting_from_node_id_;
- QGraphicsPathItem *preview_item_ = nullptr;
- };
|