diff options
Diffstat (limited to 'src/libs/engine')
-rw-r--r-- | src/libs/engine/NodeFactory.cpp | 12 | ||||
-rw-r--r-- | src/libs/engine/NodeFactory.h | 4 | ||||
-rw-r--r-- | src/libs/engine/OSCEngineReceiver.cpp | 12 | ||||
-rw-r--r-- | src/libs/engine/QueuedEngineInterface.cpp | 13 | ||||
-rw-r--r-- | src/libs/engine/QueuedEngineInterface.h | 1 | ||||
-rw-r--r-- | src/libs/engine/events/AddNodeEvent.cpp | 25 | ||||
-rw-r--r-- | src/libs/engine/events/AddNodeEvent.h | 13 |
7 files changed, 54 insertions, 26 deletions
diff --git a/src/libs/engine/NodeFactory.cpp b/src/libs/engine/NodeFactory.cpp index 9ab03a73..33b1842d 100644 --- a/src/libs/engine/NodeFactory.cpp +++ b/src/libs/engine/NodeFactory.cpp @@ -92,6 +92,18 @@ NodeFactory::~NodeFactory() } +const Plugin* +NodeFactory::plugin(const string& uri) +{ + // FIXME: this needs.. well, fixing + for (list<Plugin*>::iterator i = _plugins.begin(); i != _plugins.end(); ++i) + if ((*i)->uri() == uri) + return (*i); + + return NULL; +} + + void NodeFactory::load_plugins() { diff --git a/src/libs/engine/NodeFactory.h b/src/libs/engine/NodeFactory.h index 25408b2d..1fd6c2d4 100644 --- a/src/libs/engine/NodeFactory.h +++ b/src/libs/engine/NodeFactory.h @@ -56,6 +56,8 @@ public: const list<Plugin*>& plugins() { return _plugins; } + const Plugin* plugin(const string& uri); + private: #ifdef HAVE_LADSPA void load_ladspa_plugins(); @@ -76,7 +78,7 @@ private: list<PluginLibrary*> _libraries; list<Plugin*> _internal_plugins; - list<Plugin*> _plugins; + list<Plugin*> _plugins; // FIXME: make a map bool _has_loaded; }; diff --git a/src/libs/engine/OSCEngineReceiver.cpp b/src/libs/engine/OSCEngineReceiver.cpp index afed89fd..92ab08f0 100644 --- a/src/libs/engine/OSCEngineReceiver.cpp +++ b/src/libs/engine/OSCEngineReceiver.cpp @@ -88,8 +88,8 @@ OSCEngineReceiver::OSCEngineReceiver(CountedPtr<Engine> engine, size_t queue_siz lo_server_add_method(_server, "/om/synth/disable_patch", "is", disable_patch_cb, this); lo_server_add_method(_server, "/om/synth/clear_patch", "is", clear_patch_cb, this); lo_server_add_method(_server, "/om/synth/create_port", "issi", create_port_cb, this); - lo_server_add_method(_server, "/om/synth/create_node", "issssi", create_node_cb, this); - lo_server_add_method(_server, "/om/synth/create_node", "isssi", create_node_by_uri_cb, this); + lo_server_add_method(_server, "/om/synth/create_node", "isssi", create_node_cb, this); + lo_server_add_method(_server, "/om/synth/create_node", "issi", create_node_by_uri_cb, this); lo_server_add_method(_server, "/om/synth/destroy", "is", destroy_cb, this); lo_server_add_method(_server, "/om/synth/rename", "iss", rename_cb, this); lo_server_add_method(_server, "/om/synth/connect", "iss", connect_cb, this); @@ -487,7 +487,6 @@ OSCEngineReceiver::m_create_port_cb(const char* path, const char* types, lo_arg* * <p> \b /om/synth/create_node - Add a node into a given patch (load a plugin by URI) * \arg \b response-id (integer) * \arg \b node-path (string) - Full path of the new node (ie. /patch2/subpatch/newnode) - * \arg \b type (string) - Plugin type ("Internal", "LV2", "DSSI", "LADSPA") * \arg \b plug-uri (string) - URI of the plugin to load * \arg \b poly (integer-boolean) - Whether node is polyphonic (0 = false, 1 = true) </p> \n \n */ @@ -495,13 +494,12 @@ int OSCEngineReceiver::m_create_node_by_uri_cb(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg) { const char* node_path = &argv[1]->s; - const char* type = &argv[2]->s; - const char* plug_uri = &argv[3]->s; - const int poly = argv[4]->i; + const char* plug_uri = &argv[2]->s; + const int poly = argv[3]->i; // FIXME: make sure poly is valid - create_node(node_path, type, plug_uri, (poly == 1)); + create_node(node_path, plug_uri, (poly == 1)); return 0; } diff --git a/src/libs/engine/QueuedEngineInterface.cpp b/src/libs/engine/QueuedEngineInterface.cpp index b0903e29..ce56e569 100644 --- a/src/libs/engine/QueuedEngineInterface.cpp +++ b/src/libs/engine/QueuedEngineInterface.cpp @@ -140,17 +140,10 @@ void QueuedEngineInterface::create_port(const string& path, void QueuedEngineInterface::create_node(const string& path, - const string& plugin_type, const string& plugin_uri, bool polyphonic) { - // FIXME: ew - - Plugin* plugin = new Plugin(); - plugin->set_type(plugin_type); - plugin->uri(plugin_uri); - - push_queued(new AddNodeEvent(*_engine.get(), _responder, now(), path, plugin, polyphonic)); + push_queued(new AddNodeEvent(*_engine.get(), _responder, now(), path, plugin_uri, polyphonic)); } @@ -161,6 +154,9 @@ QueuedEngineInterface::create_node(const string& path, const string& plugin_label, bool polyphonic) { + cerr << "FIXME: deprecated create_node\n"; + throw; +#if 0 // FIXME: ew Plugin* plugin = new Plugin(); @@ -169,6 +165,7 @@ QueuedEngineInterface::create_node(const string& path, plugin->plug_label(plugin_label); push_queued(new AddNodeEvent(*_engine.get(), _responder, now(), path, plugin, polyphonic)); +#endif } void diff --git a/src/libs/engine/QueuedEngineInterface.h b/src/libs/engine/QueuedEngineInterface.h index f9aaa0b4..10b120e8 100644 --- a/src/libs/engine/QueuedEngineInterface.h +++ b/src/libs/engine/QueuedEngineInterface.h @@ -89,7 +89,6 @@ public: bool direction); virtual void create_node(const string& path, - const string& plugin_type, const string& plugin_uri, bool polyphonic); diff --git a/src/libs/engine/events/AddNodeEvent.cpp b/src/libs/engine/events/AddNodeEvent.cpp index 19ff6bf5..6e42ef82 100644 --- a/src/libs/engine/events/AddNodeEvent.cpp +++ b/src/libs/engine/events/AddNodeEvent.cpp @@ -33,7 +33,7 @@ namespace Ingen { -AddNodeEvent::AddNodeEvent(Engine& engine, CountedPtr<Responder> responder, SampleCount timestamp, const string& path, Plugin* plugin, bool poly) +/*AddNodeEvent::AddNodeEvent(Engine& engine, CountedPtr<Responder> responder, SampleCount timestamp, const string& path, Plugin* plugin, bool poly) : QueuedEvent(engine, responder, timestamp), m_path(path), m_plugin(plugin), @@ -43,12 +43,24 @@ AddNodeEvent::AddNodeEvent(Engine& engine, CountedPtr<Responder> responder, Samp m_process_order(NULL), m_node_already_exists(false) { +}*/ + +AddNodeEvent::AddNodeEvent(Engine& engine, CountedPtr<Responder> responder, SampleCount timestamp, const string& path, + const string& plugin_uri, bool poly) +: QueuedEvent(engine, responder, timestamp), + m_path(path), + m_plugin_uri(plugin_uri), + m_poly(poly), + m_patch(NULL), + m_node(NULL), + m_process_order(NULL), + m_node_already_exists(false) +{ } AddNodeEvent::~AddNodeEvent() { - delete m_plugin; } @@ -62,12 +74,13 @@ AddNodeEvent::pre_process() } m_patch = _engine.object_store()->find_patch(m_path.parent()); + const Plugin* plugin = _engine.node_factory()->plugin(m_plugin_uri); - if (m_patch != NULL) { + if (m_patch && plugin) { if (m_poly) - m_node = _engine.node_factory()->load_plugin(m_plugin, m_path.name(), m_patch->internal_poly(), m_patch); + m_node = _engine.node_factory()->load_plugin(plugin, m_path.name(), m_patch->internal_poly(), m_patch); else - m_node = _engine.node_factory()->load_plugin(m_plugin, m_path.name(), 1, m_patch); + m_node = _engine.node_factory()->load_plugin(plugin, m_path.name(), 1, m_patch); if (m_node != NULL) { m_node->activate(); @@ -113,7 +126,7 @@ AddNodeEvent::post_process() } else if (m_node == NULL) { msg = "Unable to load node "; msg.append(m_path).append(" (you're missing the plugin \"").append( - m_plugin->uri()); + m_plugin_uri); _responder->respond_error(msg); } else { _responder->respond_ok(); diff --git a/src/libs/engine/events/AddNodeEvent.h b/src/libs/engine/events/AddNodeEvent.h index c7616c2b..b4345f90 100644 --- a/src/libs/engine/events/AddNodeEvent.h +++ b/src/libs/engine/events/AddNodeEvent.h @@ -39,7 +39,14 @@ class Plugin; class AddNodeEvent : public QueuedEvent { public: - AddNodeEvent(Engine& engine, CountedPtr<Responder> responder, SampleCount timestamp, const string& path, Plugin* plugin, bool poly); + //AddNodeEvent(Engine& engine, CountedPtr<Responder> responder, SampleCount timestamp, const string& path, Plugin* plugin, bool poly); + AddNodeEvent(Engine& engine, + CountedPtr<Responder> responder, + SampleCount timestamp, + const string& node_path, + const string& plugin_uri, + bool poly); + ~AddNodeEvent(); void pre_process(); @@ -49,11 +56,11 @@ public: private: string m_patch_name; Path m_path; - Plugin* m_plugin; + string m_plugin_uri; bool m_poly; Patch* m_patch; Node* m_node; - Array<Node*>* m_process_order; // Patch's new process order + Array<Node*>* m_process_order; ///< Patch's new process order bool m_node_already_exists; }; |