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