summaryrefslogtreecommitdiffstats
path: root/src/libs/client/Store.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-09-14 02:27:02 +0000
committerDavid Robillard <d@drobilla.net>2006-09-14 02:27:02 +0000
commitcc384f6f622cc10fd83616256080b80dc2123aaf (patch)
tree9a5f0d7f14e04ad7effcda8be6b5924b4d61e361 /src/libs/client/Store.cpp
parent5525b33b79b7a920cf374704e67fc6b16fe5f77c (diff)
downloadingen-cc384f6f622cc10fd83616256080b80dc2123aaf.tar.gz
ingen-cc384f6f622cc10fd83616256080b80dc2123aaf.tar.bz2
ingen-cc384f6f622cc10fd83616256080b80dc2123aaf.zip
Cleaned up client-side model code significantly (made everything private
so only Store can change the state of models). Extremely broken, just committing to move code between machines :). git-svn-id: http://svn.drobilla.net/lad/ingen@133 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/client/Store.cpp')
-rw-r--r--src/libs/client/Store.cpp66
1 files changed, 63 insertions, 3 deletions
diff --git a/src/libs/client/Store.cpp b/src/libs/client/Store.cpp
index e2637c0f..64824b39 100644
--- a/src/libs/client/Store.cpp
+++ b/src/libs/client/Store.cpp
@@ -86,6 +86,45 @@ Store::resolve_plugin_orphans(CountedPtr<PluginModel> plugin)
void
+Store::add_connection_orphan(CountedPtr<ConnectionModel> connection)
+{
+ cerr << "WARNING: Orphan connection received." << endl;
+
+ cerr << "FIXME (add_connection_orphan)" << endl;
+
+ throw; // FIXME: (lazy)
+#if 0
+ map<string, list<CountedPtr<ConnectionModel> > >::iterator spawn
+ = m_connection_orphans.find(node->connection_uri());
+
+ if (spawn != m_connection_orphans.end()) {
+ spawn->second.push_back(node);
+ } else {
+ list<CountedPtr<ConnectionModel> > l;
+ l.push_back(node);
+ m_connection_orphans[node->connection_uri()] = l;
+ }
+#endif
+}
+
+
+void
+Store::resolve_connection_orphans(CountedPtr<PortModel> port)
+{
+ cerr << "FIXME (add_connection_orphan)" << endl;
+ throw; // FIXME: (lazy)
+#if 0
+ map<string, list<CountedPtr<ConnectionModel> > >::iterator spawn
+ = m_connection_orphans.find(connection->uri());
+
+ if (spawn != m_connection_orphans.end()) {
+ cerr << "XXXXXXXXXX PLUGIN-ORPHAN PLUGIN FOUND!! XXXXXXXXXXXXXXXXX" << endl;
+ }
+#endif
+}
+
+
+void
Store::add_orphan(CountedPtr<ObjectModel> child)
{
cerr << "WARNING: Orphan object " << child->path() << " received." << endl;
@@ -133,8 +172,18 @@ Store::add_object(CountedPtr<ObjectModel> object)
}
}
+ // If we already have "this" object, merge the existing one into the new
+ // one (with precedence to the new values).
+ ObjectMap::iterator existing = m_objects.find(object->path());
+ if (existing != m_objects.end()) {
+ cerr << "[Store] Warning: Assimilating " << object->path() << endl;
+ object->assimilate(existing->second);
+ existing->second = object;
+ }
+
m_objects[object->path()] = object;
+ // FIXME: emit this when we already had one?
new_object_sig.emit(object);
resolve_orphans(object);
@@ -327,10 +376,21 @@ Store::connection_event(const Path& src_port_path, const Path& dst_port_path)
CountedPtr<PatchModel> patch = PtrCast<PatchModel>(this->object(cm->patch_path()));
- if (patch)
+ CountedPtr<ObjectModel> src_obj = this->object(src_port_path);
+ CountedPtr<ObjectModel> dst_obj = this->object(dst_port_path);
+
+ if (!src_obj || !dst_obj || !patch) {
+ add_connection_orphan(cm);
+ } else {
+ CountedPtr<PortModel> src_port = PtrCast<PortModel>(src_obj);
+ CountedPtr<PortModel> dst_port = PtrCast<PortModel>(dst_obj);
+ assert(src_port && dst_port);
+
+ cm->set_src_port(src_port);
+ cm->set_dst_port(dst_port);
+
patch->add_connection(cm);
- else
- cerr << "ERROR: connection in nonexistant patch" << endl;
+ }
}