Loading...
Searching...
No Matches
DefaultEffectItem.hpp
1#pragma once
2#include <Process/Dataflow/PortVisibility.hpp>
3
4#include <ossia/detail/small_vector.hpp>
5#include <score/graphics/RectItem.hpp>
6#include <score/model/Identifier.hpp>
7
8#include <score_lib_process_export.h>
9
10#include <vector>
11namespace score
12{
13class GraphicsLayout;
14}
15namespace Dataflow
16{
17class PortItem;
18}
19namespace Process
20{
21class ProcessModel;
22class PortFactoryList;
23struct Context;
24class ControlInlet;
25class ControlOutlet;
26class Inlet;
27class Outlet;
28class Port;
29struct ControlLayout;
30struct LayoutBuilderBase;
31
32class SCORE_LIB_PROCESS_EXPORT DefaultEffectItem final : public score::EmptyRectItem
33{
34public:
36 bool onlyShowUndisplayedPorts, const Process::ProcessModel& effect,
37 const Process::Context& doc, QGraphicsItem* root);
39
40 void
41 setupInlet(Process::ControlInlet& inlet, const Process::PortFactoryList& portFactory);
42 void setupOutlet(
43 Process::ControlOutlet& inlet, const Process::PortFactoryList& portFactory);
44
45private:
46 template <typename T>
47 void setupPort(T& port, const Process::PortFactoryList& portFactory);
48
49 void reset();
50 void recreate();
51 void recreate_onlyInlets();
52 void recreate_onlyOutlets();
53 void recreate_both();
54 void updateRect();
55 void updateMinimumWidth();
56 void relayout();
57
58 struct PortsToDisplay
59 {
62 std::vector<Process::Inlet*> inlets;
63 std::vector<Process::Outlet*> outlets;
65 int leadingInlets{};
66 };
67
70 PortsToDisplay computeDisplayedPorts() const;
71
73 void updateDisplayedPorts();
74
75 void onPortWiringChanged();
76
78 template <typename Port_T>
79 Process::ControlLayout makeItem(Process::LayoutBuilderBase& b, Port_T& port);
80
81 void createPager();
82 void setPage(int page);
83
84 score::GraphicsLayout* m_layout{};
85 ossia::small_vector<score::GraphicsLayout*, 4> m_allLayouts;
86 const Process::ProcessModel& m_effect;
87 const Process::Context& m_ctx;
88
91 std::vector<Process::Inlet*> m_shownInlets;
92 std::vector<Process::Outlet*> m_shownOutlets;
93 int m_leadingInlets{};
94
95 score::EmptyRectItem* m_pager{};
96 Process::ControlPage m_controlPage;
97 int m_page{};
98
99 bool m_onlyUndisplayed{};
100 bool m_needRecreate{};
101 bool m_wiringCheckPending{};
102};
103}
Definition Port.hpp:247
Definition Port.hpp:481
Definition DefaultEffectItem.hpp:33
Definition PortFactory.hpp:121
The Process class.
Definition score-lib-process/Process/Process.hpp:82
Definition RectItem.hpp:78
Definition GraphicsLayout.hpp:8
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
Base toolkit upon which the software is built.
Definition Application.cpp:83
Definition ProcessContext.hpp:12
Definition PortFactory.hpp:54
Which slice of a node's controls is currently displayed.
Definition PortVisibility.hpp:33
Definition plugins/score-lib-process/Control/Layout.hpp:16