Loading...
Searching...
No Matches
score-plugin-vst3/Vst3/Library.hpp
1#pragma once
2#include <Library/LibraryInterface.hpp>
3#include <Library/ProcessesItemModel.hpp>
4#include <Vst3/ApplicationPlugin.hpp>
5#include <Vst3/EffectModel.hpp>
6
7#include <score/tools/Bind.hpp>
8
9namespace vst3
10{
11class LibraryHandler final
12 : public QObject
14{
15 SCORE_CONCRETE("1d6ca523-628b-431a-9f70-87df92a63551")
16
17 void registerVSTClass(
18 Library::ProcessNode& parent, const AvailablePlugin& vst,
19 const VST3::Hosting::ClassInfo& cls)
20 {
21 constexpr static const auto key = Metadata<ConcreteKey_k, Model>::get();
22
23 auto name = QString::fromStdString(cls.name());
24 auto uid = QString::fromStdString(cls.ID().toString());
25
26 Library::ProcessData classdata{{key, name, uid}, {}};
27 if(vst.classInfo.size() == 1)
28 parent.customData = uid;
29 Library::addToLibrary(parent, std::move(classdata));
30 }
31
33 override
34 {
35 constexpr static const auto key = Metadata<ConcreteKey_k, Model>::get();
36
37 QModelIndex node = model.find(key);
38 if(node == QModelIndex{})
39 {
40 return;
41 }
42 auto& parent = *reinterpret_cast<Library::ProcessNode*>(node.internalPointer());
43 parent.key = {};
44
46
47 auto reset_plugs = [this, &plug, &parent] {
48 for(const auto& vst : plug.vst_infos)
49 {
50 if(vst.isValid)
51 {
52 Library::ProcessData parent_data{{key, vst.name, QString{}}, {}};
53
54 const int numClasses = vst.classInfo.size();
55 switch(numClasses)
56 {
57 default: {
58 auto& node = Library::addToLibrary(parent, std::move(parent_data));
59
60 for(const auto& cls : vst.classInfo)
61 {
62 registerVSTClass(node, vst, cls);
63 }
64 break;
65 }
66 case 1: {
67 registerVSTClass(parent, vst, vst.classInfo[0]);
68 break;
69 }
70 case 0:
71 break;
72 }
73 }
74 }
75 };
76
77 reset_plugs();
78
79 con(plug, &vst3::ApplicationPlugin::vstChanged, this,
80 [&plug, &model, node, &parent, reset_plugs] {
81 if(parent.childCount() > 0)
82 {
83 model.beginRemoveRows(node, 0, parent.childCount() - 1);
84 parent.resize(0);
85 model.endRemoveRows();
86 }
87
88 int k = 0;
89 for(const auto& vst : plug.vst_infos)
90 if(vst.isValid)
91 k++;
92 if(k > 0)
93 {
94 model.beginInsertRows(node, 0, k - 1);
95 reset_plugs();
96 model.endInsertRows();
97 }
98 });
99 }
100};
101}
Definition LibraryInterface.hpp:22
Definition ProcessesItemModel.hpp:43
Definition score-plugin-vst3/Vst3/ApplicationPlugin.hpp:87
Definition score-plugin-vst3/Vst3/Library.hpp:14
Definition ProcessesItemModel.hpp:32
Static metadata implementation.
Definition lib/score/tools/Metadata.hpp:36
Specializes ApplicationContext with the QMainWindow.
Definition GUIApplicationContext.hpp:15
T & applicationPlugin() const
Access a specific application plug-in instance.
Definition GUIApplicationContext.hpp:69
Definition score-plugin-vst3/Vst3/ApplicationPlugin.hpp:22