plugins/score-lib-process/Control/Layout.hpp
1 #pragma once
2 #include <Process/Dataflow/PortFactory.hpp>
3 #include <Process/LayerPresenter.hpp>
4 #include <Process/LayerView.hpp>
5 
6 #include <score/graphics/GraphicsLayout.hpp>
7 #include <score/model/Skin.hpp>
8 namespace Process
9 {
10 struct SCORE_LIB_PROCESS_EXPORT LayoutBuilderBase
11 {
12  QObject& context;
13  const Process::Context& doc;
14  const Process::PortFactoryList& portFactory;
15 
16  const Process::Inlets& inlets;
17  const Process::Outlets& outlets;
18 
19  score::GraphicsLayout* layout{}; // The current container
20  std::vector<score::GraphicsLayout*> createdLayouts{};
21 
22  QGraphicsItem* makePort(Process::ControlInlet& portModel);
23  QGraphicsItem* makePort(Process::ControlOutlet& portModel);
24 
25  std::pair<Process::ControlInlet*, QGraphicsItem*> makeInlet(int index);
26  std::pair<Process::ControlOutlet*, QGraphicsItem*> makeOutlet(int index);
27  QGraphicsItem* makeLabel(std::string_view item);
28 
29  void finalizeLayout(QGraphicsItem* rootItem);
30 
31  template <typename T>
32  score::BrushSet& get_brush(T cur)
33  {
34  auto& skin = score::Skin::instance();
35  {
36  if constexpr(requires { T::darker; })
37  if(cur == T::darker)
38  return skin.Background2.darker300;
39  }
40  {
41  if constexpr(requires { T::dark; })
42  if(cur == T::dark)
43  return skin.Background2.darker;
44  }
45  {
46  if constexpr(requires { T::mid; })
47  if(cur == T::mid)
48  return skin.Background2.main;
49  }
50  {
51  if constexpr(requires { T::light; })
52  if(cur == T::light)
53  return skin.Background2.lighter;
54  }
55  {
56  if constexpr(requires { T::lighter; })
57  if(cur == T::lighter)
58  return skin.Background2.lighter180;
59  }
60  return skin.Background2.main;
61  }
62 
63  template <typename Item>
64  void setupLayout(const Item& it, score::GraphicsLayout& item)
65  {
66  if constexpr(requires { Item::background(); })
67  {
68  if constexpr(requires { std::string_view{Item::background()}; })
69  item.setBackground(Item::background());
70  else
71  item.setBrush(get_brush(Item::background()));
72  }
73 
74  if constexpr(
75  requires { Item::width(); } && requires { Item::height(); })
76  {
77  item.setRect({0., 0., (qreal)Item::width(), (qreal)Item::height()});
78  }
79  else if constexpr(
80  requires { Item::width; } && requires { Item::height; })
81  {
82  item.setRect({0., 0., (qreal)it.width, (qreal)it.height});
83  }
84  }
85 
86  template <typename Item>
87  void setupItem(const Item& it, QGraphicsItem& item)
88  {
89  item.setParentItem(layout);
90  if constexpr(
91  requires { Item::x(); } && requires { Item::y(); })
92  {
93  item.setPos(Item::x(), Item::y());
94  }
95  else if constexpr(
96  requires { Item::x; } && requires { Item::y; })
97  {
98  item.setPos(it.x, it.y);
99  }
100 
101  if constexpr(requires { Item::scale(); })
102  {
103  item.setScale(Item::scale());
104  }
105  else if constexpr(requires { Item::scale; })
106  {
107  item.setScale(it.scale);
108  }
109  }
110 };
111 
112 }
Definition: score-lib-process/Process/Dataflow/Port.hpp:202
Definition: score-lib-process/Process/Dataflow/Port.hpp:415
Definition: PortFactory.hpp:65
Definition: GraphicsLayout.hpp:10
Base classes and tools to implement processes and layers.
Definition: JSONVisitor.hpp:1324
Definition: ProcessContext.hpp:12
Definition: PortForward.hpp:23
Definition: plugins/score-lib-process/Control/Layout.hpp:11
Definition: PortForward.hpp:27
Definition: Skin.hpp:19