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 /src/gui/PatchCanvas.cpp | |
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
Diffstat (limited to 'src/gui/PatchCanvas.cpp')
-rw-r--r-- | src/gui/PatchCanvas.cpp | 82 |
1 files changed, 35 insertions, 47 deletions
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); |