Anklang-0.3.0.dev956+gd75ac925 anklang-0.3.0.dev956+gd75ac925
ASE — Anklang Sound Engine (C++)

« « « Anklang Documentation
Loading...
Searching...
No Matches
plugin.cc
Go to the documentation of this file.
1 // This Source Code Form is licensed MPL-2.0: http://mozilla.org/MPL/2.0
2#include "trkn/tracktion.hh" // PCH include must come first
3
4#include "plugin.hh"
5#include "server.hh"
6#include "jsonipc/jsonipc.hh"
7#include "internal.hh"
8
9namespace te = tracktion::engine;
10
11namespace Ase {
12
13// == PluginStateListener ==
15 PluginImpl &aseplugin_;
16 juce::ValueTree plugin_state_;
17public:
18 PluginStateListener (PluginImpl &aseplugin) :
19 aseplugin_ (aseplugin), plugin_state_ (aseplugin_.plugin_->state)
20 {
21 plugin_state_.addListener (this);
22 }
23 ~PluginStateListener() override
24 {
25 plugin_state_.removeListener (this);
26 }
27 void
28 valueTreePropertyChanged (juce::ValueTree &tree, const juce::Identifier &property) override
29 {
30 assert_return (tree == plugin_state_);
31 if (property == tracktion::engine::IDs::name)
32 aseplugin_.emit_notify ("name");
33 else if (property == tracktion::engine::IDs::enabled)
34 aseplugin_.emit_notify ("enabled");
35 else if (property == tracktion::engine::IDs::frozen)
36 aseplugin_.emit_notify ("frozen");
37 }
38 void valueTreeChildAdded (juce::ValueTree&, juce::ValueTree&) override {}
39 void valueTreeChildRemoved (juce::ValueTree&, juce::ValueTree&, int) override {}
40 void valueTreeParentChanged (juce::ValueTree&) override {}
41 void valueTreeChildOrderChanged (juce::ValueTree&, int, int) override {}
42};
43
44// == PluginImpl ==
45PluginImplP
46PluginImpl::from_trkn (tracktion::Plugin &p)
47{
48 PluginImpl *plugin = find_ase_obj<PluginImpl> (p);
49 if (plugin)
50 return shared_ptr_cast<PluginImpl> (plugin);
51 PluginImplP pluginp = PluginImpl::make_shared (p);
52 return pluginp;
53}
54
55PluginImpl::PluginImpl (tracktion::Plugin &plugin) :
56 plugin_ (&plugin), plugin_type_ (plugin.getPluginType().toStdString())
57{
59 state_listener_ = std::make_unique<PluginStateListener> (*this);
60}
61
62PluginImpl::~PluginImpl()
63{
64 unregister_ase_obj (this, plugin_.get());
65 state_listener_ = nullptr;
66 assert_return (_parent() == nullptr);
67}
68
70PluginImpl::name() const
71{
72 if (auto pluginp = plugin_.get())
73 return pluginp->getName().toStdString();
74 return "";
75}
76
78PluginImpl::fallback_name() const
79{
80 if (auto pluginp = plugin_.get())
81 return pluginp->getName().toStdString();
82 return DeviceImpl::fallback_name();
83}
84
87{
88 return plugin_type_;
89}
90
91bool
93{
94 if (auto pluginp = plugin_.get())
95 return pluginp->isEnabled();
96 return false;
97}
98
99void
101{
102 if (auto pluginp = plugin_.get())
103 pluginp->setEnabled (enabled);
104}
105
106bool
108{
109 if (auto pluginp = plugin_.get())
110 return pluginp->isFrozen();
111 return false;
112}
113
114void
116{
117 if (auto pluginp = plugin_.get())
118 pluginp->setFrozen (frozen);
119}
120
123{
124 DeviceInfo info;
125 if (auto pluginp = plugin_.get()) {
126 info.uri = pluginp->getIdentifierString().toStdString();
127 info.name = pluginp->getName().toStdString();
128 info.description = pluginp->getTooltip().toStdString();
129 }
130 return info;
131}
132
133void
135{
136 auto *plugin = plugin_.get();
137 if (plugin) {
138 plugin->removeFromParent();
140 state_listener_ = nullptr;
141 }
143}
144
145} // Ase
void emit_notify(const String &detail) override
Emit notify:detail, multiple notifications maybe coalesced if a CoalesceNotifies instance exists.
Definition object.cc:164
GadgetImpl * _parent() const override
Retrieve parent container.
Definition gadget.hh:28
void remove_self() override
Remove self from parent container.
Definition gadget.cc:113
Ase::Plugin implementation wrapping tracktion::Plugin.
Definition plugin.hh:10
tracktion::Plugin * plugin() const noexcept
Access underlying tracktion::Plugin (for internal use).
Definition plugin.hh:31
bool is_frozen() const override
Check if plugin is frozen.
Definition plugin.cc:107
String plugin_type() const override
Plugin type identifier.
Definition plugin.cc:86
void remove_self() override
Remove self from parent container.
Definition plugin.cc:134
bool is_enabled() const override
Check if plugin is enabled.
Definition plugin.cc:92
void set_frozen(bool frozen) override
Freeze or unfreeze the plugin.
Definition plugin.cc:115
void set_enabled(bool enabled) override
Enable or disable the plugin.
Definition plugin.cc:100
DeviceInfo device_info() override
Describe this Device type.
Definition plugin.cc:122
Mimick tracktion::engine::SafeSelectable<> for tracktion::Selectable descendants.
Definition trkn-utils.hh:27
void addListener(Listener *listener)
void removeListener(Listener *listener)
#define assert_return(expr,...)
Return from the current function if expr is unmet and issue an assertion warning.
Definition internal.hh:28
The Anklang C++ API namespace.
Definition api.hh:8
void register_ase_obj(VirtualBase *ase_impl, tracktion::Selectable &selectable)
Helper: register AseImpl with a tracktion Selectable via ase_obj_.
Definition trkn-utils.cc:62
std::string String
Convenience alias for std::string.
Definition cxxaux.hh:34
void unregister_ase_obj(VirtualBase *ase_impl, tracktion::Selectable *selectable)
Helper: unregister AseImpl from a tracktion Selectable (selectable may be nullptr)
Definition trkn-utils.cc:70
Info for device types.
Definition api.hh:200