diff data/model/Model.cpp @ 1735:d91ff235e69d by-id

Some messing with Model and AlignmentModel
author Chris Cannam
date Tue, 25 Jun 2019 15:29:34 +0100
parents 601851995f4b
children 565575463752
line wrap: on
line diff
--- a/data/model/Model.cpp	Mon Jun 24 14:28:17 2019 +0100
+++ b/data/model/Model.cpp	Tue Jun 25 15:29:34 2019 +0100
@@ -34,30 +34,40 @@
                 << endl;
     }
 
-    if (m_alignment) {
-        m_alignment->aboutToDelete();
-        delete m_alignment;
+    if (!m_alignmentModel.isNone()) {
+        ModelById::release(m_alignmentModel);
     }
 }
 
 void
-Model::setSourceModel(Model *model)
+Model::setSourceModel(ModelId modelId)
 {
+/*!!!
     if (m_sourceModel) {
         disconnect(m_sourceModel, SIGNAL(aboutToBeDeleted()),
                    this, SLOT(sourceModelAboutToBeDeleted()));
     }
+*/
+    
+    m_sourceModel = modelId;
 
-    m_sourceModel = model;
-
+    auto model = ModelById::get(m_sourceModel);
+    if (model) {
+        connect(model.get(), SIGNAL(alignmentCompletionChanged()),
+                this, SIGNAL(alignmentCompletionChanged()));
+    }
+        
+    
+/*
     if (m_sourceModel) {
         connect(m_sourceModel, SIGNAL(alignmentCompletionChanged()),
                 this, SIGNAL(alignmentCompletionChanged()));
         connect(m_sourceModel, SIGNAL(aboutToBeDeleted()),
                 this, SLOT(sourceModelAboutToBeDeleted()));
     }
+*/
 }
-
+/*!!!
 void
 Model::aboutToDelete()
 {
@@ -83,40 +93,38 @@
 {
     m_sourceModel = nullptr;
 }
-
+*/
 void
-Model::setAlignment(AlignmentModel *alignment)
+Model::setAlignment(ModelId alignmentModel)
 {
     SVDEBUG << "Model(" << this << "): accepting alignment model "
-            << alignment << endl;
+            << alignmentModel << endl;
     
-    if (m_alignment) {
-        m_alignment->aboutToDelete();
-        delete m_alignment;
+    if (!m_alignmentModel.isNone()) {
+        ModelById::release(m_alignmentModel);
     }
     
-    m_alignment = alignment;
+    m_alignmentModel = alignmentModel;
 
-    if (m_alignment) {
-        connect(m_alignment, SIGNAL(completionChanged()),
+    auto model = ModelById::get(m_alignmentModel);
+    if (model) {
+        connect(model.get(), SIGNAL(completionChanged()),
                 this, SIGNAL(alignmentCompletionChanged()));
     }
 }
 
-const AlignmentModel *
+const ModelId
 Model::getAlignment() const
 {
-    return m_alignment;
+    return m_alignmentModel;
 }
 
-const Model *
+const ModelId
 Model::getAlignmentReference() const
 {
-    if (!m_alignment) {
-        if (m_sourceModel) return m_sourceModel->getAlignmentReference();
-        return nullptr;
-    }
-    return m_alignment->getReferenceModel();
+    auto model = ModelById::getAs<AlignmentModel>(m_alignmentModel);
+    if (model) return model->getReferenceModel();
+    else return {};
 }
 
 sv_frame_t