summaryrefslogtreecommitdiffstats
path: root/src/client/BlockModel.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2016-09-18 21:36:48 -0400
committerDavid Robillard <d@drobilla.net>2016-09-18 21:40:46 -0400
commitbb64f80bb139314a06e0b22fddbea7a330b6e149 (patch)
tree51e78a387bc8f1df6ecff3c1799ae7f0dc3f2bdc /src/client/BlockModel.cpp
parent01deca45d8aa5fbfff75e204cd248a9dd79ab041 (diff)
downloadingen-bb64f80bb139314a06e0b22fddbea7a330b6e149.tar.gz
ingen-bb64f80bb139314a06e0b22fddbea7a330b6e149.tar.bz2
ingen-bb64f80bb139314a06e0b22fddbea7a330b6e149.zip
Preliminary parameter support workparameters
Diffstat (limited to 'src/client/BlockModel.cpp')
-rw-r--r--src/client/BlockModel.cpp31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/client/BlockModel.cpp b/src/client/BlockModel.cpp
index e3f7d22f..95092701 100644
--- a/src/client/BlockModel.cpp
+++ b/src/client/BlockModel.cpp
@@ -1,6 +1,6 @@
/*
This file is part of Ingen.
- Copyright 2007-2015 David Robillard <http://drobilla.net/>
+ Copyright 2007-2016 David Robillard <http://drobilla.net/>
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
@@ -18,9 +18,10 @@
#include <cmath>
#include <string>
-#include "ingen/client/BlockModel.hpp"
#include "ingen/URIs.hpp"
#include "ingen/World.hpp"
+#include "ingen/client/BlockModel.hpp"
+#include "ingen/client/ParameterModel.hpp"
namespace Ingen {
namespace Client {
@@ -106,8 +107,16 @@ BlockModel::add_child(SPtr<ObjectModel> c)
//ObjectModel::add_child(c);
SPtr<PortModel> pm = dynamic_ptr_cast<PortModel>(c);
- assert(pm);
- add_port(pm);
+ if (pm) {
+ add_port(pm);
+ return;
+ }
+
+ SPtr<ParameterModel> am = dynamic_ptr_cast<ParameterModel>(c);
+ if (am) {
+ add_parameter(am);
+ return;
+ }
}
bool
@@ -140,6 +149,20 @@ BlockModel::add_port(SPtr<PortModel> pm)
_signal_new_port.emit(pm);
}
+void
+BlockModel::add_parameter(SPtr<ParameterModel> pm)
+{
+ assert(pm);
+ assert(pm->path().is_child_of(path()));
+ assert(pm->parent().get() == this);
+
+ // Store should have handled this by merging the two
+ assert(find(_parameters.begin(), _parameters.end(), pm) == _parameters.end());
+
+ _parameters.push_back(pm);
+ _signal_new_parameter.emit(pm);
+}
+
SPtr<const PortModel>
BlockModel::get_port(const Raul::Symbol& symbol) const
{