# HG changeset patch # User Chris Cannam # Date 1488214367 0 # Node ID cce97b00663a5a6536e0d927e31b04dbece9f609 # Parent d122d3595a328054600f8ac5e78a0b34fff73af4 Write aggregate models to .sv file when saving document. They still are not reloaded, but I think this is far as I'm prepared to go for 3.0. diff -r d122d3595a32 -r cce97b00663a framework/Document.cpp --- a/framework/Document.cpp Mon Feb 27 16:26:37 2017 +0000 +++ b/framework/Document.cpp Mon Feb 27 16:52:47 2017 +0000 @@ -1290,11 +1290,38 @@ for (LayerViewMap::const_iterator i = m_layerViewMap.begin(); i != m_layerViewMap.end(); ++i) { - if (i->first && !i->second.empty() && i->first->getModel()) { - used.insert(i->first->getModel()); + if (i->first && !i->second.empty()) { // Layer exists, is in views + Model *m = i->first->getModel(); + if (m) { + used.insert(m); + if (m->getSourceModel()) { + used.insert(m->getSourceModel()); + } + } } } + // Write aggregate models first, so that when re-reading + // derivations we already know about their existence. But only + // those that are actually used + + for (std::set::iterator i = m_aggregateModels.begin(); + i != m_aggregateModels.end(); ++i) { + + SVDEBUG << "checking aggregate model " << *i << endl; + + AggregateWaveModel *aggregate = qobject_cast(*i); + if (!aggregate) continue; + if (used.find(aggregate) == used.end()) { + SVDEBUG << "(unused, skipping)" << endl; + continue; + } + + SVDEBUG << "(used, writing)" << endl; + + aggregate->toXml(out, indent + " "); + } + std::set written; for (ModelMap::const_iterator i = m_models.begin(); @@ -1353,7 +1380,7 @@ .arg(XmlExportable::getObjectExportId(model))); } } - + //!!! // We should write out the alignment models here. AlignmentModel