summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-06-14 04:55:18 +0000
committerDavid Robillard <d@drobilla.net>2006-06-14 04:55:18 +0000
commit52f5c887cf8d4149278d137684f8f1ee31231d65 (patch)
treebec3035a45debe8ba98502b854133647154cb6f2
parent7ed3ef703ba8e0aa2c228e21d798d906194f6915 (diff)
downloadingen-52f5c887cf8d4149278d137684f8f1ee31231d65.tar.gz
ingen-52f5c887cf8d4149278d137684f8f1ee31231d65.tar.bz2
ingen-52f5c887cf8d4149278d137684f8f1ee31231d65.zip
Node destruction working
git-svn-id: http://svn.drobilla.net/lad/grauph@36 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r--src/libs/client/Store.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/libs/client/Store.cpp b/src/libs/client/Store.cpp
index 56c6654f..d1555f4d 100644
--- a/src/libs/client/Store.cpp
+++ b/src/libs/client/Store.cpp
@@ -164,7 +164,31 @@ Store::add_plugin(CountedPtr<PluginModel> pm)
void
Store::destruction_event(const string& path)
{
- remove_object(path);
+ // I'm assuming the compiler will optimize out all these const
+ // pointers into one...
+
+ CountedPtr<ObjectModel> obj_ptr = remove_object(path);
+ ObjectModel* const object = obj_ptr.get();
+
+ // FIXME: Why does this need to be specific? Just make a remove_child
+ // for everything
+
+ // Succeeds for (Plugin) Nodes and Patches
+ NodeModel* const node = dynamic_cast<NodeModel*>(object);
+ if (node) {
+ cerr << "Node\n";
+ PatchModel* const parent = dynamic_cast<PatchModel* const>(object->parent().get());
+ if (parent)
+ parent->remove_node(node->name());
+ }
+
+ PortModel* const port = dynamic_cast<PortModel*>(object);
+ if (port) {
+ NodeModel* const parent = dynamic_cast<NodeModel* const>(object->parent().get());
+ assert(parent);
+ parent->remove_port(port->name());
+ }
+
// FIXME: emit signals
}