diff options
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/.clang-tidy | 3 | ||||
-rw-r--r-- | src/client/BlockModel.cpp | 129 | ||||
-rw-r--r-- | src/client/ClientStore.cpp | 202 | ||||
-rw-r--r-- | src/client/GraphModel.cpp | 66 | ||||
-rw-r--r-- | src/client/ObjectModel.cpp | 31 | ||||
-rw-r--r-- | src/client/PluginModel.cpp | 109 | ||||
-rw-r--r-- | src/client/PluginUI.cpp | 101 | ||||
-rw-r--r-- | src/client/PortModel.cpp | 21 | ||||
-rw-r--r-- | src/client/ingen_client.cpp | 17 | ||||
-rw-r--r-- | src/client/meson.build | 50 | ||||
-rw-r--r-- | src/client/wscript | 24 |
11 files changed, 414 insertions, 339 deletions
diff --git a/src/client/.clang-tidy b/src/client/.clang-tidy new file mode 100644 index 00000000..2561514f --- /dev/null +++ b/src/client/.clang-tidy @@ -0,0 +1,3 @@ +Checks: > + -google-readability-todo, +InheritParentConfig: true diff --git a/src/client/BlockModel.cpp b/src/client/BlockModel.cpp index f9eaa26e..998c118d 100644 --- a/src/client/BlockModel.cpp +++ b/src/client/BlockModel.cpp @@ -16,48 +16,51 @@ #include "ingen/client/BlockModel.hpp" +#include "ingen/Atom.hpp" +#include "ingen/Forge.hpp" #include "ingen/URIs.hpp" -#include "ingen/World.hpp" +#include "ingen/client/PluginModel.hpp" #include "ingen/client/PortModel.hpp" +#include "lilv/lilv.h" +#include "lv2/core/lv2.h" +#include "raul/Path.hpp" +#include "raul/Symbol.hpp" #include <cassert> #include <cmath> #include <cstdlib> #include <cstring> +#include <memory> #include <string> - -namespace ingen { -namespace client { - -BlockModel::BlockModel(URIs& uris, - const SPtr<PluginModel>& plugin, - const Raul::Path& path) - : ObjectModel(uris, path) - , _plugin_uri(plugin->uri()) - , _plugin(plugin) - , _num_values(0) - , _min_values(nullptr) - , _max_values(nullptr) -{ -} - -BlockModel::BlockModel(URIs& uris, - const URI& plugin_uri, - const Raul::Path& path) - : ObjectModel(uris, path) - , _plugin_uri(plugin_uri) - , _num_values(0) - , _min_values(nullptr) - , _max_values(nullptr) -{ -} +#include <utility> + +namespace ingen::client { + +BlockModel::BlockModel(URIs& uris, + const std::shared_ptr<PluginModel>& plugin, + const raul::Path& path) + : ObjectModel(uris, path) + , _plugin_uri(plugin->uri()) + , _plugin(plugin) + , _num_values(0) + , _min_values(nullptr) + , _max_values(nullptr) +{} + +BlockModel::BlockModel(URIs& uris, URI plugin_uri, const raul::Path& path) + : ObjectModel(uris, path) + , _plugin_uri(std::move(plugin_uri)) + , _num_values(0) + , _min_values(nullptr) + , _max_values(nullptr) +{} BlockModel::BlockModel(const BlockModel& copy) : ObjectModel(copy) , _plugin_uri(copy._plugin_uri) , _num_values(copy._num_values) - , _min_values((float*)malloc(sizeof(float) * _num_values)) - , _max_values((float*)malloc(sizeof(float) * _num_values)) + , _min_values(static_cast<float*>(malloc(sizeof(float) * _num_values))) + , _max_values(static_cast<float*>(malloc(sizeof(float) * _num_values))) { memcpy(_min_values, copy._min_values, sizeof(float) * _num_values); memcpy(_max_values, copy._max_values, sizeof(float) * _num_values); @@ -69,7 +72,7 @@ BlockModel::~BlockModel() } void -BlockModel::remove_port(const SPtr<PortModel>& port) +BlockModel::remove_port(const std::shared_ptr<PortModel>& port) { for (auto i = _ports.begin(); i != _ports.end(); ++i) { if ((*i) == port) { @@ -81,7 +84,7 @@ BlockModel::remove_port(const SPtr<PortModel>& port) } void -BlockModel::remove_port(const Raul::Path& port_path) +BlockModel::remove_port(const raul::Path& port_path) { for (auto i = _ports.begin(); i != _ports.end(); ++i) { if ((*i)->path() == port_path) { @@ -103,26 +106,26 @@ BlockModel::clear() } void -BlockModel::add_child(const SPtr<ObjectModel>& c) +BlockModel::add_child(const std::shared_ptr<ObjectModel>& c) { assert(c->parent().get() == this); //ObjectModel::add_child(c); - SPtr<PortModel> pm = dynamic_ptr_cast<PortModel>(c); + auto pm = std::dynamic_pointer_cast<PortModel>(c); assert(pm); add_port(pm); } bool -BlockModel::remove_child(const SPtr<ObjectModel>& c) +BlockModel::remove_child(const std::shared_ptr<ObjectModel>& c) { assert(c->path().is_child_of(path())); assert(c->parent().get() == this); //bool ret = ObjectModel::remove_child(c); - SPtr<PortModel> pm = dynamic_ptr_cast<PortModel>(c); + auto pm = std::dynamic_pointer_cast<PortModel>(c); assert(pm); remove_port(pm); @@ -131,7 +134,7 @@ BlockModel::remove_child(const SPtr<ObjectModel>& c) } void -BlockModel::add_port(const SPtr<PortModel>& pm) +BlockModel::add_port(const std::shared_ptr<PortModel>& pm) { assert(pm); assert(pm->path().is_child_of(path())); @@ -144,18 +147,18 @@ BlockModel::add_port(const SPtr<PortModel>& pm) _signal_new_port.emit(pm); } -SPtr<const PortModel> -BlockModel::get_port(const Raul::Symbol& symbol) const +std::shared_ptr<const PortModel> +BlockModel::get_port(const raul::Symbol& symbol) const { for (auto p : _ports) { if (p->symbol() == symbol) { return p; } } - return SPtr<PortModel>(); + return std::shared_ptr<PortModel>(); } -SPtr<const PortModel> +std::shared_ptr<const PortModel> BlockModel::get_port(uint32_t index) const { return _ports[index]; @@ -170,10 +173,11 @@ BlockModel::port(uint32_t index) const } void -BlockModel::default_port_value_range(const SPtr<const PortModel>& port, - float& min, - float& max, - uint32_t srate) const +BlockModel::default_port_value_range( + const std::shared_ptr<const PortModel>& port, + float& min, + float& max, + uint32_t srate) const { // Default control values min = 0.0; @@ -198,16 +202,17 @@ BlockModel::default_port_value_range(const SPtr<const PortModel>& port, } if (port->port_property(_uris.lv2_sampleRate)) { - min *= srate; - max *= srate; + const auto frate = static_cast<float>(srate); + min *= frate; + max *= frate; } } void -BlockModel::port_value_range(const SPtr<const PortModel>& port, - float& min, - float& max, - uint32_t srate) const +BlockModel::port_value_range(const std::shared_ptr<const PortModel>& port, + float& min, + float& max, + uint32_t srate) const { assert(port->parent().get() == this); @@ -224,12 +229,13 @@ BlockModel::port_value_range(const SPtr<const PortModel>& port, } if (max <= min) { - max = min + 1.0; + max = min + 1.0f; } if (port->port_property(_uris.lv2_sampleRate)) { - min *= srate; - max *= srate; + const auto frate = static_cast<float>(srate); + min *= frate; + max *= frate; } } @@ -239,15 +245,17 @@ BlockModel::label() const const Atom& name_property = get_property(_uris.lv2_name); if (name_property.type() == _uris.forge.String) { return name_property.ptr<char>(); - } else if (plugin_model()) { + } + + if (plugin_model()) { return plugin_model()->human_name(); - } else { - return symbol().c_str(); } + + return symbol().c_str(); } std::string -BlockModel::port_label(const SPtr<const PortModel>& port) const +BlockModel::port_label(const std::shared_ptr<const PortModel>& port) const { const Atom& name = port->get_property(URI(LV2_CORE__name)); if (name.is_valid() && name.type() == _uris.forge.String) { @@ -274,9 +282,9 @@ BlockModel::port_label(const SPtr<const PortModel>& port) const } void -BlockModel::set(const SPtr<ObjectModel>& model) +BlockModel::set(const std::shared_ptr<ObjectModel>& model) { - SPtr<BlockModel> block = dynamic_ptr_cast<BlockModel>(model); + auto block = std::dynamic_pointer_cast<BlockModel>(model); if (block) { _plugin_uri = block->_plugin_uri; _plugin = block->_plugin; @@ -285,5 +293,4 @@ BlockModel::set(const SPtr<ObjectModel>& model) ObjectModel::set(model); } -} // namespace client -} // namespace ingen +} // namespace ingen::client diff --git a/src/client/ClientStore.cpp b/src/client/ClientStore.cpp index a42efd16..7cfd439d 100644 --- a/src/client/ClientStore.cpp +++ b/src/client/ClientStore.cpp @@ -16,7 +16,12 @@ #include "ingen/client/ClientStore.hpp" +#include "ingen/Atom.hpp" +#include "ingen/Forge.hpp" #include "ingen/Log.hpp" +#include "ingen/Properties.hpp" +#include "ingen/Resource.hpp" +#include "ingen/URIs.hpp" #include "ingen/client/ArcModel.hpp" #include "ingen/client/BlockModel.hpp" #include "ingen/client/GraphModel.hpp" @@ -24,20 +29,23 @@ #include "ingen/client/PluginModel.hpp" #include "ingen/client/PortModel.hpp" #include "ingen/client/SigClientInterface.hpp" +#include "ingen/paths.hpp" +#include "raul/Path.hpp" -#include <boost/variant/apply_visitor.hpp> +#include <sigc++/functors/mem_fun.h> #include <cassert> #include <cstdint> +#include <memory> #include <string> #include <utility> +#include <variant> -namespace ingen { -namespace client { +namespace ingen::client { -ClientStore::ClientStore(URIs& uris, - Log& log, - SPtr<SigClientInterface> emitter) +ClientStore::ClientStore(URIs& uris, + Log& log, + const std::shared_ptr<SigClientInterface>& emitter) : _uris(uris) , _log(log) , _emitter(emitter) @@ -57,16 +65,16 @@ ClientStore::clear() } void -ClientStore::add_object(SPtr<ObjectModel> object) +ClientStore::add_object(const std::shared_ptr<ObjectModel>& object) { // If we already have "this" object, merge the existing one into the new // one (with precedence to the new values). auto existing = find(object->path()); if (existing != end()) { - dynamic_ptr_cast<ObjectModel>(existing->second)->set(object); + std::dynamic_pointer_cast<ObjectModel>(existing->second)->set(object); } else { if (!object->path().is_root()) { - SPtr<ObjectModel> parent = _object(object->path().parent()); + const std::shared_ptr<ObjectModel> parent = _object(object->path().parent()); if (parent) { assert(object->path().is_child_of(parent->path())); object->set_parent(parent); @@ -84,26 +92,26 @@ ClientStore::add_object(SPtr<ObjectModel> object) } } - for (auto p : object->properties()) { + for (const auto& p : object->properties()) { object->signal_property().emit(p.first, p.second); } } -SPtr<ObjectModel> -ClientStore::remove_object(const Raul::Path& path) +std::shared_ptr<ObjectModel> +ClientStore::remove_object(const raul::Path& path) { // Find the object, the "top" of the tree to remove - const iterator top = find(path); + const auto top = find(path); if (top == end()) { - return SPtr<ObjectModel>(); + return nullptr; } - SPtr<ObjectModel> object = dynamic_ptr_cast<ObjectModel>(top->second); + auto object = std::dynamic_pointer_cast<ObjectModel>(top->second); // Remove object and any adjacent arcs from parent if applicable if (object && object->parent()) { - SPtr<PortModel> port = dynamic_ptr_cast<PortModel>(object); - if (port && dynamic_ptr_cast<GraphModel>(port->parent())) { + auto port = std::dynamic_pointer_cast<PortModel>(object); + if (port && std::dynamic_pointer_cast<GraphModel>(port->parent())) { disconnect_all(port->parent()->path(), path); if (port->parent()->parent()) { disconnect_all(port->parent()->parent()->path(), path); @@ -129,69 +137,69 @@ ClientStore::remove_object(const Raul::Path& path) return object; } -SPtr<PluginModel> +std::shared_ptr<PluginModel> ClientStore::_plugin(const URI& uri) { - const Plugins::iterator i = _plugins->find(uri); - return (i == _plugins->end()) ? SPtr<PluginModel>() : (*i).second; + const auto i = _plugins->find(uri); + return (i == _plugins->end()) ? std::shared_ptr<PluginModel>() : (*i).second; } -SPtr<PluginModel> +std::shared_ptr<PluginModel> ClientStore::_plugin(const Atom& uri) { /* FIXME: Should probably be stored with URIs rather than strings, to make this a fast case. */ - const Plugins::iterator i = _plugins->find(URI(_uris.forge.str(uri, false))); - return (i == _plugins->end()) ? SPtr<PluginModel>() : (*i).second; + const auto i = _plugins->find(URI(_uris.forge.str(uri, false))); + return (i == _plugins->end()) ? std::shared_ptr<PluginModel>() : (*i).second; } -SPtr<const PluginModel> +std::shared_ptr<const PluginModel> ClientStore::plugin(const URI& uri) const { return const_cast<ClientStore*>(this)->_plugin(uri); } -SPtr<ObjectModel> -ClientStore::_object(const Raul::Path& path) +std::shared_ptr<ObjectModel> +ClientStore::_object(const raul::Path& path) { - const iterator i = find(path); + const auto i = find(path); if (i == end()) { - return SPtr<ObjectModel>(); - } else { - SPtr<ObjectModel> model = dynamic_ptr_cast<ObjectModel>(i->second); - assert(model); - assert(model->path().is_root() || model->parent()); - return model; + return nullptr; } + + auto model = std::dynamic_pointer_cast<ObjectModel>(i->second); + assert(model); + assert(model->path().is_root() || model->parent()); + return model; } -SPtr<const ObjectModel> -ClientStore::object(const Raul::Path& path) const +std::shared_ptr<const ObjectModel> +ClientStore::object(const raul::Path& path) const { return const_cast<ClientStore*>(this)->_object(path); } -SPtr<Resource> +std::shared_ptr<Resource> ClientStore::_resource(const URI& uri) { if (uri_is_path(uri)) { return _object(uri_to_path(uri)); - } else { - return _plugin(uri); } + + return _plugin(uri); } -SPtr<const Resource> +std::shared_ptr<const Resource> ClientStore::resource(const URI& uri) const { return const_cast<ClientStore*>(this)->_resource(uri); } void -ClientStore::add_plugin(SPtr<PluginModel> pm) +ClientStore::add_plugin(const std::shared_ptr<PluginModel>& pm) { - SPtr<PluginModel> existing = _plugin(pm->uri()); + const std::shared_ptr<PluginModel> existing = _plugin(pm->uri()); if (existing) { existing->set(pm); } else { @@ -225,7 +233,7 @@ ClientStore::operator()(const Copy&) void ClientStore::operator()(const Move& msg) { - const iterator top = find(msg.old_path); + const auto top = find(msg.old_path); if (top != end()) { rename(top, msg.new_path); } @@ -234,29 +242,30 @@ ClientStore::operator()(const Move& msg) void ClientStore::message(const Message& msg) { - boost::apply_visitor(*this, msg); + std::visit(*this, msg); } void ClientStore::operator()(const Put& msg) { - using Iterator = Properties::const_iterator; - const auto& uri = msg.uri; const auto& properties = msg.properties; - bool is_graph, is_block, is_port, is_output; + bool is_block = false; + bool is_graph = false; + bool is_output = false; + bool is_port = false; Resource::type(uris(), properties, is_graph, is_block, is_port, is_output); // Check for specially handled types - const Iterator t = properties.find(_uris.rdf_type); + const auto t = properties.find(_uris.rdf_type); if (t != properties.end()) { const Atom& type(t->second); if (_uris.pset_Preset == type) { - const Iterator p = properties.find(_uris.lv2_appliesTo); - const Iterator l = properties.find(_uris.rdfs_label); - SPtr<PluginModel> plug; + const auto p = properties.find(_uris.lv2_appliesTo); + const auto l = properties.find(_uris.rdfs_label); + std::shared_ptr<PluginModel> plug; if (p == properties.end()) { _log.error("Preset <%1%> with no plugin\n", uri.c_str()); } else if (l == properties.end()) { @@ -270,10 +279,12 @@ ClientStore::operator()(const Put& msg) plug->add_preset(uri, l->second.ptr<char>()); } return; - } else if (_uris.ingen_Graph == type) { + } + + if (_uris.ingen_Graph == type) { is_graph = true; } else if (_uris.ingen_Internal == type || _uris.lv2_Plugin == type) { - SPtr<PluginModel> p(new PluginModel(uris(), uri, type, properties)); + const std::shared_ptr<PluginModel> p{new PluginModel(uris(), uri, type, properties)}; add_plugin(p); return; } @@ -284,9 +295,9 @@ ClientStore::operator()(const Put& msg) return; } - const Raul::Path path(uri_to_path(uri)); + const raul::Path path(uri_to_path(uri)); - SPtr<ObjectModel> obj = dynamic_ptr_cast<ObjectModel>(_object(path)); + auto obj = std::dynamic_pointer_cast<ObjectModel>(_object(path)); if (obj) { obj->set_properties(properties); return; @@ -297,7 +308,7 @@ ClientStore::operator()(const Put& msg) } if (is_graph) { - SPtr<GraphModel> model(new GraphModel(uris(), path)); + const std::shared_ptr<GraphModel> model{new GraphModel(uris(), path)}; model->set_properties(properties); add_object(model); } else if (is_block) { @@ -306,33 +317,35 @@ ClientStore::operator()(const Put& msg) p = properties.find(_uris.ingen_prototype); } - SPtr<PluginModel> plug; + std::shared_ptr<PluginModel> plug; if (p->second.is_valid() && (p->second.type() == _uris.forge.URI || p->second.type() == _uris.forge.URID)) { - const URI uri(_uris.forge.str(p->second, false)); - if (!(plug = _plugin(uri))) { - plug = SPtr<PluginModel>( - new PluginModel(uris(), uri, Atom(), Properties())); + const URI plugin_uri(_uris.forge.str(p->second, false)); + if (!(plug = _plugin(plugin_uri))) { + plug = std::make_shared<PluginModel>(uris(), + plugin_uri, + Atom(), + Properties()); add_plugin(plug); } - SPtr<BlockModel> bm(new BlockModel(uris(), plug, path)); + const std::shared_ptr<BlockModel> bm{new BlockModel(uris(), plug, path)}; bm->set_properties(properties); add_object(bm); } else { _log.warn("Block %1% has no prototype\n", path.c_str()); } } else if (is_port) { - PortModel::Direction pdir = (is_output) + const PortModel::Direction pdir = (is_output) ? PortModel::Direction::OUTPUT : PortModel::Direction::INPUT; - uint32_t index = 0; - const Iterator i = properties.find(_uris.lv2_index); + uint32_t index = 0; + const auto i = properties.find(_uris.lv2_index); if (i != properties.end() && i->second.type() == _uris.forge.Int) { index = i->second.get<int32_t>(); } - SPtr<PortModel> p(new PortModel(uris(), path, index, pdir)); + const std::shared_ptr<PortModel> p{new PortModel(uris(), path, index, pdir)}; p->set_properties(properties); add_object(p); } else { @@ -354,9 +367,9 @@ ClientStore::operator()(const Delta& msg) return; } - const Raul::Path path(uri_to_path(uri)); + const raul::Path path(uri_to_path(uri)); - SPtr<ObjectModel> obj = _object(path); + const std::shared_ptr<ObjectModel> obj = _object(path); if (obj) { obj->remove_properties(msg.remove); obj->add_properties(msg.add); @@ -377,7 +390,7 @@ ClientStore::operator()(const SetProperty& msg) predicate.c_str(), _uris.forge.str(value, false)); return; } - SPtr<Resource> subject = _resource(subject_uri); + const std::shared_ptr<Resource> subject = _resource(subject_uri); if (subject) { if (predicate == _uris.ingen_activity) { /* Activity is transient, trigger any live actions (like GUI @@ -387,7 +400,7 @@ ClientStore::operator()(const SetProperty& msg) subject->set_property(predicate, value, msg.ctx); } } else { - SPtr<PluginModel> plugin = _plugin(subject_uri); + const std::shared_ptr<PluginModel> plugin = _plugin(subject_uri); if (plugin) { plugin->set_property(predicate, value); } else if (predicate != _uris.ingen_activity) { @@ -397,26 +410,26 @@ ClientStore::operator()(const SetProperty& msg) } } -SPtr<GraphModel> -ClientStore::connection_graph(const Raul::Path& tail_path, - const Raul::Path& head_path) +std::shared_ptr<GraphModel> +ClientStore::connection_graph(const raul::Path& tail_path, + const raul::Path& head_path) { - SPtr<GraphModel> graph; + std::shared_ptr<GraphModel> graph; if (tail_path.parent() == head_path.parent()) { - graph = dynamic_ptr_cast<GraphModel>(_object(tail_path.parent())); + graph = std::dynamic_pointer_cast<GraphModel>(_object(tail_path.parent())); } if (!graph && tail_path.parent() == head_path.parent().parent()) { - graph = dynamic_ptr_cast<GraphModel>(_object(tail_path.parent())); + graph = std::dynamic_pointer_cast<GraphModel>(_object(tail_path.parent())); } if (!graph && tail_path.parent().parent() == head_path.parent()) { - graph = dynamic_ptr_cast<GraphModel>(_object(head_path.parent())); + graph = std::dynamic_pointer_cast<GraphModel>(_object(head_path.parent())); } if (!graph) { - graph = dynamic_ptr_cast<GraphModel>(_object(tail_path.parent().parent())); + graph = std::dynamic_pointer_cast<GraphModel>(_object(tail_path.parent().parent())); } if (!graph) { @@ -428,21 +441,21 @@ ClientStore::connection_graph(const Raul::Path& tail_path, } bool -ClientStore::attempt_connection(const Raul::Path& tail_path, - const Raul::Path& head_path) +ClientStore::attempt_connection(const raul::Path& tail_path, + const raul::Path& head_path) { - SPtr<PortModel> tail = dynamic_ptr_cast<PortModel>(_object(tail_path)); - SPtr<PortModel> head = dynamic_ptr_cast<PortModel>(_object(head_path)); + auto tail = std::dynamic_pointer_cast<PortModel>(_object(tail_path)); + auto head = std::dynamic_pointer_cast<PortModel>(_object(head_path)); if (tail && head) { - SPtr<GraphModel> graph = connection_graph(tail_path, head_path); - SPtr<ArcModel> arc(new ArcModel(tail, head)); + const std::shared_ptr<GraphModel> graph = connection_graph(tail_path, head_path); + const std::shared_ptr<ArcModel> arc(new ArcModel(tail, head)); graph->add_arc(arc); return true; - } else { - _log.warn("Failed to connect %1% => %2%\n", tail_path, head_path); - return false; } + + _log.warn("Failed to connect %1% => %2%\n", tail_path, head_path); + return false; } void @@ -454,9 +467,9 @@ ClientStore::operator()(const Connect& msg) void ClientStore::operator()(const Disconnect& msg) { - SPtr<PortModel> tail = dynamic_ptr_cast<PortModel>(_object(msg.tail)); - SPtr<PortModel> head = dynamic_ptr_cast<PortModel>(_object(msg.head)); - SPtr<GraphModel> graph = connection_graph(msg.tail, msg.head); + auto tail = std::dynamic_pointer_cast<PortModel>(_object(msg.tail)); + auto head = std::dynamic_pointer_cast<PortModel>(_object(msg.head)); + auto graph = connection_graph(msg.tail, msg.head); if (graph) { graph->remove_arc(tail.get(), head.get()); } @@ -465,8 +478,8 @@ ClientStore::operator()(const Disconnect& msg) void ClientStore::operator()(const DisconnectAll& msg) { - SPtr<GraphModel> graph = dynamic_ptr_cast<GraphModel>(_object(msg.graph)); - SPtr<ObjectModel> object = _object(msg.path); + auto graph = std::dynamic_pointer_cast<GraphModel>(_object(msg.graph)); + auto object = _object(msg.path); if (!graph || !object) { _log.error("Bad disconnect all notification %1% in %2%\n", @@ -475,8 +488,8 @@ ClientStore::operator()(const DisconnectAll& msg) } const GraphModel::Arcs arcs = graph->arcs(); - for (auto a : arcs) { - SPtr<ArcModel> arc = dynamic_ptr_cast<ArcModel>(a.second); + for (const auto& a : arcs) { + auto arc = std::dynamic_pointer_cast<ArcModel>(a.second); if (arc->tail()->parent() == object || arc->head()->parent() == object || arc->tail()->path() == msg.path @@ -486,5 +499,4 @@ ClientStore::operator()(const DisconnectAll& msg) } } -} // namespace client -} // namespace ingen +} // namespace ingen::client diff --git a/src/client/GraphModel.cpp b/src/client/GraphModel.cpp index 90ab2964..45d0eb31 100644 --- a/src/client/GraphModel.cpp +++ b/src/client/GraphModel.cpp @@ -16,48 +16,52 @@ #include "ingen/client/GraphModel.hpp" +#include "ingen/Atom.hpp" #include "ingen/URIs.hpp" #include "ingen/client/ArcModel.hpp" #include "ingen/client/BlockModel.hpp" -#include "ingen/client/ClientStore.hpp" +#include "ingen/client/ObjectModel.hpp" +#include "ingen/client/PortModel.hpp" +#include "raul/Path.hpp" #include <cassert> +#include <map> +#include <memory> #include <string> #include <utility> -namespace ingen { -namespace client { +namespace ingen::client { void -GraphModel::add_child(const SPtr<ObjectModel>& c) +GraphModel::add_child(const std::shared_ptr<ObjectModel>& c) { assert(c->parent().get() == this); - SPtr<PortModel> pm = dynamic_ptr_cast<PortModel>(c); + auto pm = std::dynamic_pointer_cast<PortModel>(c); if (pm) { add_port(pm); return; } - SPtr<BlockModel> bm = dynamic_ptr_cast<BlockModel>(c); + auto bm = std::dynamic_pointer_cast<BlockModel>(c); if (bm) { _signal_new_block.emit(bm); } } bool -GraphModel::remove_child(const SPtr<ObjectModel>& o) +GraphModel::remove_child(const std::shared_ptr<ObjectModel>& o) { assert(o->path().is_child_of(path())); assert(o->parent().get() == this); - SPtr<PortModel> pm = dynamic_ptr_cast<PortModel>(o); + auto pm = std::dynamic_pointer_cast<PortModel>(o); if (pm) { remove_arcs_on(pm); remove_port(pm); } - SPtr<BlockModel> bm = dynamic_ptr_cast<BlockModel>(o); + auto bm = std::dynamic_pointer_cast<BlockModel>(o); if (bm) { _signal_removed_block.emit(bm); } @@ -66,21 +70,21 @@ GraphModel::remove_child(const SPtr<ObjectModel>& o) } void -GraphModel::remove_arcs_on(const SPtr<PortModel>& p) +GraphModel::remove_arcs_on(const std::shared_ptr<PortModel>& p) { // Remove any connections which referred to this object, // since they can't possibly exist anymore - for (auto j = _arcs.begin(); j != _arcs.end();) { + for (auto j = _graph_arcs.begin(); j != _graph_arcs.end();) { auto next = j; ++next; - SPtr<ArcModel> arc = dynamic_ptr_cast<ArcModel>(j->second); + auto arc = std::dynamic_pointer_cast<ArcModel>(j->second); if (arc->tail_path().parent() == p->path() || arc->tail_path() == p->path() || arc->head_path().parent() == p->path() || arc->head_path() == p->path()) { _signal_removed_arc.emit(arc); - _arcs.erase(j); // Cuts our reference + _graph_arcs.erase(j); // Cuts our reference } j = next; } @@ -89,23 +93,23 @@ GraphModel::remove_arcs_on(const SPtr<PortModel>& p) void GraphModel::clear() { - _arcs.clear(); + _graph_arcs.clear(); BlockModel::clear(); - assert(_arcs.empty()); + assert(_graph_arcs.empty()); assert(_ports.empty()); } -SPtr<ArcModel> +std::shared_ptr<ArcModel> GraphModel::get_arc(const Node* tail, const Node* head) { - auto i = _arcs.find(std::make_pair(tail, head)); - if (i != _arcs.end()) { - return dynamic_ptr_cast<ArcModel>(i->second); - } else { - return SPtr<ArcModel>(); + auto i = _graph_arcs.find(std::make_pair(tail, head)); + if (i != _graph_arcs.end()) { + return std::dynamic_pointer_cast<ArcModel>(i->second); } + + return nullptr; } /** Add a connection to this graph. @@ -116,7 +120,7 @@ GraphModel::get_arc(const Node* tail, const Node* head) * this graph is a fatal error. */ void -GraphModel::add_arc(const SPtr<ArcModel>& arc) +GraphModel::add_arc(const std::shared_ptr<ArcModel>& arc) { // Store should have 'resolved' the connection already assert(arc); @@ -130,15 +134,16 @@ GraphModel::add_arc(const SPtr<ArcModel>& arc) assert(arc->head()->parent().get() == this || arc->head()->parent()->parent().get() == this); - SPtr<ArcModel> existing = get_arc( + const std::shared_ptr<ArcModel> existing = get_arc( arc->tail().get(), arc->head().get()); if (existing) { assert(arc->tail() == existing->tail()); assert(arc->head() == existing->head()); } else { - _arcs.emplace(std::make_pair(arc->tail().get(), arc->head().get()), - arc); + _graph_arcs.emplace(std::make_pair(arc->tail().get(), + arc->head().get()), + arc); _signal_new_arc.emit(arc); } } @@ -146,11 +151,11 @@ GraphModel::add_arc(const SPtr<ArcModel>& arc) void GraphModel::remove_arc(const Node* tail, const Node* head) { - auto i = _arcs.find(std::make_pair(tail, head)); - if (i != _arcs.end()) { - SPtr<ArcModel> arc = dynamic_ptr_cast<ArcModel>(i->second); + auto i = _graph_arcs.find(std::make_pair(tail, head)); + if (i != _graph_arcs.end()) { + auto arc = std::dynamic_pointer_cast<ArcModel>(i->second); _signal_removed_arc.emit(arc); - _arcs.erase(i); + _graph_arcs.erase(i); } } @@ -175,5 +180,4 @@ GraphModel::polyphonic() const return poly.is_valid() && poly.get<int32_t>(); } -} // namespace client -} // namespace ingen +} // namespace ingen::client diff --git a/src/client/ObjectModel.cpp b/src/client/ObjectModel.cpp index b1a27590..0c3bf517 100644 --- a/src/client/ObjectModel.cpp +++ b/src/client/ObjectModel.cpp @@ -16,31 +16,35 @@ #include "ingen/client/ObjectModel.hpp" +#include "ingen/Atom.hpp" #include "ingen/Node.hpp" +#include "ingen/Properties.hpp" +#include "ingen/Resource.hpp" #include "ingen/URIs.hpp" +#include "ingen/paths.hpp" +#include "raul/Path.hpp" +#include "raul/Symbol.hpp" #include <cassert> #include <cstdint> +#include <map> #include <string> #include <utility> -namespace ingen { -namespace client { +namespace ingen::client { -ObjectModel::ObjectModel(URIs& uris, const Raul::Path& path) +ObjectModel::ObjectModel(URIs& uris, const raul::Path& path) : Node(uris, path) , _path(path) , _symbol((path == "/") ? "root" : path.symbol()) -{ -} +{} ObjectModel::ObjectModel(const ObjectModel& copy) : Node(copy) , _parent(copy._parent) , _path(copy._path) , _symbol(copy._symbol) -{ -} +{} bool ObjectModel::is_a(const URIs::Quark& type) const @@ -81,34 +85,33 @@ ObjectModel::polyphonic() const * `o` as correct. The paths of the two models MUST be equal. */ void -ObjectModel::set(const SPtr<ObjectModel>& o) +ObjectModel::set(const std::shared_ptr<ObjectModel>& o) { assert(_path == o->path()); if (o->_parent) { _parent = o->_parent; } - for (auto v : o->properties()) { + for (const auto& v : o->properties()) { Resource::set_property(v.first, v.second); _signal_property.emit(v.first, v.second); } } void -ObjectModel::set_path(const Raul::Path& p) +ObjectModel::set_path(const raul::Path& p) { _path = p; - _symbol = Raul::Symbol(p.is_root() ? "root" : p.symbol()); + _symbol = raul::Symbol(p.is_root() ? "root" : p.symbol()); set_uri(path_to_uri(p)); _signal_moved.emit(); } void -ObjectModel::set_parent(const SPtr<ObjectModel>& p) +ObjectModel::set_parent(const std::shared_ptr<ObjectModel>& p) { assert(_path.is_child_of(p->path())); _parent = p; } -} // namespace client -} // namespace ingen +} // namespace ingen::client diff --git a/src/client/PluginModel.cpp b/src/client/PluginModel.cpp index f0e3c3a0..333bf568 100644 --- a/src/client/PluginModel.cpp +++ b/src/client/PluginModel.cpp @@ -17,23 +17,20 @@ #include "ingen/client/PluginModel.hpp" #include "ingen/Atom.hpp" -#include "ingen/client/GraphModel.hpp" #include "ingen/client/PluginUI.hpp" -#include "raul/Path.hpp" -#include "ingen_config.h" - -#include <boost/optional/optional.hpp> +#include "lilv/lilv.h" +#include "lv2/core/lv2.h" +#include "raul/Symbol.hpp" #include <cctype> #include <cstring> -#include <iosfwd> +#include <memory> #include <string> #include <utility> using std::string; -namespace ingen { -namespace client { +namespace ingen::client { LilvWorld* PluginModel::_lilv_world = nullptr; const LilvPlugins* PluginModel::_lilv_plugins = nullptr; @@ -46,13 +43,12 @@ PluginModel::PluginModel(URIs& uris, const Properties& properties) : Resource(uris, uri) , _type(type) - , _fetched(false) { if (!_type.is_valid()) { if (uri.string().find("ingen-internals") != string::npos) { - _type = uris.ingen_Internal.urid; + _type = uris.ingen_Internal.urid_atom(); } else { - _type = uris.lv2_Plugin.urid; // Assume LV2 and hope for the best... + _type = uris.lv2_Plugin.urid_atom(); // Assume LV2 and hope for the best... } } @@ -112,33 +108,39 @@ PluginModel::get_property(const URI& key) const } str = str.substr(last_delim + 1); - std::string symbol = Raul::Symbol::symbolify(str); + const std::string symbol = raul::Symbol::symbolify(str); set_property(_uris.lv2_symbol, _uris.forge.alloc(symbol)); return get_property(key); } if (_lilv_plugin) { - boost::optional<const Atom&> ret; - LilvNode* lv2_pred = lilv_new_uri(_lilv_world, key.c_str()); - LilvNodes* values = lilv_plugin_get_value(_lilv_plugin, lv2_pred); + const Atom* ret = nullptr; + LilvNode* lv2_pred = lilv_new_uri(_lilv_world, key.c_str()); + LilvNodes* values = lilv_plugin_get_value(_lilv_plugin, lv2_pred); lilv_node_free(lv2_pred); - LILV_FOREACH(nodes, i, values) { - const LilvNode* val = lilv_nodes_get(values, i); - if (lilv_node_is_uri(val)) { - ret = set_property( - key, _uris.forge.make_urid(URI(lilv_node_as_uri(val)))); + LILV_FOREACH (nodes, i, values) { + const LilvNode* value = lilv_nodes_get(values, i); + if (lilv_node_is_uri(value)) { + ret = &set_property( + key, _uris.forge.make_urid(URI(lilv_node_as_uri(value)))); break; - } else if (lilv_node_is_string(val)) { - ret = set_property( - key, _uris.forge.alloc(lilv_node_as_string(val))); + } + + if (lilv_node_is_string(value)) { + ret = &set_property( + key, _uris.forge.alloc(lilv_node_as_string(value))); break; - } else if (lilv_node_is_float(val)) { - ret = set_property( - key, _uris.forge.make(lilv_node_as_float(val))); + } + + if (lilv_node_is_float(value)) { + ret = &set_property( + key, _uris.forge.make(lilv_node_as_float(value))); break; - } else if (lilv_node_is_int(val)) { - ret = set_property( - key, _uris.forge.make(lilv_node_as_int(val))); + } + + if (lilv_node_is_int(value)) { + ret = &set_property( + key, _uris.forge.make(lilv_node_as_int(value))); break; } } @@ -153,7 +155,7 @@ PluginModel::get_property(const URI& key) const } void -PluginModel::set(SPtr<PluginModel> p) +PluginModel::set(const std::shared_ptr<PluginModel>& p) { _type = p->_type; @@ -161,7 +163,7 @@ PluginModel::set(SPtr<PluginModel> p) _lilv_plugin = p->_lilv_plugin; } - for (auto v : p->properties()) { + for (const auto& v : p->properties()) { Resource::set_property(v.first, v.second); _signal_property.emit(v.first, v.second); } @@ -176,15 +178,15 @@ PluginModel::add_preset(const URI& uri, const std::string& label) _signal_preset.emit(uri, label); } -Raul::Symbol +raul::Symbol PluginModel::default_block_symbol() const { const Atom& name_atom = get_property(_uris.lv2_symbol); if (name_atom.is_valid() && name_atom.type() == _uris.forge.String) { - return Raul::Symbol::symbolify(name_atom.ptr<char>()); - } else { - return Raul::Symbol("_"); + return raul::Symbol::symbolify(name_atom.ptr<char>()); } + + return raul::Symbol("_"); } string @@ -193,18 +195,18 @@ PluginModel::human_name() const const Atom& name_atom = get_property(_uris.doap_name); if (name_atom.type() == _uris.forge.String) { return name_atom.ptr<char>(); - } else { - return default_block_symbol().c_str(); } + + return default_block_symbol().c_str(); } string -PluginModel::port_human_name(uint32_t i) const +PluginModel::port_human_name(const uint32_t index) const { if (_lilv_plugin) { - const LilvPort* port = lilv_plugin_get_port_by_index(_lilv_plugin, i); + const LilvPort* port = lilv_plugin_get_port_by_index(_lilv_plugin, index); LilvNode* name = lilv_port_get_name(_lilv_plugin, port); - const string ret(lilv_node_as_string(name)); + string ret(lilv_node_as_string(name)); lilv_node_free(name); return ret; } @@ -212,14 +214,14 @@ PluginModel::port_human_name(uint32_t i) const } PluginModel::ScalePoints -PluginModel::port_scale_points(uint32_t i) const +PluginModel::port_scale_points(const uint32_t index) const { // TODO: Non-float scale points ScalePoints points; if (_lilv_plugin) { - const LilvPort* port = lilv_plugin_get_port_by_index(_lilv_plugin, i); + const LilvPort* port = lilv_plugin_get_port_by_index(_lilv_plugin, index); LilvScalePoints* sp = lilv_port_get_scale_points(_lilv_plugin, port); - LILV_FOREACH(scale_points, i, sp) { + LILV_FOREACH (scale_points, i, sp) { const LilvScalePoint* p = lilv_scale_points_get(sp, i); points.emplace( lilv_node_as_float(lilv_scale_point_get_value(p)), @@ -241,12 +243,12 @@ PluginModel::has_ui() const return false; } -SPtr<PluginUI> -PluginModel::ui(ingen::World& world, - SPtr<const BlockModel> block) const +std::shared_ptr<PluginUI> +PluginModel::ui(ingen::World& world, + const std::shared_ptr<const BlockModel>& block) const { if (!_lilv_plugin) { - return SPtr<PluginUI>(); + return nullptr; } return PluginUI::create(world, block, _lilv_plugin); @@ -258,9 +260,9 @@ heading(const std::string& text, bool html, unsigned level) if (html) { const std::string tag = std::string("h") + std::to_string(level); return std::string("<") + tag + ">" + text + "</" + tag + ">\n"; - } else { - return text + ":\n\n"; } + + return text + ":\n\n"; } static std::string @@ -268,13 +270,13 @@ link(const std::string& addr, bool html) { if (html) { return std::string("<a href=\"") + addr + "\">" + addr + "</a>"; - } else { - return addr; } + + return addr; } std::string -PluginModel::get_documentation(const LilvNode* subject, bool html) const +PluginModel::get_documentation(const LilvNode* subject, bool html) { std::string doc; @@ -358,5 +360,4 @@ PluginModel::set_lilv_world(LilvWorld* world) _lilv_plugins = lilv_world_get_all_plugins(_lilv_world); } -} // namespace client -} // namespace ingen +} // namespace ingen::client diff --git a/src/client/PluginUI.cpp b/src/client/PluginUI.cpp index a997d716..61813cab 100644 --- a/src/client/PluginUI.cpp +++ b/src/client/PluginUI.cpp @@ -16,31 +16,40 @@ #include "ingen/client/PluginUI.hpp" -#include "ingen/Interface.hpp" +#include "ingen/Atom.hpp" +#include "ingen/Forge.hpp" #include "ingen/Log.hpp" +#include "ingen/URI.hpp" #include "ingen/URIs.hpp" +#include "ingen/World.hpp" #include "ingen/client/BlockModel.hpp" #include "ingen/client/PortModel.hpp" +#include "lilv/lilv.h" #include "lv2/atom/atom.h" +#include "lv2/core/lv2.h" #include "lv2/ui/ui.h" +#include "raul/Symbol.hpp" +#include "suil/suil.h" + +#include <sigc++/signal.h> #include <cstring> +#include <memory> #include <string> #include <utility> -namespace ingen { -namespace client { +namespace ingen::client { SuilHost* PluginUI::ui_host = nullptr; -static SPtr<const PortModel> +static std::shared_ptr<const PortModel> get_port(PluginUI* ui, uint32_t port_index) { if (port_index >= ui->block()->ports().size()) { ui->world().log().error("%1% UI tried to access invalid port %2%\n", ui->block()->plugin()->uri().c_str(), port_index); - return SPtr<const PortModel>(); + return nullptr; } return ui->block()->ports()[port_index]; } @@ -52,9 +61,9 @@ lv2_ui_write(SuilController controller, uint32_t format, const void* buffer) { - PluginUI* const ui = (PluginUI*)controller; - const URIs& uris = ui->world().uris(); - SPtr<const PortModel> port = get_port(ui, port_index); + auto* const ui = static_cast<PluginUI*>(controller); + const URIs& uris = ui->world().uris(); + auto port = get_port(ui, port_index); if (!port) { return; } @@ -67,10 +76,10 @@ lv2_ui_write(SuilController controller, ui->block()->plugin()->uri().c_str()); return; } - const float value = *(const float*)buffer; + const float value = *static_cast<const float*>(buffer); if (port->value().type() == uris.atom_Float && value == port->value().get<float>()) { - return; // Ignore feedback + return; // Ignore feedback } ui->signal_property_changed()( @@ -79,10 +88,11 @@ lv2_ui_write(SuilController controller, ui->world().forge().make(value), Resource::Graph::DEFAULT); - } else if (format == uris.atom_eventTransfer.urid.get<LV2_URID>()) { - const LV2_Atom* atom = (const LV2_Atom*)buffer; - Atom val = ui->world().forge().alloc( - atom->size, atom->type, LV2_ATOM_BODY_CONST(atom)); + } else if (format == uris.atom_eventTransfer.urid()) { + const auto* atom = static_cast<const LV2_Atom*>(buffer); + const Atom val = + Forge::alloc(atom->size, atom->type, LV2_ATOM_BODY_CONST(atom)); + ui->signal_property_changed()(port->uri(), uris.ingen_activity, val, @@ -97,7 +107,7 @@ lv2_ui_write(SuilController controller, static uint32_t lv2_ui_port_index(SuilController controller, const char* port_symbol) { - PluginUI* const ui = (PluginUI*)controller; + auto* const ui = static_cast<PluginUI*>(controller); const BlockModel::Ports& ports = ui->block()->ports(); for (uint32_t i = 0; i < ports.size(); ++i) { @@ -114,8 +124,8 @@ lv2_ui_subscribe(SuilController controller, uint32_t protocol, const LV2_Feature* const* features) { - PluginUI* const ui = (PluginUI*)controller; - SPtr<const PortModel> port = get_port(ui, port_index); + auto* const ui = static_cast<PluginUI*>(controller); + const std::shared_ptr<const PortModel> port = get_port(ui, port_index); if (!port) { return 1; } @@ -135,8 +145,8 @@ lv2_ui_unsubscribe(SuilController controller, uint32_t protocol, const LV2_Feature* const* features) { - PluginUI* const ui = (PluginUI*)controller; - SPtr<const PortModel> port = get_port(ui, port_index); + auto* const ui = static_cast<PluginUI*>(controller); + auto port = get_port(ui, port_index); if (!port) { return 1; } @@ -150,24 +160,22 @@ lv2_ui_unsubscribe(SuilController controller, return 0; } -PluginUI::PluginUI(ingen::World& world, - SPtr<const BlockModel> block, - LilvUIs* uis, - const LilvUI* ui, - const LilvNode* ui_type) - : _world(world) - , _block(std::move(block)) - , _instance(nullptr) - , _uis(uis) - , _ui(ui) - , _ui_node(lilv_node_duplicate(lilv_ui_get_uri(ui))) - , _ui_type(lilv_node_duplicate(ui_type)) -{ -} +PluginUI::PluginUI(ingen::World& world, + std::shared_ptr<const BlockModel> block, + LilvUIs* uis, + const LilvUI* ui, + const LilvNode* ui_type) + : _world(world) + , _block(std::move(block)) + , _uis(uis) + , _ui(ui) + , _ui_node(lilv_node_duplicate(lilv_ui_get_uri(ui))) + , _ui_type(lilv_node_duplicate(ui_type)) +{} PluginUI::~PluginUI() { - for (uint32_t i : _subscribed_ports) { + for (const uint32_t i : _subscribed_ports) { lv2_ui_unsubscribe(this, i, 0, nullptr); } suil_instance_free(_instance); @@ -177,10 +185,10 @@ PluginUI::~PluginUI() lilv_world_unload_resource(_world.lilv_world(), lilv_ui_get_uri(_ui)); } -SPtr<PluginUI> -PluginUI::create(ingen::World& world, - SPtr<const BlockModel> block, - const LilvPlugin* plugin) +std::shared_ptr<PluginUI> +PluginUI::create(ingen::World& world, + const std::shared_ptr<const BlockModel>& block, + const LilvPlugin* plugin) { if (!PluginUI::ui_host) { PluginUI::ui_host = suil_host_new(lv2_ui_write, @@ -196,7 +204,7 @@ PluginUI::create(ingen::World& world, LilvUIs* uis = lilv_plugin_get_uis(plugin); const LilvUI* ui = nullptr; const LilvNode* ui_type = nullptr; - LILV_FOREACH(uis, u, uis) { + LILV_FOREACH (uis, u, uis) { const LilvUI* this_ui = lilv_uis_get(uis, u); if (lilv_ui_is_supported(this_ui, suil_ui_supported, @@ -210,11 +218,11 @@ PluginUI::create(ingen::World& world, if (!ui) { lilv_node_free(gtk_ui); - return SPtr<PluginUI>(); + return nullptr; } // Create the PluginUI, but don't instantiate yet - SPtr<PluginUI> ret(new PluginUI(world, block, uis, ui, ui_type)); + std::shared_ptr<PluginUI> ret(new PluginUI(world, block, uis, ui, ui_type)); ret->_features = world.lv2_features().lv2_features( world, const_cast<BlockModel*>(block.get())); @@ -238,7 +246,7 @@ PluginUI::instantiate() LilvNode* ui_plugin = lilv_new_uri(lworld, LV2_UI__plugin); LilvNodes* notes = lilv_world_find_nodes( lworld, lilv_ui_get_uri(_ui), ui_portNotification, nullptr); - LILV_FOREACH(nodes, n, notes) { + LILV_FOREACH (nodes, n, notes) { const LilvNode* note = lilv_nodes_get(notes, n); const LilvNode* sym = lilv_world_get(lworld, note, uris.lv2_symbol, nullptr); const LilvNode* plug = lilv_world_get(lworld, note, ui_plugin, nullptr); @@ -253,7 +261,7 @@ PluginUI::instantiate() plugin_uri, lilv_node_as_string(_ui_node)); } else if (!strcmp(lilv_node_as_uri(plug), plugin_uri.c_str())) { // Notification is valid and for this plugin - uint32_t index = lv2_ui_port_index(this, lilv_node_as_string(sym)); + const uint32_t index = lv2_ui_port_index(this, lilv_node_as_string(sym)); if (index != LV2UI_INVALID_PORT_INDEX) { lv2_ui_subscribe(this, index, 0, nullptr); _subscribed_ports.insert(index); @@ -287,7 +295,7 @@ PluginUI::instantiate() if (!_instance) { _world.log().error("Failed to instantiate LV2 UI\n"); // Cancel any subscriptions - for (uint32_t i : _subscribed_ports) { + for (const uint32_t i : _subscribed_ports) { lv2_ui_unsubscribe(this, i, 0, nullptr); } return false; @@ -299,7 +307,7 @@ PluginUI::instantiate() SuilWidget PluginUI::get_widget() { - return (SuilWidget*)suil_instance_get_widget(_instance); + return suil_instance_get_widget(_instance); } void @@ -337,5 +345,4 @@ PluginUI::is_resizable() const return !fs_matches && !nrs_matches; } -} // namespace client -} // namespace ingen +} // namespace ingen::client diff --git a/src/client/PortModel.cpp b/src/client/PortModel.cpp index 6b2d011f..73f273c7 100644 --- a/src/client/PortModel.cpp +++ b/src/client/PortModel.cpp @@ -14,14 +14,20 @@ along with Ingen. If not, see <http://www.gnu.org/licenses/>. */ -#include "ingen/client/BlockModel.hpp" #include "ingen/client/PortModel.hpp" +#include "ingen/Properties.hpp" +#include "ingen/URI.hpp" +#include "ingen/URIs.hpp" +#include "ingen/client/ObjectModel.hpp" +#include "lv2/urid/urid.h" + #include <cstdint> +#include <map> +#include <memory> #include <utility> -namespace ingen { -namespace client { +namespace ingen::client { void PortModel::on_property(const URI& uri, const Atom& value) @@ -55,7 +61,7 @@ bool PortModel::is_uri() const { // FIXME: Resource::has_property doesn't work, URI != URID - for (auto p : properties()) { + for (const auto& p : properties()) { if (p.second.type() == _uris.atom_URID && static_cast<LV2_URID>(p.second.get<int32_t>()) == _uris.atom_URID) { return true; @@ -65,11 +71,11 @@ PortModel::is_uri() const } void -PortModel::set(const SPtr<ObjectModel>& model) +PortModel::set(const std::shared_ptr<ObjectModel>& model) { ObjectModel::set(model); - SPtr<PortModel> port = dynamic_ptr_cast<PortModel>(model); + auto port = std::dynamic_pointer_cast<PortModel>(model); if (port) { _index = port->_index; _direction = port->_direction; @@ -77,5 +83,4 @@ PortModel::set(const SPtr<ObjectModel>& model) } } -} // namespace client -} // namespace ingen +} // namespace ingen::client diff --git a/src/client/ingen_client.cpp b/src/client/ingen_client.cpp index f76fae0b..63705ebc 100644 --- a/src/client/ingen_client.cpp +++ b/src/client/ingen_client.cpp @@ -15,19 +15,26 @@ */ #include "ingen/Module.hpp" -#include "ingen/World.hpp" -#include "ingen_config.h" -struct IngenClientModule : public ingen::Module { +namespace ingen { + +class World; + +namespace client { + +struct ClientModule : public ingen::Module { void load(ingen::World& world) override {} }; +} // namespace client +} // namespace ingen + extern "C" { -ingen::Module* +INGEN_MODULE_EXPORT ingen::Module* ingen_module_load() { - return new IngenClientModule(); + return new ingen::client::ClientModule(); } } // extern "C" diff --git a/src/client/meson.build b/src/client/meson.build new file mode 100644 index 00000000..7c040634 --- /dev/null +++ b/src/client/meson.build @@ -0,0 +1,50 @@ +# Copyright 2022 David Robillard <d@drobilla.net> +# SPDX-License-Identifier: 0BSD OR GPL-3.0-or-later + +################ +# Dependencies # +################ + +sigcpp_dep = dependency('sigc++-2.0', include_type: 'system') + +########## +# Module # +########## + +client_sources = files( + 'BlockModel.cpp', + 'ClientStore.cpp', + 'GraphModel.cpp', + 'ObjectModel.cpp', + 'PluginModel.cpp', + 'PluginUI.cpp', + 'PortModel.cpp', + 'ingen_client.cpp', +) + +client_dependencies = [ + boost_dep, + ingen_dep, + lilv_dep, + lv2_dep, + raul_dep, + sigcpp_dep, + suil_dep, +] + +libingen_client = shared_library( + 'ingen_client', + client_sources, + cpp_args: cpp_suppressions + platform_defines + ['-DINGEN_CLIENT_INTERNAL'], + dependencies: client_dependencies, + gnu_symbol_visibility: 'hidden', + implicit_include_directories: false, + include_directories: ingen_include_dirs, + install: true, + install_dir: ingen_module_dir, +) + +ingen_client_dep = declare_dependency( + dependencies: client_dependencies, + link_with: libingen_client, +) diff --git a/src/client/wscript b/src/client/wscript deleted file mode 100644 index 394c9e4d..00000000 --- a/src/client/wscript +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python - - -def build(bld): - obj = bld(features = 'cxx cxxshlib', - cflags = ['-fvisibility=hidden'], - includes = ['../..'], - export_includes = ['../..'], - name = 'libingen_client', - target = 'ingen_client', - install_path = '${LIBDIR}', - use = 'libingen', - uselib = 'GLIBMM LV2 LILV SUIL RAUL SERD SORD SIGCPP') - - obj.source = ''' - BlockModel.cpp - ClientStore.cpp - GraphModel.cpp - ObjectModel.cpp - PluginModel.cpp - PluginUI.cpp - PortModel.cpp - ingen_client.cpp - ''' |