Mercurial > hg > svapp
comparison framework/Document.cpp @ 665:e19c609a7bec
Update so Document owns the alignment model's input aggregate model
author | Chris Cannam |
---|---|
date | Thu, 04 Apr 2019 16:17:11 +0100 |
parents | e2715204feaa |
children | 21673429dba5 |
comparison
equal
deleted
inserted
replaced
644:6fd0ebfd2bbe | 665:e19c609a7bec |
---|---|
785 { | 785 { |
786 if (model == nullptr) { | 786 if (model == nullptr) { |
787 return; | 787 return; |
788 } | 788 } |
789 | 789 |
790 #ifdef DEBUG_DOCUMENT | |
791 SVDEBUG << "Document::releaseModel(" << model << ", type " | |
792 << model->getTypeName() << ", name \"" | |
793 << model->objectName() << "\")" << endl; | |
794 #endif | |
795 | |
790 if (model == m_mainModel) { | 796 if (model == m_mainModel) { |
791 return; | 797 return; |
792 } | 798 } |
793 | 799 |
794 bool toDelete = false; | 800 bool toDelete = false; |
801 if (--m_models[model].refcount == 0) { | 807 if (--m_models[model].refcount == 0) { |
802 toDelete = true; | 808 toDelete = true; |
803 } | 809 } |
804 } | 810 } |
805 } else if (m_aggregateModels.find(model) != m_aggregateModels.end()) { | 811 } else if (m_aggregateModels.find(model) != m_aggregateModels.end()) { |
812 #ifdef DEBUG_DOCUMENT | |
806 SVDEBUG << "Document::releaseModel: is an aggregate model" << endl; | 813 SVDEBUG << "Document::releaseModel: is an aggregate model" << endl; |
814 #endif | |
807 toDelete = true; | 815 toDelete = true; |
808 } else { | 816 } else { |
809 SVCERR << "WARNING: Document::releaseModel: Unfound model " | 817 SVCERR << "WARNING: Document::releaseModel: Unfound model " |
810 << model << endl; | 818 << model << endl; |
811 toDelete = true; | 819 toDelete = true; |
877 } | 885 } |
878 } | 886 } |
879 | 887 |
880 if (m_layers.find(layer) == m_layers.end()) { | 888 if (m_layers.find(layer) == m_layers.end()) { |
881 SVDEBUG << "Document::deleteLayer: Layer " | 889 SVDEBUG << "Document::deleteLayer: Layer " |
882 << layer << " (" << typeid(layer).name() << | 890 << layer << " (typeid " << typeid(layer).name() << |
883 ") does not exist, or has already been deleted " | 891 ") does not exist, or has already been deleted " |
884 << "(this may not be as serious as it sounds)" << endl; | 892 << "(this may not be as serious as it sounds)" << endl; |
885 return; | 893 return; |
886 } | 894 } |
887 | 895 |
888 m_layers.erase(layer); | 896 m_layers.erase(layer); |
889 | 897 |
890 #ifdef DEBUG_DOCUMENT | 898 #ifdef DEBUG_DOCUMENT |
891 SVDEBUG << "Document::deleteLayer: Removing, now have " | 899 SVDEBUG << "Document::deleteLayer: Removing (and about to release model), now have " |
892 << m_layers.size() << " layers" << endl; | 900 << m_layers.size() << " layers" << endl; |
893 #endif | 901 #endif |
894 | 902 |
895 releaseModel(layer->getModel()); | 903 releaseModel(layer->getModel()); |
896 emit layerRemoved(layer); | 904 emit layerRemoved(layer); |
1099 // The reference has an empty alignment to itself. This makes | 1107 // The reference has an empty alignment to itself. This makes |
1100 // it possible to distinguish between the reference and any | 1108 // it possible to distinguish between the reference and any |
1101 // unaligned model just by looking at the model itself, | 1109 // unaligned model just by looking at the model itself, |
1102 // without also knowing what the main model is | 1110 // without also knowing what the main model is |
1103 SVDEBUG << "Document::alignModel(" << model << "): is main model, setting appropriately" << endl; | 1111 SVDEBUG << "Document::alignModel(" << model << "): is main model, setting appropriately" << endl; |
1104 rm->setAlignment(new AlignmentModel(model, model, nullptr, nullptr)); | 1112 rm->setAlignment(new AlignmentModel(model, model, nullptr)); |
1105 return; | 1113 return; |
1106 } | 1114 } |
1107 | 1115 |
1108 if (!m_align->alignModel(m_mainModel, rm)) { | 1116 if (!m_align->alignModel(this, m_mainModel, rm)) { |
1109 cerr << "Alignment failed: " << m_align->getError() << endl; | 1117 SVCERR << "Alignment failed: " << m_align->getError() << endl; |
1110 emit alignmentFailed(m_align->getError()); | 1118 emit alignmentFailed(m_align->getError()); |
1111 } | 1119 } |
1112 } | 1120 } |
1113 | 1121 |
1114 void | 1122 void |