Loading...
Searching...
No Matches
score-lib-process/Process/Dataflow/PortItem.hpp
1#pragma once
2#include <QGraphicsItem>
3#include <QObject>
4
5#include <functional>
6#include <verdigris>
7#if defined(_MSC_VER)
8#include <Process/Dataflow/Port.hpp>
9#endif
10#include <Process/Dataflow/PortType.hpp>
11
12#include <ossia/detail/ptr_set.hpp>
13
14#include <score_lib_process_export.h>
15namespace Process
16{
17class ProcessModel;
18class Port;
19class Inlet;
20class Outlet;
21class ControlInlet;
22struct Context;
23}
24namespace score
25{
26struct Brush;
27struct DocumentContext;
28class Command;
29class SimpleTextItem;
30}
31namespace Dataflow
32{
33class PortItem;
34class CableItem;
35struct DragMoveFilter;
36class SCORE_LIB_PROCESS_EXPORT PortItem
37 : public QObject
38 , public QGraphicsItem
39{
40 W_OBJECT(PortItem)
41 Q_INTERFACES(QGraphicsItem)
42public:
43 PortItem(const Process::Port& p, const Process::Context& ctx, QGraphicsItem* parent);
44 ~PortItem() override;
45 const Process::Port& port() const { return m_port; }
46
47 static PortItem* clickedPort;
48
49 virtual void setupMenu(QMenu&, const score::DocumentContext& ctx);
50 void setPortVisible(bool b);
51 void resetPortVisible();
52
53 void setHighlight(bool b);
54
55 using QGraphicsItem::dropEvent;
56 static const constexpr int Type = QGraphicsItem::UserType + 700;
57 int type() const final override { return Type; }
58
59 void createCable(PortItem* src, PortItem* snk)
60 E_SIGNAL(SCORE_LIB_PROCESS_EXPORT, createCable, src, snk)
61 void contextMenuRequested(QPointF scenepos, QPoint pos)
62 E_SIGNAL(SCORE_LIB_PROCESS_EXPORT, contextMenuRequested, scenepos, pos)
63
64protected:
65 QRectF boundingRect() const override;
66 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
67 override;
68
69 void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
70 void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
71 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
72 void hoverEnterEvent(QGraphicsSceneHoverEvent* event) final override;
73 void hoverMoveEvent(QGraphicsSceneHoverEvent* event) final override;
74 void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) final override;
75
76 void dragEnterEvent(QGraphicsSceneDragDropEvent* event) final override;
77 void dragMoveEvent(QGraphicsSceneDragDropEvent* event) final override;
78 void dragLeaveEvent(QGraphicsSceneDragDropEvent* event) final override;
79
80 void keyPressEvent(QKeyEvent* event) override;
81 void keyReleaseEvent(QKeyEvent* event) override;
82
83 QVariant itemChange(GraphicsItemChange change, const QVariant& value) override;
84
85 const Process::Context& m_context;
86 std::vector<QPointer<CableItem>> cables;
87 const Process::Port& m_port;
88
89public:
90 double m_diam = 8.;
91
92 bool m_visible{true};
93 bool m_inlet{true};
94 bool m_highlight{true};
95
96 friend class Dataflow::CableItem;
97
98 static const QPixmap&
99 portImage(Process::PortType t, bool inlet, bool smol, bool light, bool addr) noexcept;
100};
101
102SCORE_LIB_PROCESS_EXPORT
103score::SimpleTextItem* makePortLabel(const Process::Port& port, QGraphicsItem* parent);
104
105ossia::small_vector<const Process::Port*, 16>
106getProcessPorts(const Process::ProcessModel& proc);
107}
108
109namespace score
110{
111namespace mime
112{
113inline const constexpr char* port()
114{
115 return "application/x-score-port";
116}
117}
118}
119
120W_REGISTER_ARGTYPE(Dataflow::PortItem*)
Definition CableItem.hpp:26
Definition score-lib-process/Process/Dataflow/PortItem.hpp:39
Definition Port.hpp:102
The Process class.
Definition score-lib-process/Process/Process.hpp:61
Definition TextItem.hpp:28
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
Base toolkit upon which the software is built.
Definition Application.cpp:97
Definition ProcessContext.hpp:12
Definition DocumentContext.hpp:18