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 setupItem(score::ResizeableItem* resizeable);
76 void updateTooltip();
77
78 void createWithoutDecorations();
79
80 void updateZoomRatio() const noexcept;
81 void updateSize();
82 void setSize(QSizeF sz);
83
84 bool isInSelectionCorner(QPointF f, QRectF r) const;
85 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
86 override;
87
88 void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
89 void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
90 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
91 void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override;
92
93 void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override;
94 void hoverMoveEvent(QGraphicsSceneHoverEvent* event) override;
95 void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override;
96
97 void dragEnterEvent(QGraphicsSceneDragDropEvent* event) override;
98 void dragMoveEvent(QGraphicsSceneDragDropEvent* event) override;
99 void dragLeaveEvent(QGraphicsSceneDragDropEvent* event) override;
100 void dropEvent(QGraphicsSceneDragDropEvent* event) override;
101
102 void keyPressEvent(QKeyEvent* event) override;
103 void keyReleaseEvent(QKeyEvent* event) override;
104
105 void resetItem();
106 void resetInlets();
107 void resetOutlets();
108 void updateLabel();
109 void resizeAsync();
110 void recreate();
111
112 QSizeF size() const noexcept;
113
114 void setSelected(bool s);
115
116 void updateTitlePos();
117 QRectF boundingRect() const final override;
118 QRectF contentRect() const noexcept;
119 void updateContentRect();
120
121 double minimalContentWidth() const noexcept;
122 double minimalContentHeight() const noexcept;
123 static void paintNode(QPainter* painter, bool selected, bool hovered, QRectF rect);
124
125 // Title
126 QGraphicsItem* m_scriptButton{};
127 QGraphicsItem* m_uiButton{};
128 QGraphicsItem* m_presetButton{};
129 score::SimpleTextItem* m_label{};
130
131 QSizeF m_contentSize{};
132 QRectF m_contentRect{};
133
134 const Process::ProcessModel& m_model;
135
136 // Body
137 QGraphicsItem* m_fx{};
139 Process::LayerPresenter* m_presenter{};
140
141 std::vector<Dataflow::PortItem*> m_inlets, m_outlets;
142 const Process::Context& m_context;
144
145 TimeVal m_parentDuration{1};
146 double m_playPercentage{};
147
148 bool m_hover : 1 {false};
149 bool m_selected : 1 {false};
150 bool m_dropping : 1 {};
151 bool m_needResize : 1 {};
152 bool m_folded : 1 {};
153};
154}
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:62
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:99
Definition ProcessContext.hpp:12
Definition TimeValue.hpp:21