/* This file is part of Ingen. Copyright 2007-2012 David Robillard Ingen is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. Ingen is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for details. You should have received a copy of the GNU Affero General Public License along with Ingen. If not, see . */ #ifndef INGEN_CLIENT_CLIENTSTORE_HPP #define INGEN_CLIENT_CLIENTSTORE_HPP #include #include #include #include "ingen/Interface.hpp" #include "ingen/client/signal.hpp" #include "ingen/shared/Store.hpp" #include "raul/Path.hpp" #include "raul/PathTable.hpp" #include "raul/SharedPtr.hpp" #include "raul/TableImpl.hpp" namespace Raul { class Atom; } namespace Ingen { namespace Shared { class URIs; } class GraphObject; namespace Client { class NodeModel; class ObjectModel; class PatchModel; class PluginModel; class PortModel; class SigClientInterface; /** Automatically manages models of objects in the engine. * * @ingroup IngenClient */ class ClientStore : public Shared::Store , public Interface , public INGEN_TRACKABLE { public: ClientStore( Shared::URIs& uris, SharedPtr engine = SharedPtr(), SharedPtr emitter = SharedPtr()); Raul::URI uri() const { return "ingen:ClientStore"; } SharedPtr object(const Raul::Path& path) const; SharedPtr plugin(const Raul::URI& uri) const; SharedPtr resource(const Raul::URI& uri) const; void clear(); typedef Raul::Table > Plugins; SharedPtr plugins() const { return _plugins; } SharedPtr plugins() { return _plugins; } void set_plugins(SharedPtr p) { _plugins = p; } Shared::URIs& uris() { return _uris; } void put(const Raul::URI& uri, const Resource::Properties& properties, Resource::Graph ctx=Resource::DEFAULT); void delta(const Raul::URI& uri, const Resource::Properties& remove, const Resource::Properties& add); void move(const Raul::Path& old_path, const Raul::Path& new_path); void set_property(const Raul::URI& subject_path, const Raul::URI& predicate, const Raul::Atom& value); void connect(const Raul::Path& tail, const Raul::Path& head); void disconnect(const Raul::Path& tail, const Raul::Path& head); void disconnect_all(const Raul::Path& parent_patch, const Raul::Path& path); void del(const Raul::URI& uri); void set_response_id(int32_t id) {} void get(const Raul::URI& uri) {} void response(int32_t id, Status status) {} void error(const std::string& msg) {} INGEN_SIGNAL(new_object, void, SharedPtr); INGEN_SIGNAL(new_plugin, void, SharedPtr); private: void add(GraphObject* o) { throw; } SharedPtr _object(const Raul::Path& path); SharedPtr _plugin(const Raul::URI& uri); SharedPtr _resource(const Raul::URI& uri); void add_object(SharedPtr object); SharedPtr remove_object(const Raul::Path& path); void add_plugin(SharedPtr plugin); SharedPtr connection_patch(const Raul::Path& tail_path, const Raul::Path& head_path); void bundle_begin() {} void bundle_end() {} // Slots for SigClientInterface signals bool attempt_connection(const Raul::Path& tail_path, const Raul::Path& head_path); Shared::URIs& _uris; SharedPtr _engine; SharedPtr _emitter; SharedPtr _plugins; ///< Map, keyed by plugin URI }; } // namespace Client } // namespace Ingen #endif // INGEN_CLIENT_CLIENTSTORE_HPP