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 void resize();
54 void check();
55 PortItem* source() const noexcept;
56 PortItem* target() const noexcept;
57 void setSource(PortItem* p);
58 void setTarget(PortItem* p);
59 void resetDrop()
60 {
61 m_dropping = false;
62 update();
63 }
64
65 void dropReceived(const QPointF& pos, const QMimeData& arg_2)
66 E_SIGNAL(SCORE_LIB_PROCESS_EXPORT, dropReceived, pos, arg_2)
67
68private:
69 QRectF boundingRect() const override;
70 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
71 override;
72 QPainterPath shape() const override;
73 QPainterPath opaqueArea() const override;
74 bool contains(const QPointF& point) const override;
75 void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
76 void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
77 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
78 void dragEnterEvent(QGraphicsSceneDragDropEvent* event) override;
79 void dragLeaveEvent(QGraphicsSceneDragDropEvent* event) override;
80 void dropEvent(QGraphicsSceneDragDropEvent* event) override;
81 void keyPressEvent(QKeyEvent* event) override;
82 void keyReleaseEvent(QKeyEvent* event) override;
83
84 void setPen(QPainter& painter, const Process::Style& style);
85 void updateStroke() const;
86 const Process::Cable& m_cable;
87 const Process::Context& m_context;
88 QPointer<PortItem> m_p1, m_p2;
89 QPainterPath m_path;
90 mutable QPainterPath m_stroke;
91 Process::PortType m_type : 4 {};
92 bool m_dropping : 1 {};
93 CableDisplayMode m_mode : 2 {CableDisplayMode::None};
94};
95}
Definition CableItem.hpp:37
Definition score-lib-process/Process/Dataflow/PortItem.hpp:39
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