|
- #pragma once
-
- #include "domain/control_logic_model.h"
- #include "services/logic_editor_service.h"
- #include "services/software_logic_executor.h"
-
- #include <QGraphicsView>
-
- #include <string>
- #include <vector>
-
- class QGraphicsScene;
- class QResizeEvent;
-
- class LogicEditorWidget final : public QGraphicsView
- {
- Q_OBJECT
-
- public:
- class NodeItem;
- class RungItem;
-
- explicit LogicEditorWidget(
- LogicEditorService &editor_service,
- QWidget *parent = nullptr);
-
- void setLogicId(const std::string &logic_id);
- void setEditingEnabled(bool enabled);
- void setRuntimeTrace(
- const LogicTraceSnapshot &trace,
- const std::string &fault_node_id = {});
- void clearRuntimeTrace();
- void reloadLogic();
- void selectNode(const std::string &node_id);
- std::string selectedNodeId() const;
- std::vector<std::string> selectedNodeIds() const;
- std::string selectedRungId() const;
-
- LogicEditorResult addRung();
- LogicEditorResult addCondition(const LogicNodeConfig &config);
- LogicEditorResult addParallelBranch(const LogicNodeConfig &config);
- LogicEditorResult setOutput(const LogicNodeConfig &config);
- LogicEditorResult deleteSelected();
-
- signals:
- void nodeSelected(const QString &node_id);
- void graphChanged();
- void editorError(const QString &message);
-
- protected:
- void resizeEvent(QResizeEvent *event) override;
-
- private:
- void handleSelectionChanged();
- void reportFailure(const LogicEditorResult &result);
- std::string currentRungId() const;
-
- LogicEditorService &editor_service_;
- QGraphicsScene *scene_ = nullptr;
- std::string logic_id_;
- std::string current_rung_id_;
- LogicTraceSnapshot trace_;
- std::string fault_node_id_;
- bool runtime_trace_enabled_ = false;
- bool editing_enabled_ = true;
- };
|