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