Loading...
Searching...
No Matches
NodalIntervalView.hpp
1#pragma once
2#include <Process/Dataflow/NodeItem.hpp>
3
4#include <Scenario/Document/ScenarioDocument/ScenarioDocumentViewConstants.hpp>
5
6#include <score/graphics/RectItem.hpp>
7
8#include <QRectF>
9
10#include <score_plugin_scenario_export.h>
11
12class QGraphicsRectItem;
13
14#include <nano_observer.hpp>
15
16namespace Scenario
17{
18class IntervalModel;
19class SCORE_PLUGIN_SCENARIO_EXPORT NodalIntervalView final
21 , public Nano::Observer
22{
23 W_OBJECT(NodalIntervalView)
24public:
25 enum ItemsToShow
26 {
27 AllItems,
28 OnlyEffects
29 };
31 ItemsToShow sh, const IntervalModel& model, const Process::Context& ctx,
32 QGraphicsItem* parent);
33
35
36 void on_drop(QPointF pos, const QMimeData* data);
37 void on_playPercentageChanged(double t, TimeVal parent_dur);
38
40 void recenter();
49 void recenterRelativeToView();
51 void panBy(QPointF delta);
52 void rescale();
53 void zoomPlus();
54 void zoomMinus();
55 void zoomTo(double newZoomLevel);
56 QRectF enclosingRect() const noexcept;
57
58 QGraphicsItem& nodeContainer() const noexcept { return *m_container; }
59 int type() const override { return ItemType::Type::NodalIntervalView; }
60
61private:
62 void on_processAdded(const Process::ProcessModel& proc);
63 void on_processRemoving(const Process::ProcessModel& model);
64 void on_zoomRatioChanged(ZoomRatio ratio);
65 void on_dropOnNode(const QPointF& pt, const QMimeData& mime);
66
68 QPointF viewportCenter() const;
71 void pickInitialViewport();
73 void placeContainer(QPointF center);
75 void storeCenterFromContainer();
76
77 void dragEnterEvent(QGraphicsSceneDragDropEvent* event) override;
78 void dragLeaveEvent(QGraphicsSceneDragDropEvent* event) override;
79 void dragMoveEvent(QGraphicsSceneDragDropEvent* event) override;
80 void dropEvent(QGraphicsSceneDragDropEvent* event) override;
81
82 void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
83 void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
84 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
85 void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override;
86 void wheelEvent(QGraphicsSceneWheelEvent* event) override;
87
88 const IntervalModel& m_model;
89 const Process::Context& m_context;
90 ItemsToShow m_itemsToShow{};
91 std::vector<Process::NodeItem*> m_nodeItems;
92 QGraphicsItem* m_container{};
93 QGraphicsRectItem* m_selectionRect{};
94 QPointF m_pressedPos{};
95 double m_zoomLevel = 0;
96
97 QPointF m_rubberBandOrigin{};
98 QRectF m_rubberBandRect{};
99 bool m_rubberBanding{false};
100};
101
102}
The Process class.
Definition score-lib-process/Process/Process.hpp:75
Definition IntervalModel.hpp:50
Definition NodalIntervalView.hpp:22
Definition RectItem.hpp:78
Main plug-in of score.
Definition score-plugin-dataflow/Dataflow/PortItem.hpp:13
Definition ProcessContext.hpp:12
Definition TimeValue.hpp:21