score-plugin-vst3/Vst3/Widgets.hpp
1 #pragma once
2 #include <Process/Style/ScenarioStyle.hpp>
3 
4 #include <Control/Widgets.hpp>
5 #include <Vst3/EffectModel.hpp>
6 
7 #include <score/graphics/GraphicWidgets.hpp>
8 #include <score/graphics/TextItem.hpp>
9 
10 #include <QDialog>
11 
12 #include <verdigris>
13 
14 namespace vst3
15 {
16 class VSTEffectItem final : public score::EmptyRectItem
17 {
18  QGraphicsItem* rootItem{};
19  std::vector<std::pair<ControlInlet*, score::EmptyRectItem*>> controlItems;
20 
21 public:
22  VSTEffectItem(const Model& effect, const Process::Context& doc, QGraphicsItem* root);
23 
24  void setupInlet(const Model& fx, ControlInlet& inlet, const Process::Context& doc);
25 
26 private:
27  void updateRect();
28 };
29 
30 class VSTGraphicsSlider final
31  : public QObject
32  , public score::QGraphicsSliderBase<VSTGraphicsSlider>
33 {
34  W_OBJECT(VSTGraphicsSlider)
35  Q_INTERFACES(QGraphicsItem)
36  friend struct QGraphicsSliderBase<VSTGraphicsSlider>;
37 
38  double m_value{};
39  double m_execValue{};
40  Steinberg::Vst::IEditController* fx{};
41  Steinberg::Vst::ParamID num{};
42 
43 private:
44  bool m_grab{};
45  bool m_hasExec{};
46 
47 public:
48  static const constexpr double min = 0.;
49  static const constexpr double max = 1.;
52  Steinberg::Vst::IEditController* fx, Steinberg::Vst::ParamID num,
53  QGraphicsItem* parent);
54 
55  static double from01(double v) { return v; }
56  static double map(double v) { return v; }
57  static double unmap(double v) { return v; }
58 
59  void setValue(double v);
60  double value() const;
61  void setExecutionValue(double v);
62  void resetExecution();
63 
64  bool moving = false;
65 
66 public:
67  void valueChanged(double arg_1) W_SIGNAL(valueChanged, arg_1);
68  void sliderMoved() W_SIGNAL(sliderMoved);
69  void sliderReleased() W_SIGNAL(sliderReleased);
70 
71 private:
72  void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
73  void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
74  void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
75  void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) override;
76  void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
77  override;
78 };
79 
80 struct VSTFloatSlider : ossia::safe_nodes::control_in
81 {
82  static QWidget* make_widget(
83  Steinberg::Vst::IEditController* fx, const ControlInlet& inlet,
84  const score::DocumentContext& ctx, QWidget* parent, QObject* context);
85  static QGraphicsItem* make_item(
86  Steinberg::Vst::IEditController* fx, ControlInlet& inlet,
87  const score::DocumentContext& ctx, QGraphicsItem* parent, QObject* context);
88 };
89 
90 }
Definition: RectItem.hpp:64
Definition: /Vst3/Control.hpp:15
Definition: score-plugin-vst3/Vst3/EffectModel.hpp:40
Definition: score-plugin-vst3/Vst3/Widgets.hpp:17
Definition: score-plugin-vst3/Vst3/Widgets.hpp:33
Definition: ProcessContext.hpp:12
Definition: DefaultGraphicsSliderImpl.hpp:29
Definition: DocumentContext.hpp:18
Definition: QGraphicsSliderBase.hpp:17
Definition: score-plugin-vst3/Vst3/Widgets.hpp:81