score-plugin-ysfx/YSFX/ProcessModel.hpp
1 #pragma once
2 #include <Process/Process.hpp>
3 
4 #include <Control/DefaultEffectItem.hpp>
5 #include <Effect/EffectFactory.hpp>
6 #include <YSFX/ProcessMetadata.hpp>
7 #include <ysfx.h>
8 
9 #include <score/widgets/PluginWindow.hpp>
10 
11 #include <score_plugin_ysfx_export.h>
12 
13 #include <memory>
14 #include <verdigris>
15 
16 namespace YSFX
17 {
18 class ProcessModel;
19 class SCORE_PLUGIN_YSFX_EXPORT ProcessModel final : public Process::ProcessModel
20 {
21  SCORE_SERIALIZE_FRIENDS
22  PROCESS_METADATA_IMPL(YSFX::ProcessModel)
23  W_OBJECT(ProcessModel)
24 public:
25  bool hasExternalUI() const noexcept;
26 
27  explicit ProcessModel(
28  const TimeVal& duration, const QString& data, const Id<Process::ProcessModel>& id,
29  QObject* parent);
30 
31  template <typename Impl>
32  explicit ProcessModel(Impl& vis, QObject* parent)
33  : Process::ProcessModel{vis, parent}
34  {
35  vis.writeTo(*this);
36  }
37 
38  ~ProcessModel() override;
39 
40  void setScript(const QString& path);
41  QString script() const noexcept;
42 
43  std::shared_ptr<ysfx_t> fx;
44 
45  std::vector<Process::Preset> builtinPresets() const noexcept override;
46 
47 private:
48  void loadPreset(const Process::Preset&) override;
49  ysfx_bank_t* m_bank{};
50  QString m_script;
51 };
52 
54 {
55 public:
56  Window(const ProcessModel& e, const score::DocumentContext& ctx, QWidget* parent);
57  ~Window();
58 
59  const ProcessModel& m_model;
60 
61  std::shared_ptr<ysfx_t> fx;
62  ysfx_gfx_config_t conf{};
63 
64 private:
65  QImage m_frame;
66  void resizeEvent(QResizeEvent* event) override;
67  void closeEvent(QCloseEvent* event) override;
68 
69  void mousePressEvent(QMouseEvent* event) override;
70  void mouseReleaseEvent(QMouseEvent* event) override;
71  void mouseMoveEvent(QMouseEvent* event) override;
72  void wheelEvent(QWheelEvent* event) override;
73  void keyPressEvent(QKeyEvent* event) override;
74  void keyReleaseEvent(QKeyEvent* event) override;
75  void paintEvent(QPaintEvent* event) override;
76  void refreshTimer();
77 };
78 
79 using LayerFactory
81 
82 }
Definition: EffectFactory.hpp:66
The Process class.
Definition: score-lib-process/Process/Process.hpp:61
Definition: score-plugin-ysfx/YSFX/ProcessModel.hpp:20
Definition: score-plugin-ysfx/YSFX/ProcessModel.hpp:54
The id_base_t class.
Definition: Identifier.hpp:57
Definition: PluginWindow.hpp:9
Definition: Preset.hpp:32
Definition: TimeValue.hpp:21
Definition: DocumentContext.hpp:18