diff options
Diffstat (limited to 'src/client/NodeModel.cpp')
-rw-r--r-- | src/client/NodeModel.cpp | 270 |
1 files changed, 0 insertions, 270 deletions
diff --git a/src/client/NodeModel.cpp b/src/client/NodeModel.cpp deleted file mode 100644 index 06a3320d..00000000 --- a/src/client/NodeModel.cpp +++ /dev/null @@ -1,270 +0,0 @@ -/* - This file is part of Ingen. - Copyright 2007-2012 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 - Software Foundation, either version 3 of the License, or any later version. - - Ingen is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for details. - - You should have received a copy of the GNU Affero General Public License - along with Ingen. If not, see <http://www.gnu.org/licenses/>. -*/ - -#include <cassert> -#include <cmath> -#include <string> - -#include "ingen/client/NodeModel.hpp" -#include "ingen/URIs.hpp" -#include "ingen/World.hpp" - -namespace Ingen { -namespace Client { - -NodeModel::NodeModel(URIs& uris, - SharedPtr<PluginModel> plugin, - const Raul::Path& path) - : ObjectModel(uris, path) - , _plugin_uri(plugin->uri()) - , _plugin(plugin) - , _num_values(0) - , _min_values(0) - , _max_values(0) -{ -} - -NodeModel::NodeModel(URIs& uris, - const Raul::URI& plugin_uri, - const Raul::Path& path) - : ObjectModel(uris, path) - , _plugin_uri(plugin_uri) - , _num_values(0) - , _min_values(0) - , _max_values(0) -{ -} - -NodeModel::NodeModel(const NodeModel& 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)) -{ - memcpy(_min_values, copy._min_values, sizeof(float) * _num_values); - memcpy(_max_values, copy._max_values, sizeof(float) * _num_values); -} - -NodeModel::~NodeModel() -{ - clear(); -} - -void -NodeModel::remove_port(SharedPtr<PortModel> port) -{ - for (Ports::iterator i = _ports.begin(); i != _ports.end(); ++i) { - if ((*i) == port) { - _ports.erase(i); - break; - } - } - _signal_removed_port.emit(port); -} - -void -NodeModel::remove_port(const Raul::Path& port_path) -{ - for (Ports::iterator i = _ports.begin(); i != _ports.end(); ++i) { - if ((*i)->path() == port_path) { - _ports.erase(i); - break; - } - } -} - -void -NodeModel::clear() -{ - _ports.clear(); - assert(_ports.empty()); - delete[] _min_values; - delete[] _max_values; - _min_values = 0; - _max_values = 0; -} - -void -NodeModel::add_child(SharedPtr<ObjectModel> c) -{ - assert(c->parent().get() == this); - - //ObjectModel::add_child(c); - - SharedPtr<PortModel> pm = PtrCast<PortModel>(c); - assert(pm); - add_port(pm); -} - -bool -NodeModel::remove_child(SharedPtr<ObjectModel> c) -{ - assert(c->path().is_child_of(path())); - assert(c->parent().get() == this); - - //bool ret = ObjectModel::remove_child(c); - - SharedPtr<PortModel> pm = PtrCast<PortModel>(c); - assert(pm); - remove_port(pm); - - //return ret; - return true; -} - -void -NodeModel::add_port(SharedPtr<PortModel> 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(_ports.begin(), _ports.end(), pm) == _ports.end()); - - _ports.push_back(pm); - _signal_new_port.emit(pm); -} - -SharedPtr<const PortModel> -NodeModel::get_port(const Raul::Symbol& symbol) const -{ - for (Ports::const_iterator i = _ports.begin(); i != _ports.end(); ++i) - if ((*i)->symbol() == symbol) - return (*i); - return SharedPtr<PortModel>(); -} - -Ingen::GraphObject* -NodeModel::port(uint32_t index) const -{ - assert(index < num_ports()); - return const_cast<Ingen::GraphObject*>( - dynamic_cast<const Ingen::GraphObject*>(_ports[index].get())); -} - -void -NodeModel::default_port_value_range(SharedPtr<const PortModel> port, - float& min, - float& max, - uint32_t srate) const -{ - // Default control values - min = 0.0; - max = 1.0; - - // Get range from client-side LV2 data - if (_plugin && _plugin->type() == PluginModel::LV2) { - if (!_min_values) { - _num_values = lilv_plugin_get_num_ports(_plugin->lilv_plugin()); - _min_values = new float[_num_values]; - _max_values = new float[_num_values]; - lilv_plugin_get_port_ranges_float(_plugin->lilv_plugin(), - _min_values, _max_values, 0); - } - - if (!std::isnan(_min_values[port->index()])) - min = _min_values[port->index()]; - if (!std::isnan(_max_values[port->index()])) - max = _max_values[port->index()]; - } - - if (port->port_property(_uris.lv2_sampleRate)) { - min *= srate; - max *= srate; - } -} - -void -NodeModel::port_value_range(SharedPtr<const PortModel> port, - float& min, float& max, uint32_t srate) const -{ - assert(port->parent().get() == this); - - default_port_value_range(port, min, max); - - // Possibly overriden - const Raul::Atom& min_atom = port->get_property(_uris.lv2_minimum); - const Raul::Atom& max_atom = port->get_property(_uris.lv2_maximum); - if (min_atom.type() == _uris.forge.Float) - min = min_atom.get_float(); - if (max_atom.type() == _uris.forge.Float) - max = max_atom.get_float(); - - if (max <= min) - max = min + 1.0; - - if (port->port_property(_uris.lv2_sampleRate)) { - min *= srate; - max *= srate; - } -} - -std::string -NodeModel::label() const -{ - const Raul::Atom& name_property = get_property(_uris.lv2_name); - if (name_property.type() == _uris.forge.String) { - return name_property.get_string(); - } else if (plugin_model()) { - return plugin_model()->human_name(); - } else { - return symbol().c_str(); - } -} - -std::string -NodeModel::port_label(SharedPtr<const PortModel> port) const -{ - const Raul::Atom& name = port->get_property(Raul::URI(LV2_CORE__name)); - if (name.is_valid()) { - return name.get_string(); - } - - if (_plugin && _plugin->type() == PluginModel::LV2) { - LilvWorld* w = _plugin->lilv_world(); - const LilvPlugin* plug = _plugin->lilv_plugin(); - LilvNode* sym = lilv_new_string(w, port->symbol().c_str()); - const LilvPort* lport = lilv_plugin_get_port_by_symbol(plug, sym); - if (lport) { - LilvNode* lname = lilv_port_get_name(plug, lport); - if (lname && lilv_node_is_string(lname)) { - std::string ret(lilv_node_as_string(lname)); - lilv_node_free(lname); - return ret; - } - lilv_node_free(lname); - } - } - - return port->symbol().c_str(); -} - -void -NodeModel::set(SharedPtr<ObjectModel> model) -{ - SharedPtr<NodeModel> node = PtrCast<NodeModel>(model); - if (node) { - _plugin_uri = node->_plugin_uri; - _plugin = node->_plugin; - } - - ObjectModel::set(model); -} - -} // namespace Client -} // namespace Ingen |