46struct HostApp final :
public Steinberg::Vst::IHostApplication
52 Steinberg::tresult PLUGIN_API
53 isPlugInterfaceSupported(
const Steinberg::TUID _iid)
override
55 using namespace Steinberg;
56 using namespace Steinberg::Vst;
58 {&IComponent::iid, &IAudioProcessor::iid, &IEditController::iid,
59 &IConnectionPoint::iid, &IUnitInfo::iid, &IMidiMapping::iid})
60 if(FUnknownPrivate::iidEqual(_iid,
static_cast<const TUID&
>(*iid)))
65 Steinberg::tresult PLUGIN_API queryInterface(
const char* _iid,
void** obj)
override
67 using namespace Steinberg;
68 using namespace Steinberg::Vst;
69 QUERY_INTERFACE(_iid, obj, FUnknown::iid, IPlugInterfaceSupport)
70 QUERY_INTERFACE(_iid, obj, IPlugInterfaceSupport::iid, IPlugInterfaceSupport)
74 Steinberg::uint32 PLUGIN_API addRef()
override {
return 1; }
75 Steinberg::uint32 PLUGIN_API release()
override {
return 1; }
80 Steinberg::tresult PLUGIN_API getName(Steinberg::Vst::String128 name)
override
82 Steinberg::String str(
"ossia score");
83 str.copyTo16(name, 0, 127);
84 return Steinberg::kResultTrue;
88 PLUGIN_API createInstance(Steinberg::TUID cid, Steinberg::TUID _iid,
void** obj)
override
90 using namespace Steinberg;
91 using namespace Steinberg::Vst;
92 FUID classID(FUID::fromTUID(cid));
93 FUID interfaceID(FUID::fromTUID(_iid));
94 if(classID == Vst::IMessage::iid && interfaceID == Vst::IMessage::iid)
96 *obj =
new HostMessage;
100 classID == Vst::IAttributeList::iid && interfaceID == Vst::IAttributeList::iid)
102 *obj = Vst::HostAttributeList::make();
109 Steinberg::tresult PLUGIN_API queryInterface(
const char* _iid,
void** obj)
override
111 using namespace Steinberg;
112 using namespace Steinberg::Vst;
113 QUERY_INTERFACE(_iid, obj, FUnknown::iid, IHostApplication)
114 QUERY_INTERFACE(_iid, obj, IHostApplication::iid, IHostApplication)
116 if(m_support.queryInterface(_iid, obj) == kResultOk)
123 Steinberg::uint32 PLUGIN_API addRef()
override {
return 1; }
125 Steinberg::uint32 PLUGIN_API release()
override {
return 1; }
137 void initialize()
override;
139 VST3::Hosting::Module::Ptr getModule(
const std::string& path);
142 void rescan(
const QStringList& paths);
143 void vstChanged() E_SIGNAL(SCORE_PLUGIN_VST3_EXPORT, vstChanged);
145 std::pair<const AvailablePlugin*, const VST3::Hosting::ClassInfo*>
146 classInfo(
const VST3::UID& uid)
const noexcept;
147 QString pathForClass(
const VST3::UID& uid)
const noexcept;
148 std::optional<VST3::UID>
149 uidForPathAndClassName(
const QString& path,
const QString& cls)
const noexcept;
152 ossia::string_map<VST3::Hosting::Module::Ptr> modules;
153 std::vector<AvailablePlugin> vst_infos;
156 void onScanned(
const QString& path,
const QJsonObject& obj);
157 void onScanFailed(
const QString& path,
const QString& reason);
158 void removeEntriesForPath(
const QString& path);
160 void schedulePersist();
162#if QT_CONFIG(process)
163 std::unique_ptr<Media::PluginScanner> m_scanner;
165 QTimer* m_persistTimer{};
Used to access all the application-wide state and structures.
Definition ApplicationContext.hpp:25