Loading...
Searching...
No Matches
NodeItem.hpp
1#pragma once
2#include <Process/TimeValue.hpp>
3#include <Process/ZoomHelper.hpp>
4
5#include <score/command/Dispatchers/MultiOngoingCommandDispatcher.hpp>
6#include <score/model/Identifier.hpp>
7#include <score/widgets/MimeData.hpp>
8
9#include <QGraphicsItem>
10#include <QObject>
11#include <QPointer>
12
13#include <score_lib_process_export.h>
14
15#include <functional>
16
17#include <verdigris>
18namespace score
19{
20struct DocumentContext;
21struct Dispatcher;
22class SimpleTextItem;
23class ResizeableItem;
24class QGraphicsPixmapToggle;
25}
26namespace Dataflow
27{
28class PortItem;
29class CableItem;
30}
31namespace Process
32{
33class Cable;
34class ProcessModel;
35class LayerPresenter;
36struct LayerContext;
37struct Context;
38}
39
40namespace Process
41{
42class TitleItem;
43class SCORE_LIB_PROCESS_EXPORT NodeItem
44 : public QObject
45 , public QGraphicsItem
46{
47 W_OBJECT(NodeItem)
48 Q_INTERFACES(QGraphicsItem)
49public:
51 const Process::ProcessModel& model, const Process::Context& ctx, TimeVal parentDur,
52 QGraphicsItem* parent);
53 const Id<Process::ProcessModel>& id() const noexcept;
54 ~NodeItem();
55
56 void setParentDuration(TimeVal r);
57 void setPlayPercentage(float f, TimeVal parent_dur);
58
59 qreal width() const noexcept;
60 qreal height() const;
61
62 const Process::ProcessModel& model() const noexcept;
63
64 void dropReceived(const QPointF& pos, const QMimeData& arg_2)
65 E_SIGNAL(SCORE_LIB_PROCESS_EXPORT, dropReceived, pos, arg_2)
66
67
69 void geometryChanged() E_SIGNAL(SCORE_LIB_PROCESS_EXPORT, geometryChanged)
70
71 void resetDrop()
72 {
73 m_dropping = false;
74 update();
75 }
76
79 std::function<void(
82
85 std::function<bool(const Process::ProcessModel&, const Process::Cable&)>
87
88 static const constexpr int Type = QGraphicsItem::UserType + 5000;
89 int type() const override { return Type; }
90
91private:
92 void initConnections();
93 void createWithDecorations();
94 void createContentItem();
95 void createFoldedItem();
96 void applyFold(bool folded);
97 void setupItem(score::ResizeableItem* resizeable);
98 void updateTooltip();
99
100 void createWithoutDecorations();
101
102 void updateZoomRatio() const noexcept;
103 void updateSize();
104 void setSize(QSizeF sz);
105 void publishSize();
106
107 bool isInSelectionCorner(QPointF f, QRectF r) const;
108 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
109 override;
110
111 void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
112 void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
113 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
114 bool sceneEvent(QEvent* event) override;
115 void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override;
116
117 void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override;
118 void hoverMoveEvent(QGraphicsSceneHoverEvent* event) override;
119 void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override;
120
121 void dragEnterEvent(QGraphicsSceneDragDropEvent* event) override;
122 void dragMoveEvent(QGraphicsSceneDragDropEvent* event) override;
123 void dragLeaveEvent(QGraphicsSceneDragDropEvent* event) override;
124 void dropEvent(QGraphicsSceneDragDropEvent* event) override;
125
126 void keyPressEvent(QKeyEvent* event) override;
127 void keyReleaseEvent(QKeyEvent* event) override;
128
129 void resetItem();
130 void resetInlets();
131 void resetOutlets();
132 void updateLabel();
133 void resizeAsync();
134 void recreate();
135
136 QSizeF size() const noexcept;
137
138 void setSelected(bool s);
139
140 void updateTitlePos();
141 QRectF boundingRect() const final override;
142
143public:
145 QRectF contentRect() const noexcept;
146
147private:
148 void updateContentRect();
149
150 void updateDropCableHighlight();
151 void clearDropCableHighlight();
152
153 double minimalContentWidth() const noexcept;
154 double minimalContentHeight() const noexcept;
155 static void paintNode(QPainter* painter, bool selected, bool hovered, QRectF rect);
156
157 // Title
158 QGraphicsItem* m_scriptButton{};
159 QGraphicsItem* m_uiButton{};
160 QGraphicsItem* m_presetButton{};
161 score::SimpleTextItem* m_label{};
162
163 QSizeF m_contentSize{};
164 QRectF m_contentRect{};
165
166 const Process::ProcessModel& m_model;
167
168 // Body
169 QGraphicsItem* m_fx{};
171 Process::LayerPresenter* m_presenter{};
172
173 std::vector<Dataflow::PortItem*> m_inlets, m_outlets;
174 const Process::Context& m_context;
175 QPointer<Dataflow::CableItem> m_dropCable{};
177
178 TimeVal m_parentDuration{1};
179 double m_playPercentage{};
180
181 bool m_hover : 1 {false};
182 bool m_selected : 1 {false};
183 bool m_dropping : 1 {};
184 bool m_needResize : 1 {};
185 bool m_folded : 1 {};
186};
187}
The MultiOngoingCommandDispatcher class.
Definition MultiOngoingCommandDispatcher.hpp:37
Definition Cable.hpp:38
Definition LayerPresenter.hpp:34
Definition NodeItem.hpp:46
std::function< bool(const Process::ProcessModel &, const Process::Cable &)> canDropOnCableHandler
Definition NodeItem.hpp:86
std::function< void(const Process::ProcessModel &, const Process::Cable &, score::Dispatcher &)> dropOnCableHandler
Definition NodeItem.hpp:81
The Process class.
Definition score-lib-process/Process/Process.hpp:80
The id_base_t class.
Definition Identifier.hpp:59
Definition QGraphicsPixmapToggle.hpp:18
Definition RectItem.hpp:12
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:83
Definition ProcessContext.hpp:12
Definition TimeValue.hpp:21
Definition RuntimeDispatcher.hpp:7