diff options
Diffstat (limited to 'src/client/GraphModel.cpp')
-rw-r--r-- | src/client/GraphModel.cpp | 92 |
1 files changed, 50 insertions, 42 deletions
diff --git a/src/client/GraphModel.cpp b/src/client/GraphModel.cpp index 90ab2964..fe119361 100644 --- a/src/client/GraphModel.cpp +++ b/src/client/GraphModel.cpp @@ -14,50 +14,65 @@ along with Ingen. If not, see <http://www.gnu.org/licenses/>. */ -#include "ingen/client/GraphModel.hpp" - -#include "ingen/URIs.hpp" -#include "ingen/client/ArcModel.hpp" -#include "ingen/client/BlockModel.hpp" -#include "ingen/client/ClientStore.hpp" +#include <ingen/client/GraphModel.hpp> + +#include <ingen/Atom.hpp> +#include <ingen/URI.hpp> +#include <ingen/URIs.hpp> +#include <ingen/client/ArcModel.hpp> +#include <ingen/client/BlockModel.hpp> +#include <ingen/client/ObjectModel.hpp> +#include <ingen/client/PortModel.hpp> +#include <raul/Path.hpp> +#include <sigc++/signal.h> #include <cassert> +#include <map> +#include <memory> #include <string> #include <utility> namespace ingen { -namespace client { +class Node; +} // namespace ingen + +namespace ingen::client { + +GraphModel::GraphModel(URIs& uris, const raul::Path& graph_path) + : BlockModel{uris, static_cast<const URI&>(uris.ingen_Graph), graph_path} +{ +} 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 +81,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 +104,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 +131,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 +145,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 +162,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); } } @@ -168,12 +184,4 @@ GraphModel::internal_poly() const return poly.is_valid() ? poly.get<int32_t>() : 1; } -bool -GraphModel::polyphonic() const -{ - const Atom& poly = get_property(_uris.ingen_polyphonic); - return poly.is_valid() && poly.get<int32_t>(); -} - -} // namespace client -} // namespace ingen +} // namespace ingen::client |