综合平台编程器项目的远程存储
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

65 строки
1.8 KiB

  1. #pragma once
  2. #include "domain/control_logic_model.h"
  3. #include <QGraphicsView>
  4. #include <string>
  5. class LogicEditorService;
  6. struct LogicEditorResult;
  7. class QGraphicsPathItem;
  8. class QGraphicsScene;
  9. class QMouseEvent;
  10. class QResizeEvent;
  11. class LogicEditorWidget final : public QGraphicsView
  12. {
  13. Q_OBJECT
  14. public:
  15. explicit LogicEditorWidget(
  16. LogicEditorService &editor_service,
  17. QWidget *parent = nullptr);
  18. void setLogicId(const std::string &logic_id);
  19. void setEditingEnabled(bool enabled);
  20. void reloadLogic();
  21. void selectNode(const std::string &node_id);
  22. std::string selectedNodeId() const;
  23. LogicEditorResult addNode(const LogicNodeConfig &config);
  24. LogicEditorResult deleteSelected();
  25. signals:
  26. void nodeSelected(const QString &node_id);
  27. void nodeChanged(const QString &node_id);
  28. void graphChanged();
  29. void editorError(const QString &message);
  30. protected:
  31. void mousePressEvent(QMouseEvent *event) override;
  32. void mouseMoveEvent(QMouseEvent *event) override;
  33. void mouseReleaseEvent(QMouseEvent *event) override;
  34. void resizeEvent(QResizeEvent *event) override;
  35. private:
  36. class NodeItem;
  37. class ConnectionItem;
  38. void handleSelectionChanged();
  39. void handleNodePositionChanged(const std::string &node_id);
  40. void updateConnections();
  41. void updatePreview(const QPointF &scene_position);
  42. void clearPreview();
  43. NodeItem *nodeAtPort(const QPointF &scene_position, bool output) const;
  44. LogicPoint nextNodePosition() const;
  45. void reportFailure(const LogicEditorResult &result);
  46. LogicEditorService &editor_service_;
  47. QGraphicsScene *scene_ = nullptr;
  48. std::string logic_id_;
  49. bool editing_enabled_ = true;
  50. std::string connecting_from_node_id_;
  51. QGraphicsPathItem *preview_item_ = nullptr;
  52. };