diff options
author | David Robillard <d@drobilla.net> | 2016-09-18 21:36:48 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2016-09-18 21:40:46 -0400 |
commit | bb64f80bb139314a06e0b22fddbea7a330b6e149 (patch) | |
tree | 51e78a387bc8f1df6ecff3c1799ae7f0dc3f2bdc /src/client/BlockModel.cpp | |
parent | 01deca45d8aa5fbfff75e204cd248a9dd79ab041 (diff) | |
download | ingen-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.cpp | 31 |
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 { |