From a95e08e48c2d1f68693609627c6d6f52c6982264 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 13 May 2009 06:14:40 +0000 Subject: Generic simple query system for both objects and plugins. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@1997 a436a847-0d15-0410-975c-d299462d15a1 --- src/client/ClientStore.cpp | 37 +++++++++++++++++++++---------- src/client/ClientStore.hpp | 9 ++++---- src/client/HTTPEngineSender.cpp | 4 ++-- src/client/HTTPEngineSender.hpp | 4 ++-- src/client/OSCEngineSender.cpp | 4 ++-- src/client/OSCEngineSender.hpp | 4 ++-- src/client/SigClientInterface.hpp | 8 +++---- src/client/ThreadedSigClientInterface.hpp | 8 +++---- 8 files changed, 46 insertions(+), 32 deletions(-) (limited to 'src/client') diff --git a/src/client/ClientStore.cpp b/src/client/ClientStore.cpp index f120e7ed..21ace7de 100644 --- a/src/client/ClientStore.cpp +++ b/src/client/ClientStore.cpp @@ -185,6 +185,15 @@ ClientStore::object(const Path& path) } } +SharedPtr +ClientStore::resource(const URI& uri) +{ + if (uri.scheme() == Path::scheme && Path::is_valid(uri.str())) + return object(uri.str()); + else + return plugin(uri); +} + void ClientStore::add_plugin(SharedPtr pm) { @@ -353,14 +362,18 @@ ClientStore::clear_patch(const Path& path) void -ClientStore::set_variable(const Path& subject_path, const URI& predicate, const Atom& value) +ClientStore::set_variable(const URI& subject_path, const URI& predicate, const Atom& value) { - SharedPtr subject = object(subject_path); + SharedPtr subject = resource(subject_path); if (!value.is_valid()) { - cerr << "ERROR: variable '" << predicate << "' has no type" << endl; + cerr << "ERROR: variable '" << predicate << "' is invalid" << endl; } else if (subject) { - subject->set_variable(predicate, value); + SharedPtr om = PtrCast(subject); + if (om) + om->set_variable(predicate, value); + else + subject->set_property(predicate, value); } else { //add_variable_orphan(subject_path, predicate, value); cerr << "WARNING: variable '" << predicate << "' for unknown object " << subject_path << endl; @@ -369,16 +382,16 @@ ClientStore::set_variable(const Path& subject_path, const URI& predicate, const void -ClientStore::set_property(const Path& subject_path, const URI& predicate, const Atom& value) +ClientStore::set_property(const URI& subject_path, const URI& predicate, const Atom& value) { - if (!value.is_valid()) - cerr << "WARNING: property '" << predicate << "' is NULL" << endl; - - SharedPtr obj = object(subject_path); - if (obj) - obj->set_property(predicate, value); - else + SharedPtr subject = resource(subject_path); + if (!value.is_valid()) { + cerr << "ERROR: property '" << predicate << "' is invalid" << endl; + } else if (subject) { + subject->set_property(predicate, value); + } else { cerr << "WARNING: property '" << predicate << "' for unknown object " << subject_path << endl; + } } diff --git a/src/client/ClientStore.hpp b/src/client/ClientStore.hpp index 9fb95b0b..b8451fd2 100644 --- a/src/client/ClientStore.hpp +++ b/src/client/ClientStore.hpp @@ -55,8 +55,9 @@ public: ClientStore(SharedPtr engine=SharedPtr(), SharedPtr emitter=SharedPtr()); - SharedPtr plugin(const Raul::URI& uri); - SharedPtr object(const Raul::Path& path); + SharedPtr plugin(const Raul::URI& uri); + SharedPtr object(const Raul::Path& path); + SharedPtr resource(const Raul::URI& uri); void clear(); @@ -72,8 +73,8 @@ public: void new_node(const Raul::Path& path, const Raul::URI& plugin_uri); void new_port(const Raul::Path& path, const Raul::URI& type, uint32_t index, bool is_output); void rename(const Raul::Path& old_path, const Raul::Path& new_path); - void set_variable(const Raul::Path& subject_path, const Raul::URI& predicate, const Raul::Atom& value); - void set_property(const Raul::Path& subject_path, const Raul::URI& predicate, const Raul::Atom& value); + void set_variable(const Raul::URI& subject_path, const Raul::URI& predicate, const Raul::Atom& value); + void set_property(const Raul::URI& subject_path, const Raul::URI& predicate, const Raul::Atom& value); void set_port_value(const Raul::Path& port_path, const Raul::Atom& value); void set_voice_value(const Raul::Path& port_path, uint32_t voice, const Raul::Atom& value); void connect(const Raul::Path& src_port_path, const Raul::Path& dst_port_path); diff --git a/src/client/HTTPEngineSender.cpp b/src/client/HTTPEngineSender.cpp index 2afa32f1..a03bc26a 100644 --- a/src/client/HTTPEngineSender.cpp +++ b/src/client/HTTPEngineSender.cpp @@ -209,7 +209,7 @@ HTTPEngineSender::midi_learn(const Path& node_path) void -HTTPEngineSender::set_variable(const Path& path, +HTTPEngineSender::set_variable(const URI& path, const URI& predicate, const Atom& value) { @@ -217,7 +217,7 @@ HTTPEngineSender::set_variable(const Path& path, void -HTTPEngineSender::set_property(const Path& path, +HTTPEngineSender::set_property(const URI& path, const URI& predicate, const Atom& value) { diff --git a/src/client/HTTPEngineSender.hpp b/src/client/HTTPEngineSender.hpp index ffe60577..7436040b 100644 --- a/src/client/HTTPEngineSender.hpp +++ b/src/client/HTTPEngineSender.hpp @@ -103,11 +103,11 @@ public: virtual void disconnect_all(const Raul::Path& parent_patch_path, const Raul::Path& path); - virtual void set_variable(const Raul::Path& subject_path, + virtual void set_variable(const Raul::URI& subject_path, const Raul::URI& predicate, const Raul::Atom& value); - virtual void set_property(const Raul::Path& subject_path, + virtual void set_property(const Raul::URI& subject_path, const Raul::URI& predicate, const Raul::Atom& value); diff --git a/src/client/OSCEngineSender.cpp b/src/client/OSCEngineSender.cpp index 45e7f82e..153f8dee 100644 --- a/src/client/OSCEngineSender.cpp +++ b/src/client/OSCEngineSender.cpp @@ -322,7 +322,7 @@ OSCEngineSender::midi_learn(const Path& node_path) void -OSCEngineSender::set_variable(const Path& obj_path, +OSCEngineSender::set_variable(const URI& obj_path, const URI& predicate, const Atom& value) { @@ -336,7 +336,7 @@ OSCEngineSender::set_variable(const Path& obj_path, void -OSCEngineSender::set_property(const Path& obj_path, +OSCEngineSender::set_property(const URI& obj_path, const URI& predicate, const Atom& value) { diff --git a/src/client/OSCEngineSender.hpp b/src/client/OSCEngineSender.hpp index 0010a488..ffd8d678 100644 --- a/src/client/OSCEngineSender.hpp +++ b/src/client/OSCEngineSender.hpp @@ -106,11 +106,11 @@ public: virtual void disconnect_all(const Raul::Path& parent_patch_path, const Raul::Path& path); - virtual void set_variable(const Raul::Path& subject_path, + virtual void set_variable(const Raul::URI& subject_path, const Raul::URI& predicate, const Raul::Atom& value); - virtual void set_property(const Raul::Path& subject_path, + virtual void set_property(const Raul::URI& subject_path, const Raul::URI& predicate, const Raul::Atom& value); diff --git a/src/client/SigClientInterface.hpp b/src/client/SigClientInterface.hpp index 40b30e47..ee20797a 100644 --- a/src/client/SigClientInterface.hpp +++ b/src/client/SigClientInterface.hpp @@ -62,8 +62,8 @@ public: sigc::signal signal_object_destroyed; sigc::signal signal_connection; sigc::signal signal_disconnection; - sigc::signal signal_variable_change; - sigc::signal signal_property_change; + sigc::signal signal_variable_change; + sigc::signal signal_property_change; sigc::signal signal_port_value; sigc::signal signal_voice_value; sigc::signal signal_activity; @@ -130,10 +130,10 @@ protected: void disconnect(const Raul::Path& src_port_path, const Raul::Path& dst_port_path) { if (_enabled) signal_disconnection.emit(src_port_path, dst_port_path); } - void set_variable(const Raul::Path& path, const Raul::URI& key, const Raul::Atom& value) + void set_variable(const Raul::URI& path, const Raul::URI& key, const Raul::Atom& value) { if (_enabled) signal_variable_change.emit(path, key, value); } - void set_property(const Raul::Path& path, const Raul::URI& key, const Raul::Atom& value) + void set_property(const Raul::URI& path, const Raul::URI& key, const Raul::Atom& value) { if (_enabled) signal_property_change.emit(path, key, value); } void set_port_value(const Raul::Path& port_path, const Raul::Atom& value) diff --git a/src/client/ThreadedSigClientInterface.hpp b/src/client/ThreadedSigClientInterface.hpp index 714465c8..0862bdee 100644 --- a/src/client/ThreadedSigClientInterface.hpp +++ b/src/client/ThreadedSigClientInterface.hpp @@ -121,10 +121,10 @@ public: void disconnect(const Raul::Path& src_port_path, const Raul::Path& dst_port_path) { push_sig(sigc::bind(disconnection_slot, src_port_path, dst_port_path)); } - void set_variable(const Raul::Path& path, const Raul::URI& key, const Raul::Atom& value) + void set_variable(const Raul::URI& path, const Raul::URI& key, const Raul::Atom& value) { push_sig(sigc::bind(variable_change_slot, path, key, value)); } - void set_property(const Raul::Path& path, const Raul::URI& key, const Raul::Atom& value) + void set_property(const Raul::URI& path, const Raul::URI& key, const Raul::Atom& value) { push_sig(sigc::bind(property_change_slot, path, key, value)); } void set_port_value(const Raul::Path& port_path, const Raul::Atom& value) @@ -168,8 +168,8 @@ private: sigc::slot object_destroyed_slot; sigc::slot object_renamed_slot; sigc::slot disconnection_slot; - sigc::slot variable_change_slot; - sigc::slot property_change_slot; + sigc::slot variable_change_slot; + sigc::slot property_change_slot; sigc::slot port_value_slot; sigc::slot voice_value_slot; sigc::slot activity_slot; -- cgit v1.2.1