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 static Library::StagedNode stagedVSTClass(const VST3::Hosting::ClassInfo& cls)
18 {
19 constexpr static const auto key = Metadata<ConcreteKey_k, Model>::get();
20
21 auto name = QString::fromStdString(cls.name());
22 auto uid = QString::fromStdString(cls.ID().toString());
23 return Library::StagedNode{{{key, name, uid}, {}}, {}};
24 }
25
27 override
28 {
29 constexpr static const auto key = Metadata<ConcreteKey_k, Model>::get();
30
31 auto& plug = ctx.applicationPlugin<vst3::ApplicationPlugin>();
32
33 // Stage the whole plugin list; the model owns tree mutation and signals.
34 auto make_plugs = [&plug] {
35 std::vector<Library::StagedNode> v;
36 for(const auto& vst : plug.vst_infos)
37 {
38 if(vst.isValid)
39 {
40 const int numClasses = vst.classInfo.size();
41 switch(numClasses)
42 {
43 default: {
44 Library::StagedNode p{{{key, vst.name, QString{}}, {}}, {}};
45 for(const auto& cls : vst.classInfo)
46 p.children.push_back(stagedVSTClass(cls));
47 v.push_back(std::move(p));
48 break;
49 }
50 case 1: {
51 v.push_back(stagedVSTClass(vst.classInfo[0]));
52 break;
53 }
54 case 0:
55 break;
56 }
57 }
58 }
59 std::sort(v.begin(), v.end(), [](const auto& lhs, const auto& rhs) {
60 return QString::compare(
61 lhs.data.prettyName, rhs.data.prettyName, Qt::CaseInsensitive)
62 < 0;
63 });
64 return v;
65 };
66
67 model.clearAnchorKey(key);
68 model.replaceChildren(key, make_plugs());
69
70 con(plug, &vst3::ApplicationPlugin::vstChanged, this,
71 [model = QPointer{&model}, make_plugs] {
72 if(model)
73 model->replaceChildren(key, make_plugs());
74 });
75 }
76};
77}
Definition LibraryInterface.hpp:26
Definition ProcessesItemModel.hpp:38
Definition score-plugin-vst3/Vst3/ApplicationPlugin.hpp:100
Definition score-plugin-vst3/Vst3/Library.hpp:14
Definition ProcessEntry.hpp:32
Static metadata implementation.
Definition lib/score/tools/Metadata.hpp:36
Specializes ApplicationContext with the QMainWindow.
Definition GUIApplicationContext.hpp:15