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 <QPointer>
9#include <QRectF>
10
11#include <score_plugin_scenario_export.h>
12
13class QGraphicsRectItem;
14
15#include <nano_observer.hpp>
16
17namespace Scenario
18{
19class IntervalModel;
20class SCORE_PLUGIN_SCENARIO_TEST_EXPORT NodalIntervalView final
22 , public Nano::Observer
23{
24 W_OBJECT(NodalIntervalView)
25public:
26 enum ItemsToShow
27 {
28 AllItems,
29 OnlyEffects
30 };
32 ItemsToShow sh, const IntervalModel& model, const Process::Context& ctx,
33 QGraphicsItem* parent);
34
36
37 void on_drop(QPointF pos, const QMimeData* data);
38 void on_playPercentageChanged(double t, TimeVal parent_dur);
39
41 void recenter();
50 void recenterRelativeToView();
52 void panBy(QPointF delta);
53 void rescale();
54 void zoomPlus();
55 void zoomMinus();
56 void zoomTo(double newZoomLevel);
60 void reveal(const Process::NodeItem& item);
61 QRectF enclosingRect() const noexcept;
62
63 QGraphicsItem& nodeContainer() const noexcept { return *m_container; }
67 double zoom() const noexcept { return m_container->transform().m11(); }
68 const IntervalModel& model() const noexcept { return m_model; }
69
72 QPointF pastePosition(QPointF scenePos) const;
73 int type() const override { return ItemType::Type::NodalIntervalView; }
74
77 void openProcessPicker(QPointF nodePos);
78
79private:
80 void setZoom(double z);
81 void setupNode(Process::NodeItem* item);
84 void showNode(const Process::NodeItem& item);
86 void updateSelectionRectStyle();
87 void on_processAdded(const Process::ProcessModel& proc);
88 void on_processRemoving(const Process::ProcessModel& model);
89 void on_zoomRatioChanged(ZoomRatio ratio);
90 void on_dropOnNode(const QPointF& pt, const QMimeData& mime);
91
93 QRectF visibleRect() const;
97 QPointF viewportCenter() const;
100 void pickInitialViewport();
102 void placeContainer(QPointF center);
104 void storeCenterFromContainer();
105
106 void dragEnterEvent(QGraphicsSceneDragDropEvent* event) override;
107 void dragLeaveEvent(QGraphicsSceneDragDropEvent* event) override;
108 void dragMoveEvent(QGraphicsSceneDragDropEvent* event) override;
109 void dropEvent(QGraphicsSceneDragDropEvent* event) override;
110
111 void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
112 void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
113 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
114 void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) override;
115 void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override;
116 void wheelEvent(QGraphicsSceneWheelEvent* event) override;
117
118 const IntervalModel& m_model;
119 const Process::Context& m_context;
120 ItemsToShow m_itemsToShow{};
121 std::vector<Process::NodeItem*> m_nodeItems;
122 QGraphicsItem* m_container{};
123 QGraphicsRectItem* m_selectionRect{};
124 QPointF m_pressedPos{};
125 double m_zoomLevel = 0;
126
127 QPointF m_rubberBandOrigin{};
128 QRectF m_rubberBandRect{};
129 bool m_rubberBanding{false};
133 bool m_autoCenter{false};
136 QPointer<Process::NodeItem> m_nodeToShow;
139 bool m_dropping{false};
140};
141
148SCORE_PLUGIN_SCENARIO_EXPORT bool revealInNodalView(const QGraphicsItem& item);
149}
Definition NodeItem.hpp:47
The Process class.
Definition score-lib-process/Process/Process.hpp:82
Definition IntervalModel.hpp:50
Definition NodalIntervalView.hpp:23
double zoom() const noexcept
Definition NodalIntervalView.hpp:67
Definition RectItem.hpp:78
Main plug-in of score.
Definition ConnectionsList.hpp:22
bool revealInNodalView(const QGraphicsItem &item)
Brings an item of a nodal view (a node, a port...) into the visible part of that view (NodalIntervalV...
Definition NodalIntervalView.cpp:387
Definition ProcessContext.hpp:12
Definition TimeValue.hpp:21