summaryrefslogtreecommitdiffstats
path: root/src/client/GraphModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/GraphModel.cpp')
-rw-r--r--src/client/GraphModel.cpp92
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