Loading...
Searching...
No Matches
CableItem.hpp
1#pragma once
2#include <Process/Dataflow/Cable.hpp>
3#include <Process/Dataflow/Port.hpp>
4
5#include <score/widgets/MimeData.hpp>
6
7#include <ossia/detail/ptr_set.hpp>
8
9#include <QGraphicsItem>
10#include <QObject>
11
12#include <verdigris>
13namespace Dataflow
14{
15class CableItem;
16}
17
18namespace Process
19{
20struct Context;
21struct Style;
22}
23namespace Dataflow
24{
25enum CableDisplayMode : uint8_t
26{
27 None,
28 Partial_P1,
29 Partial_P2,
30 Full
31};
32
33class PortItem;
34class SCORE_LIB_PROCESS_EXPORT CableItem final
35 : public QObject
36 , public QGraphicsItem
37{
38 W_OBJECT(CableItem)
39 Q_INTERFACES(QGraphicsItem)
40
41public:
42 static bool g_cables_enabled;
44 const Process::Cable& c, const Process::Context& ctx,
45 QGraphicsItem* parent = nullptr);
46 ~CableItem() override;
47 const Id<Process::Cable>& id() const { return m_cable.id(); }
48 const Process::Cable& model() const { return m_cable; }
49
50 static const constexpr int Type = QGraphicsItem::UserType + 9999;
51 int type() const final override { return Type; }
52
53 enum class GrabbedEnd : uint8_t
54 {
55 None,
56 Source,
57 Sink
58 };
59
63 static GrabbedEnd endNear(QPointF scenePos, QPointF p1, QPointF p2) noexcept;
64
68 static double grabZoneRadius(QPointF p1, QPointF p2) noexcept;
69
70 void resize();
71 void check();
72 PortItem* source() const noexcept;
73 PortItem* target() const noexcept;
74 void setSource(PortItem* p);
75 void setTarget(PortItem* p);
76 void resetDrop()
77 {
78 m_dropping = false;
79 update();
80 }
81
83 void setDropTarget(bool b)
84 {
85 if(m_dropping == b)
86 return;
87 m_dropping = b;
88 update();
89 }
90
91 void dropReceived(const QPointF& pos, const QMimeData& arg_2)
92 E_SIGNAL(SCORE_LIB_PROCESS_EXPORT, dropReceived, pos, arg_2)
93
94private:
95 QRectF boundingRect() const override;
96 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
97 override;
98 QPainterPath shape() const override;
99 QPainterPath opaqueArea() const override;
100 bool contains(const QPointF& point) const override;
101 void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
102 void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
103 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
104 void hoverMoveEvent(QGraphicsSceneHoverEvent* event) override;
105 void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override;
106 void dragEnterEvent(QGraphicsSceneDragDropEvent* event) override;
107 void dragLeaveEvent(QGraphicsSceneDragDropEvent* event) override;
108 void dropEvent(QGraphicsSceneDragDropEvent* event) override;
109 void keyPressEvent(QKeyEvent* event) override;
110 void keyReleaseEvent(QKeyEvent* event) override;
111
112 void setPen(QPainter& painter, const Process::Style& style);
113 void updateStroke() const;
114 const Process::Cable& m_cable;
115 const Process::Context& m_context;
116 QPointer<PortItem> m_p1, m_p2;
117 QPainterPath m_path;
118 mutable QPainterPath m_stroke;
119 Process::PortType m_type : 4 {};
120 bool m_dropping : 1 {};
121 CableDisplayMode m_mode : 2 {CableDisplayMode::None};
122};
123}
Definition CableItem.hpp:37
void setDropTarget(bool b)
Highlight this cable as the one a node being dragged would land in.
Definition CableItem.hpp:83
Definition score-lib-process/Process/Dataflow/PortItem.hpp:46
Definition Cable.hpp:38
The id_base_t class.
Definition Identifier.hpp:59
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
Definition ProcessContext.hpp:12
Definition ScenarioStyle.hpp:13