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