diff options
author | David Robillard <d@drobilla.net> | 2011-06-07 02:44:16 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-06-07 02:44:16 +0000 |
commit | d42b83ffe581651886ca0874b6b75dcbb6127aea (patch) | |
tree | 0fd2f18a1c7748fc2f2287cd19d6e546100b6ce3 | |
parent | 92de17413f62e973b21447a6001371ca98e025e0 (diff) | |
download | ingen-d42b83ffe581651886ca0874b6b75dcbb6127aea.tar.gz ingen-d42b83ffe581651886ca0874b6b75dcbb6127aea.tar.bz2 ingen-d42b83ffe581651886ca0874b6b75dcbb6127aea.zip |
Remove use of smart pointers in FlowCanvas entirely.
Since FlowCanvas's containers own their children, there is no real benefit to using smart pointers for objects, though there is overhead. There are no longer any add or remove methods for containers, simply create (new) and destroy (delete) objects and things should work as expected.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@3366 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r-- | src/gui/App.cpp | 7 | ||||
-rw-r--r-- | src/gui/Connection.cpp | 12 | ||||
-rw-r--r-- | src/gui/Connection.hpp | 10 | ||||
-rw-r--r-- | src/gui/NodeModule.cpp | 33 | ||||
-rw-r--r-- | src/gui/NodeModule.hpp | 9 | ||||
-rw-r--r-- | src/gui/PatchCanvas.cpp | 82 | ||||
-rw-r--r-- | src/gui/PatchCanvas.hpp | 10 | ||||
-rw-r--r-- | src/gui/PatchPortModule.cpp | 7 | ||||
-rw-r--r-- | src/gui/Port.cpp | 17 | ||||
-rw-r--r-- | src/gui/Port.hpp | 16 |
10 files changed, 95 insertions, 108 deletions
diff --git a/src/gui/App.cpp b/src/gui/App.cpp index d76ca7d6..edd4ec06 100644 --- a/src/gui/App.cpp +++ b/src/gui/App.cpp @@ -218,10 +218,11 @@ App::port_activity(Port* port) inserted.first->second = false; if (port->is_output()) { - for (Port::Connections::const_iterator i = port->connections().begin(); i != port->connections().end(); ++i) { - const SharedPtr<Port> dst = PtrCast<Port>(i->lock()->dest().lock()); + for (Port::Connections::const_iterator i = port->connections().begin(); + i != port->connections().end(); ++i) { + Port* const dst = dynamic_cast<Port*>((*i)->dest()); if (dst) - port_activity(dst.get()); + port_activity(dst); } } diff --git a/src/gui/Connection.cpp b/src/gui/Connection.cpp index 5d1ceed7..511f6044 100644 --- a/src/gui/Connection.cpp +++ b/src/gui/Connection.cpp @@ -25,15 +25,15 @@ using namespace std; namespace Ingen { namespace GUI { -Connection::Connection(FlowCanvas::Canvas& canvas, - boost::shared_ptr<const ConnectionModel> model, - boost::shared_ptr<FlowCanvas::Connectable> src, - boost::shared_ptr<FlowCanvas::Connectable> dst, - uint32_t color) +Connection::Connection(FlowCanvas::Canvas& canvas, + boost::shared_ptr<const ConnectionModel> model, + FlowCanvas::Connectable* src, + FlowCanvas::Connectable* dst, + uint32_t color) : FlowCanvas::Connection(canvas, src, dst, color) , _connection_model(model) { - boost::shared_ptr<Port> src_port = boost::dynamic_pointer_cast<Port>(src); + Port* const src_port = dynamic_cast<Port*>(src); if (src_port) _bpath.property_dash() = src_port->dash(); } diff --git a/src/gui/Connection.hpp b/src/gui/Connection.hpp index 7bd39ff5..395f5e62 100644 --- a/src/gui/Connection.hpp +++ b/src/gui/Connection.hpp @@ -37,11 +37,11 @@ namespace GUI { class Connection : public FlowCanvas::Connection { public: - Connection(FlowCanvas::Canvas& canvas, - boost::shared_ptr<const ConnectionModel> model, - boost::shared_ptr<FlowCanvas::Connectable> src, - boost::shared_ptr<FlowCanvas::Connectable> dst, - uint32_t color); + Connection(FlowCanvas::Canvas& canvas, + boost::shared_ptr<const ConnectionModel> model, + FlowCanvas::Connectable* src, + FlowCanvas::Connectable* dst, + uint32_t color); SharedPtr<const ConnectionModel> model() const { return _connection_model; } diff --git a/src/gui/NodeModule.cpp b/src/gui/NodeModule.cpp index 20f6beb3..ebbca29a 100644 --- a/src/gui/NodeModule.cpp +++ b/src/gui/NodeModule.cpp @@ -53,9 +53,9 @@ NodeModule::NodeModule(PatchCanvas& canvas, assert(_node); node->signal_new_port().connect( - sigc::bind(sigc::mem_fun(this, &NodeModule::add_port), true)); + sigc::bind(sigc::mem_fun(this, &NodeModule::new_port_view), true)); node->signal_removed_port().connect( - sigc::hide_return(sigc::mem_fun(this, &NodeModule::remove_port))); + sigc::hide_return(sigc::mem_fun(this, &NodeModule::delete_port_view))); node->signal_property().connect( sigc::mem_fun(this, &NodeModule::property_changed)); node->signal_moved().connect( @@ -105,7 +105,7 @@ NodeModule::create(PatchCanvas& canvas, for (NodeModel::Ports::const_iterator p = node->ports().begin(); p != node->ports().end(); ++p) - ret->add_port(*p, false); + ret->new_port_view(*p, false); ret->set_stacked_border(node->polyphonic()); @@ -134,7 +134,7 @@ NodeModule::show_human_names(bool b) } for (Ports::const_iterator i = ports().begin(); i != ports().end(); ++i) { - SharedPtr<Ingen::GUI::Port> port = PtrCast<Ingen::GUI::Port>(*i); + Ingen::GUI::Port* const port = dynamic_cast<Ingen::GUI::Port*>(*i); Glib::ustring label(port->model()->symbol().c_str()); if (b) { const Raul::Atom& name_property = port->model()->get_property(uris.lv2_name); @@ -178,7 +178,7 @@ void NodeModule::plugin_changed() { for (Ports::iterator p = ports().begin(); p != ports().end(); ++p) - PtrCast<Ingen::GUI::Port>(*p)->update_metadata(); + dynamic_cast<Ingen::GUI::Port*>(*p)->update_metadata(); } void @@ -251,10 +251,10 @@ NodeModule::rename() } void -NodeModule::add_port(SharedPtr<const PortModel> port, bool resize_to_fit) +NodeModule::new_port_view(SharedPtr<const PortModel> port, bool resize_to_fit) { - Module::add_port(Port::create(PtrCast<NodeModule>(shared_from_this()), port, - App::instance().configuration()->name_style() == Configuration::HUMAN)); + Port::create(*this, port, + App::instance().configuration()->name_style() == Configuration::HUMAN); port->signal_value_changed().connect( sigc::bind<0>(sigc::mem_fun(this, &NodeModule::value_changed), @@ -264,24 +264,23 @@ NodeModule::add_port(SharedPtr<const PortModel> port, bool resize_to_fit) resize(); } -boost::shared_ptr<Port> +Port* NodeModule::port(boost::shared_ptr<const PortModel> model) { for (Ports::const_iterator p = ports().begin(); p != ports().end(); ++p) { - SharedPtr<Port> port = PtrCast<Port>(*p); + Port* const port = dynamic_cast<Port*>(*p); if (port->model() == model) return port; } - return boost::shared_ptr<Port>(); + return NULL; } void -NodeModule::remove_port(SharedPtr<const PortModel> model) +NodeModule::delete_port_view(SharedPtr<const PortModel> model) { - SharedPtr<Port> p = port(model); + Port* p = port(model); if (p) { - Module::remove_port(p); - p.reset(); + delete p; } else { warn << "Failed to find port on module " << model->path() << endl; } @@ -401,9 +400,9 @@ NodeModule::property_changed(const URI& key, const Atom& value) } else if (key == uris.ingen_selected) { if (value.get_bool() != selected()) { if (value.get_bool()) - _canvas->select_item(shared_from_this()); + _canvas->select_item(this); else - _canvas->unselect_item(shared_from_this()); + _canvas->unselect_item(this); } } break; diff --git a/src/gui/NodeModule.hpp b/src/gui/NodeModule.hpp index 7a62b87f..7bf6f996 100644 --- a/src/gui/NodeModule.hpp +++ b/src/gui/NodeModule.hpp @@ -1,4 +1,5 @@ -/* This file is part of In* Copyright 2007-2011 David Robillard <http://drobilla.net> +/* This file is part of Ingen + * Copyright 2007-2011 David Robillard <http://drobilla.net> * * Ingen is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software @@ -55,9 +56,9 @@ public: virtual ~NodeModule(); - boost::shared_ptr<Port> port(boost::shared_ptr<const PortModel> model); + Port* port(boost::shared_ptr<const PortModel> model); - void remove_port(SharedPtr<const PortModel> port); + void delete_port_view(SharedPtr<const PortModel> port); virtual void store_location(); void show_human_names(bool b); @@ -78,7 +79,7 @@ protected: void rename(); void property_changed(const Raul::URI& predicate, const Raul::Atom& value); - void add_port(SharedPtr<const PortModel> port, bool resize=true); + void new_port_view(SharedPtr<const PortModel> port, bool resize=true); void value_changed(uint32_t index, const Raul::Atom& value); void plugin_changed(); diff --git a/src/gui/PatchCanvas.cpp b/src/gui/PatchCanvas.cpp index 68a4cbab..0b5d4056 100644 --- a/src/gui/PatchCanvas.cpp +++ b/src/gui/PatchCanvas.cpp @@ -305,11 +305,11 @@ PatchCanvas::show_human_names(bool b) { _human_names = b; FOREACH_ITEM(m, items()) { - boost::shared_ptr<NodeModule> mod = boost::dynamic_pointer_cast<NodeModule>(*m); + NodeModule* mod = dynamic_cast<NodeModule*>(*m); if (mod) mod->show_human_names(b); - boost::shared_ptr<PatchPortModule> pmod = boost::dynamic_pointer_cast<PatchPortModule>(*m); + PatchPortModule* pmod = dynamic_cast<PatchPortModule*>(*m); if (pmod) pmod->show_human_names(b); } @@ -320,7 +320,7 @@ PatchCanvas::show_port_names(bool b) { _show_port_names = b; FOREACH_ITEM(i, items()) { - boost::shared_ptr<FlowCanvas::Module> m = boost::dynamic_pointer_cast<FlowCanvas::Module>(*i); + FlowCanvas::Module* m = dynamic_cast<FlowCanvas::Module*>(*i); if (m) m->set_show_port_labels(b); } @@ -390,7 +390,6 @@ PatchCanvas::add_node(SharedPtr<const NodeModel> nm) module->set_icon(App::instance().icon_from_path(plugm->icon_path(), 100)); } - add_item(module); module->show(); _views.insert(std::make_pair(nm, module)); } @@ -401,7 +400,6 @@ PatchCanvas::remove_node(SharedPtr<const NodeModel> nm) Views::iterator i = _views.find(nm); if (i != _views.end()) { - remove_item(i->second); _views.erase(i); } } @@ -411,7 +409,6 @@ PatchCanvas::add_port(SharedPtr<const PortModel> pm) { SharedPtr<PatchPortModule> view = PatchPortModule::create(*this, pm, _human_names); _views.insert(std::make_pair(pm, view)); - add_item(view); view->show(); } @@ -422,43 +419,39 @@ PatchCanvas::remove_port(SharedPtr<const PortModel> pm) // Port on this patch if (i != _views.end()) { - bool ret = remove_item(i->second); - if (!ret) - warn << "Failed to remove port item " << pm->path() << endl; - i->second.reset(); _views.erase(i); } else { SharedPtr<NodeModule> module = PtrCast<NodeModule>(_views[pm->parent()]); - module->remove_port(pm); + module->delete_port_view(pm); } assert(_views.find(pm) == _views.end()); } -SharedPtr<FlowCanvas::Port> +FlowCanvas::Port* PatchCanvas::get_port_view(SharedPtr<PortModel> port) { SharedPtr<FlowCanvas::Module> module = _views[port]; // Port on this patch if (module) { - return (PtrCast<PatchPortModule>(module)) - ? *(PtrCast<PatchPortModule>(module)->ports().begin()) - : PtrCast<FlowCanvas::Port>(module); + return (dynamic_cast<PatchPortModule*>(module.get())) + ? *(dynamic_cast<PatchPortModule*>(module.get())->ports().begin()) + : dynamic_cast<FlowCanvas::Port*>(module.get()); } else { module = PtrCast<NodeModule>(_views[port->parent()]); if (module) { for (Module::Ports::const_iterator p = module->ports().begin(); p != module->ports().end(); ++p) { - boost::shared_ptr<GUI::Port> pv = boost::dynamic_pointer_cast<GUI::Port>(*p); + GUI::Port* pv = dynamic_cast<GUI::Port*>(*p); if (pv && pv->model() == port) return pv; } } } - return SharedPtr<FlowCanvas::Port>(); + return NULL; } void @@ -466,14 +459,13 @@ PatchCanvas::connection(SharedPtr<const ConnectionModel> cm) { assert(cm); - const SharedPtr<FlowCanvas::Port> src = get_port_view(cm->src_port()); - const SharedPtr<FlowCanvas::Port> dst = get_port_view(cm->dst_port()); + FlowCanvas::Port* const src = get_port_view(cm->src_port()); + FlowCanvas::Port* const dst = get_port_view(cm->dst_port()); if (src && dst) { add_connection( - boost::shared_ptr<GUI::Connection>( - new GUI::Connection(*this, cm, src, dst, - src->color() + 0x22222200))); + new GUI::Connection(*this, cm, src, dst, + src->color() + 0x22222200)); } else { LOG(error) << "Unable to find ports to connect " << cm->src_port_path() << " -> " << cm->dst_port_path() << endl; @@ -483,8 +475,8 @@ PatchCanvas::connection(SharedPtr<const ConnectionModel> cm) void PatchCanvas::disconnection(SharedPtr<const ConnectionModel> cm) { - const SharedPtr<FlowCanvas::Port> src = get_port_view(cm->src_port()); - const SharedPtr<FlowCanvas::Port> dst = get_port_view(cm->dst_port()); + FlowCanvas::Port* const src = get_port_view(cm->src_port()); + FlowCanvas::Port* const dst = get_port_view(cm->dst_port()); if (src && dst) remove_connection(src, dst); @@ -494,14 +486,14 @@ PatchCanvas::disconnection(SharedPtr<const ConnectionModel> cm) } void -PatchCanvas::connect(boost::shared_ptr<FlowCanvas::Connectable> src_port, - boost::shared_ptr<FlowCanvas::Connectable> dst_port) +PatchCanvas::connect(FlowCanvas::Connectable* src_port, + FlowCanvas::Connectable* dst_port) { - const boost::shared_ptr<Ingen::GUI::Port> src - = boost::dynamic_pointer_cast<Ingen::GUI::Port>(src_port); + const Ingen::GUI::Port* const src + = dynamic_cast<Ingen::GUI::Port*>(src_port); - const boost::shared_ptr<Ingen::GUI::Port> dst - = boost::dynamic_pointer_cast<Ingen::GUI::Port>(dst_port); + const Ingen::GUI::Port* const dst + = dynamic_cast<Ingen::GUI::Port*>(dst_port); if (!src || !dst) return; @@ -510,14 +502,14 @@ PatchCanvas::connect(boost::shared_ptr<FlowCanvas::Connectable> src_port, } void -PatchCanvas::disconnect(boost::shared_ptr<FlowCanvas::Connectable> src_port, - boost::shared_ptr<FlowCanvas::Connectable> dst_port) +PatchCanvas::disconnect(FlowCanvas::Connectable* src_port, + FlowCanvas::Connectable* dst_port) { - const boost::shared_ptr<Ingen::GUI::Port> src - = boost::dynamic_pointer_cast<Ingen::GUI::Port>(src_port); + const Ingen::GUI::Port* const src + = dynamic_cast<Ingen::GUI::Port*>(src_port); - const boost::shared_ptr<Ingen::GUI::Port> dst - = boost::dynamic_pointer_cast<Ingen::GUI::Port>(dst_port); + const Ingen::GUI::Port* const dst + = dynamic_cast<Ingen::GUI::Port*>(dst_port); App::instance().engine()->disconnect(src->model()->path(), dst->model()->path()); @@ -606,13 +598,11 @@ void PatchCanvas::destroy_selection() { FOREACH_ITEM(m, selected_items()) { - boost::shared_ptr<NodeModule> module( - boost::dynamic_pointer_cast<NodeModule>(*m)); + NodeModule* module = dynamic_cast<NodeModule*>(*m); if (module) { App::instance().engine()->del(module->node()->path()); } else { - boost::shared_ptr<PatchPortModule> port_module( - boost::dynamic_pointer_cast<PatchPortModule>(*m)); + PatchPortModule* port_module = dynamic_cast<PatchPortModule*>(*m); if (port_module) App::instance().engine()->del(port_module->port()->path()); } @@ -624,7 +614,7 @@ PatchCanvas::select_all() { unselect_ports(); FOREACH_ITEM(m, items()) - if (boost::dynamic_pointer_cast<FlowCanvas::Module>(*m)) + if (dynamic_cast<FlowCanvas::Module*>(*m)) if (!(*m)->selected()) select_item(*m); } @@ -637,21 +627,19 @@ PatchCanvas::copy_selection() serialiser.start_to_string(_patch->path(), base_uri); FOREACH_ITEM(m, selected_items()) { - boost::shared_ptr<NodeModule> module( - boost::dynamic_pointer_cast<NodeModule>(*m)); + NodeModule* module = dynamic_cast<NodeModule*>(*m); if (module) { serialiser.serialise(module->node()); } else { - boost::shared_ptr<PatchPortModule> port_module( - boost::dynamic_pointer_cast<PatchPortModule>(*m)); + PatchPortModule* port_module = dynamic_cast<PatchPortModule*>(*m); if (port_module) serialiser.serialise(port_module->port()); } } - for (list<boost::shared_ptr<FlowCanvas::Connection> >::iterator c = selected_connections().begin(); + for (SelectedConnections::iterator c = selected_connections().begin(); c != selected_connections().end(); ++c) { - boost::shared_ptr<Connection> connection = boost::dynamic_pointer_cast<Connection>(*c); + Connection* const connection = dynamic_cast<Connection*>(*c); if (connection) { const Sord::URI subject(*App::instance().world()->rdf_world(), base_uri); diff --git a/src/gui/PatchCanvas.hpp b/src/gui/PatchCanvas.hpp index cd9e038f..243f76ae 100644 --- a/src/gui/PatchCanvas.hpp +++ b/src/gui/PatchCanvas.hpp @@ -124,13 +124,13 @@ private: GraphObject::Properties get_initial_data(); - SharedPtr<FlowCanvas::Port> get_port_view(SharedPtr<PortModel> port); + FlowCanvas::Port* get_port_view(SharedPtr<PortModel> port); - void connect(boost::shared_ptr<FlowCanvas::Connectable> src, - boost::shared_ptr<FlowCanvas::Connectable> dst); + void connect(FlowCanvas::Connectable* src, + FlowCanvas::Connectable* dst); - void disconnect(boost::shared_ptr<FlowCanvas::Connectable> src, - boost::shared_ptr<FlowCanvas::Connectable> dst); + void disconnect(FlowCanvas::Connectable* src, + FlowCanvas::Connectable* dst); SharedPtr<const PatchModel> _patch; diff --git a/src/gui/PatchPortModule.cpp b/src/gui/PatchPortModule.cpp index b04cc6ba..df4d8dc8 100644 --- a/src/gui/PatchPortModule.cpp +++ b/src/gui/PatchPortModule.cpp @@ -59,9 +59,8 @@ PatchPortModule::create(PatchCanvas& canvas, bool human) { boost::shared_ptr<PatchPortModule> ret(new PatchPortModule(canvas, model)); - boost::shared_ptr<Port> port(Port::create(ret, model, human, true)); + boost::shared_ptr<Port> port(Port::create(*ret, model, human, true)); - ret->add_port(port); ret->set_port(port); ret->set_menu(port->menu()); @@ -149,9 +148,9 @@ PatchPortModule::property_changed(const URI& key, const Atom& value) } else if (key == uris.ingen_selected) { if (value.get_bool() != selected()) { if (value.get_bool()) { - _canvas->select_item(shared_from_this()); + _canvas->select_item(this); } else { - _canvas->unselect_item(shared_from_this()); + _canvas->unselect_item(this); } } } diff --git a/src/gui/Port.cpp b/src/gui/Port.cpp index 94b8851e..72c37b12 100644 --- a/src/gui/Port.cpp +++ b/src/gui/Port.cpp @@ -41,10 +41,10 @@ namespace GUI { ArtVpathDash* Port::_dash; SharedPtr<Port> -Port::create(boost::shared_ptr<FlowCanvas::Module> module, - SharedPtr<const PortModel> pm, - bool human_name, - bool flip) +Port::create(FlowCanvas::Module& module, + SharedPtr<const PortModel> pm, + bool human_name, + bool flip) { Glib::ustring label(human_name ? "" : pm->path().symbol()); if (human_name) { @@ -62,10 +62,10 @@ Port::create(boost::shared_ptr<FlowCanvas::Module> module, /** @a flip Make an input port appear as an output port, and vice versa. */ -Port::Port(boost::shared_ptr<FlowCanvas::Module> module, - SharedPtr<const PortModel> pm, - const string& name, - bool flip) +Port::Port(FlowCanvas::Module& module, + SharedPtr<const PortModel> pm, + const string& name, + bool flip) : FlowCanvas::Port(module, name, flip ? (!pm->is_input()) : pm->is_input(), App::instance().configuration()->get_port_color(pm.get())) @@ -73,7 +73,6 @@ Port::Port(boost::shared_ptr<FlowCanvas::Module> module, , _pressed(false) , _flipped(flip) { - assert(module); assert(pm); delete _menu; diff --git a/src/gui/Port.hpp b/src/gui/Port.hpp index 3d8fc763..17b1c37b 100644 --- a/src/gui/Port.hpp +++ b/src/gui/Port.hpp @@ -41,10 +41,10 @@ class Port : public FlowCanvas::Port { public: static SharedPtr<Port> create( - boost::shared_ptr<FlowCanvas::Module> module, - SharedPtr<const PortModel> pm, - bool human_name, - bool flip=false); + FlowCanvas::Module& module, + SharedPtr<const PortModel> pm, + bool human_name, + bool flip = false); ~Port(); @@ -62,10 +62,10 @@ public: ArtVpathDash* dash(); private: - Port(boost::shared_ptr<FlowCanvas::Module> module, - SharedPtr<const PortModel> pm, - const std::string& name, - bool flip = false); + Port(FlowCanvas::Module& module, + SharedPtr<const PortModel> pm, + const std::string& name, + bool flip=false); void property_changed(const Raul::URI& key, const Raul::Atom& value); |