diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/client/ClientStore.cpp | 148 | ||||
-rw-r--r-- | src/client/ClientStore.hpp | 33 | ||||
-rw-r--r-- | src/client/PatchModel.hpp | 3 |
3 files changed, 91 insertions, 93 deletions
diff --git a/src/client/ClientStore.cpp b/src/client/ClientStore.cpp index 2b457aa0..44a1da18 100644 --- a/src/client/ClientStore.cpp +++ b/src/client/ClientStore.cpp @@ -17,28 +17,34 @@ #include "raul/log.hpp" #include "raul/PathTable.hpp" + #include "shared/LV2URIMap.hpp" + #include "ClientStore.hpp" +#include "NodeModel.hpp" #include "ObjectModel.hpp" #include "PatchModel.hpp" -#include "NodeModel.hpp" -#include "PortModel.hpp" -#include "PluginModel.hpp" #include "PatchModel.hpp" +#include "PluginModel.hpp" +#include "PortModel.hpp" #include "SigClientInterface.hpp" #define LOG(s) s << "[ClientStore] " +//#define INGEN_CLIENT_STORE_DUMP 1 + using namespace std; using namespace Raul; namespace Ingen { + using namespace Shared; -namespace Client { +namespace Client { -ClientStore::ClientStore(SharedPtr<Shared::LV2URIMap> uris, - SharedPtr<EngineInterface> engine, SharedPtr<SigClientInterface> emitter) +ClientStore::ClientStore(SharedPtr<Shared::LV2URIMap> uris, + SharedPtr<Shared::EngineInterface> engine, + SharedPtr<SigClientInterface> emitter) : _uris(uris) , _engine(engine) , _emitter(emitter) @@ -61,7 +67,6 @@ ClientStore::ClientStore(SharedPtr<Shared::LV2URIMap> uris, CONNECT(activity, activity); } - void ClientStore::clear() { @@ -69,7 +74,6 @@ ClientStore::clear() _plugins->clear(); } - void ClientStore::add_object(SharedPtr<ObjectModel> object) { @@ -97,8 +101,9 @@ ClientStore::add_object(SharedPtr<ObjectModel> object) } - for (Resource::Properties::const_iterator i = object->properties().begin(); - i != object->properties().end(); ++i) + typedef Shared::Resource::Properties::const_iterator Iterator; + for (Iterator i = object->properties().begin(); + i != object->properties().end(); ++i) object->signal_property(i->first, i->second); LOG(debug) << "Added " << object->path() << " {" << endl; @@ -108,7 +113,6 @@ ClientStore::add_object(SharedPtr<ObjectModel> object) LOG(debug) << "}" << endl; } - SharedPtr<ObjectModel> ClientStore::remove_object(const Path& path) { @@ -116,12 +120,11 @@ ClientStore::remove_object(const Path& path) if (i != end()) { assert((*i).second->path() == path); - SharedPtr<ObjectModel> result = PtrCast<ObjectModel>((*i).second); - assert(result); - iterator descendants_end = find_descendants_end(i); - SharedPtr<Store::Objects> removed = yank(i, descendants_end); + SharedPtr<ObjectModel> result = PtrCast<ObjectModel>((*i).second); + iterator end = find_descendants_end(i); + SharedPtr<Store::Objects> removed = yank(i, end); - LOG(debug) << "[ClientStore] Removing " << i->first << " {" << endl; + LOG(debug) << "Removing " << i->first << " {" << endl; for (iterator i = removed->begin(); i != removed->end(); ++i) { LOG(debug) << "\t" << i->first << endl; } @@ -148,7 +151,6 @@ ClientStore::remove_object(const Path& path) } } - SharedPtr<PluginModel> ClientStore::plugin(const URI& uri) { @@ -160,7 +162,6 @@ ClientStore::plugin(const URI& uri) return (*i).second; } - SharedPtr<ObjectModel> ClientStore::object(const Path& path) { @@ -176,7 +177,7 @@ ClientStore::object(const Path& path) } } -SharedPtr<Resource> +SharedPtr<Shared::Resource> ClientStore::resource(const URI& uri) { if (Path::is_path(uri)) @@ -197,16 +198,14 @@ ClientStore::add_plugin(SharedPtr<PluginModel> pm) } } - /* ****** Signal Handlers ******** */ - void ClientStore::del(const Path& path) { SharedPtr<ObjectModel> removed = remove_object(path); removed.reset(); - debug << "[ClientStore] removed object " << path << ", count: " << removed.use_count(); + LOG(debug) << "Removed object " << path << ", count: " << removed.use_count(); } void @@ -221,14 +220,15 @@ ClientStore::move(const Path& old_path_str, const Path& new_path_str) return; } - iterator descendants_end = find_descendants_end(parent); + typedef Table<Path, SharedPtr<Shared::GraphObject> > Removed; - SharedPtr< Table<Path, SharedPtr<Shared::GraphObject> > > removed - = yank(parent, descendants_end); + iterator end = find_descendants_end(parent); + SharedPtr<Removed> removed = yank(parent, end); assert(removed->size() > 0); - for (Table<Path, SharedPtr<Shared::GraphObject> >::iterator i = removed->begin(); i != removed->end(); ++i) { + typedef Table<Path, SharedPtr<Shared::GraphObject> > PathTable; + for (PathTable::iterator i = removed->begin(); i != removed->end(); ++i) { const Path& child_old_path = i->first; assert(Path::descendant_comparator(old_path, child_old_path)); @@ -246,23 +246,25 @@ ClientStore::move(const Path& old_path_str, const Path& new_path_str) cram(*removed.get()); } - void -ClientStore::put(const URI& uri, - const Resource::Properties& properties, - Resource::Graph ctx) +ClientStore::put(const URI& uri, + const Shared::Resource::Properties& properties, + Shared::Resource::Graph ctx) { - typedef Resource::Properties::const_iterator iterator; - /* + typedef Resource::Properties::const_iterator Iterator; +#ifdef INGEN_CLIENT_STORE_DUMP LOG(info) << "PUT " << uri << " {" << endl; - for (iterator i = properties.begin(); i != properties.end(); ++i) - LOG(info) << " " << i->first << " = " << i->second << " :: " << i->second.type() << endl; + for (Iterator i = properties.begin(); i != properties.end(); ++i) + LOG(info) << '\t' << i->first << " = " << i->second + << " :: " << i->second.type() << endl; LOG(info) << "}" << endl; - */ +#endif bool is_patch, is_node, is_port, is_output; PortType data_type(PortType::UNKNOWN); - ResourceImpl::type(uris(), properties, is_patch, is_node, is_port, is_output, data_type); + ResourceImpl::type(uris(), properties, + is_patch, is_node, is_port, is_output, + data_type); // Check if uri is a plugin const Atom& type = properties.find(_uris->rdf_type)->second; if (type.type() == Atom::URI) { @@ -299,13 +301,16 @@ ClientStore::put(const URI& uri, model->set_properties(properties); add_object(model); } else if (is_node) { - const Resource::Properties::const_iterator p = properties.find(_uris->rdf_instanceOf); + const Iterator p = properties.find(_uris->rdf_instanceOf); SharedPtr<PluginModel> plug; if (p->second.is_valid() && p->second.type() == Atom::URI) { if (!(plug = plugin(p->second.get_uri()))) { LOG(warn) << "Unable to find plugin " << p->second.get_uri() << endl; plug = SharedPtr<PluginModel>( - new PluginModel(uris(), p->second.get_uri(), _uris->ingen_nil, Resource::Properties())); + new PluginModel(uris(), + p->second.get_uri(), + _uris->ingen_nil, + Resource::Properties())); add_plugin(plug); } @@ -318,9 +323,11 @@ ClientStore::put(const URI& uri, } else if (is_port) { if (data_type != PortType::UNKNOWN) { PortModel::Direction pdir = is_output ? PortModel::OUTPUT : PortModel::INPUT; - const Resource::Properties::const_iterator i = properties.find(_uris->lv2_index); + const Iterator i = properties.find(_uris->lv2_index); if (i != properties.end() && i->second.type() == Atom::INT) { - SharedPtr<PortModel> p(new PortModel(uris(), path, i->second.get_int32(), data_type, pdir)); + const uint32_t index = i->second.get_int32(); + SharedPtr<PortModel> p( + new PortModel(uris(), path, index, data_type, pdir)); p->set_properties(properties); add_object(p); } else { @@ -335,17 +342,22 @@ ClientStore::put(const URI& uri, } } - void -ClientStore::delta(const URI& uri, const Resource::Properties& remove, const Resource::Properties& add) +ClientStore::delta(const URI& uri, + const Resource::Properties& remove, + const Resource::Properties& add) { typedef Resource::Properties::const_iterator iterator; - /*LOG(info) << "DELTA " << uri << " {" << endl; +#ifdef INGEN_CLIENT_STORE_DUMP + LOG(info) << "DELTA " << uri << " {" << endl; for (iterator i = remove.begin(); i != remove.end(); ++i) - LOG(info) << " - " << i->first << " = " << i->second << " :: " << i->second.type() << endl; + LOG(info) << " - " << i->first << " = " << i->second + << " :: " << i->second.type() << endl; for (iterator i = add.begin(); i != add.end(); ++i) - LOG(info) << " + " << i->first << " = " << i->second << " :: " << i->second.type() << endl; - LOG(info) << "}" << endl;*/ + LOG(info) << " + " << i->first << " = " << i->second + << " :: " << i->second.type() << endl; + LOG(info) << "}" << endl; +#endif if (!Path::is_valid(uri.str())) { LOG(error) << "Bad path `" << uri.str() << "'" << endl; @@ -363,7 +375,6 @@ ClientStore::delta(const URI& uri, const Resource::Properties& remove, const Res } } - void ClientStore::set_property(const URI& subject_uri, const URI& predicate, const Atom& value) { @@ -380,7 +391,6 @@ ClientStore::set_property(const URI& subject_uri, const URI& predicate, const At } } - void ClientStore::activity(const Path& path) { @@ -391,7 +401,6 @@ ClientStore::activity(const Path& path) LOG(error) << "Activity for non-existent port " << path << endl; } - SharedPtr<PatchModel> ClientStore::connection_patch(const Path& src_port_path, const Path& dst_port_path) { @@ -416,20 +425,15 @@ ClientStore::connection_patch(const Path& src_port_path, const Path& dst_port_pa return patch; } - bool -ClientStore::attempt_connection(const Path& src_port_path, const Path& dst_port_path) +ClientStore::attempt_connection(const Path& src_port_path, + const Path& dst_port_path) { SharedPtr<PortModel> src_port = PtrCast<PortModel>(object(src_port_path)); SharedPtr<PortModel> dst_port = PtrCast<PortModel>(object(dst_port_path)); if (src_port && dst_port) { - assert(src_port->parent()); - assert(dst_port->parent()); - - SharedPtr<PatchModel> patch = connection_patch(src_port_path, dst_port_path); - assert(patch); - + SharedPtr<PatchModel> patch = connection_patch(src_port_path, dst_port_path); SharedPtr<ConnectionModel> cm(new ConnectionModel(src_port, dst_port)); src_port->connected_to(dst_port); @@ -442,43 +446,31 @@ ClientStore::attempt_connection(const Path& src_port_path, const Path& dst_port_ return false; } - void -ClientStore::connect(const Path& src_port_path, const Path& dst_port_path) +ClientStore::connect(const Path& src_path, + const Path& dst_path) { - attempt_connection(src_port_path, dst_port_path); + attempt_connection(src_path, dst_path); } - void -ClientStore::disconnect(const Path& src_port_path, const Path& dst_port_path) +ClientStore::disconnect(const Path& src_path, + const Path& dst_path) { - // Find the ports and create a ConnectionModel just to get at the parent path - // finding logic in ConnectionModel. So I'm lazy. - - SharedPtr<PortModel> src_port = PtrCast<PortModel>(object(src_port_path)); - SharedPtr<PortModel> dst_port = PtrCast<PortModel>(object(dst_port_path)); + SharedPtr<PortModel> src_port = PtrCast<PortModel>(object(src_path)); + SharedPtr<PortModel> dst_port = PtrCast<PortModel>(object(dst_path)); if (src_port) src_port->disconnected_from(dst_port); - else - LOG(warn) << "Disconnection from non-existent src port " << src_port_path << endl; if (dst_port) - dst_port->disconnected_from(dst_port); - else - LOG(warn) << "Disconnection from non-existent dst port " << dst_port_path << endl; - - SharedPtr<PatchModel> patch = connection_patch(src_port_path, dst_port_path); + dst_port->disconnected_from(src_port); + SharedPtr<PatchModel> patch = connection_patch(src_path, dst_path); if (patch) patch->remove_connection(src_port.get(), dst_port.get()); - else - LOG(error) << "Disconnection in non-existent patch: " - << src_port_path << " -> " << dst_port_path << endl; } - } // namespace Client } // namespace Ingen diff --git a/src/client/ClientStore.hpp b/src/client/ClientStore.hpp index a3928760..c7448f7c 100644 --- a/src/client/ClientStore.hpp +++ b/src/client/ClientStore.hpp @@ -19,14 +19,17 @@ #define INGEN_CLIENT_CLIENTSTORE_HPP #include <cassert> -#include <string> #include <list> +#include <string> + #include "raul/SharedPtr.hpp" + #include <sigc++/sigc++.h> + +#include "interface/EngineInterface.hpp" #include "raul/Path.hpp" #include "raul/PathTable.hpp" #include "raul/TableImpl.hpp" -#include "interface/EngineInterface.hpp" #include "shared/Store.hpp" namespace Raul { class Atom; } @@ -37,24 +40,25 @@ namespace Shared { class GraphObject; } namespace Client { -class SigClientInterface; +class NodeModel; class ObjectModel; -class PluginModel; class PatchModel; -class NodeModel; +class PluginModel; class PortModel; -class ConnectionModel; - +class SigClientInterface; /** Automatically manages models of objects in the engine. * * \ingroup IngenClient */ -class ClientStore : public Shared::Store, public Shared::CommonInterface, public sigc::trackable { +class ClientStore : public Shared::Store + , public Shared::CommonInterface + , public sigc::trackable { public: - ClientStore(SharedPtr<Shared::LV2URIMap> uris, - SharedPtr<Shared::EngineInterface> engine=SharedPtr<Shared::EngineInterface>(), - SharedPtr<SigClientInterface> emitter=SharedPtr<SigClientInterface>()); + ClientStore( + SharedPtr<Shared::LV2URIMap> uris, + SharedPtr<Shared::EngineInterface> engine=SharedPtr<Shared::EngineInterface>(), + SharedPtr<SigClientInterface> emitter=SharedPtr<SigClientInterface>()); SharedPtr<PluginModel> plugin(const Raul::URI& uri); SharedPtr<ObjectModel> object(const Raul::Path& path); @@ -106,7 +110,8 @@ private: void add_plugin(SharedPtr<PluginModel> plugin); - SharedPtr<PatchModel> connection_patch(const Raul::Path& src_port_path, const Raul::Path& dst_port_path); + SharedPtr<PatchModel> connection_patch(const Raul::Path& src_port_path, + const Raul::Path& dst_port_path); void bundle_begin() {} void bundle_end() {} @@ -115,7 +120,8 @@ private: void object_moved(const Raul::Path& old_path, const Raul::Path& new_path); void activity(const Raul::Path& path); - bool attempt_connection(const Raul::Path& src_port_path, const Raul::Path& dst_port_path); + bool attempt_connection(const Raul::Path& src_port_path, + const Raul::Path& dst_port_path); SharedPtr<Shared::LV2URIMap> _uris; SharedPtr<Shared::EngineInterface> _engine; @@ -124,7 +130,6 @@ private: SharedPtr<Plugins> _plugins; ///< Map, keyed by plugin URI }; - } // namespace Client } // namespace Ingen diff --git a/src/client/PatchModel.hpp b/src/client/PatchModel.hpp index 1fed0b76..534c329a 100644 --- a/src/client/PatchModel.hpp +++ b/src/client/PatchModel.hpp @@ -88,7 +88,8 @@ private: bool remove_child(SharedPtr<ObjectModel> c); void add_connection(SharedPtr<ConnectionModel> cm); - void remove_connection(const Shared::Port* src_port, const Shared::Port* dst_port); + void remove_connection(const Shared::Port* src_port, + const Shared::Port* dst_port); SharedPtr<Connections> _connections; bool _editable; |