Mercurial > hg > svcore
diff transform/ModelTransformerFactory.cpp @ 890:4cbf8c6a462d tony_integration
Merge from branch tonioni
author | Chris Cannam |
---|---|
date | Tue, 11 Mar 2014 17:30:35 +0000 |
parents | a2689db084f4 |
children | 85879408f665 06579b8ffb7b |
line wrap: on
line diff
--- a/transform/ModelTransformerFactory.cpp Tue Jan 28 15:01:54 2014 +0000 +++ b/transform/ModelTransformerFactory.cpp Tue Mar 11 17:30:35 2014 +0000 @@ -195,13 +195,14 @@ Model * ModelTransformerFactory::transform(const Transform &transform, const ModelTransformer::Input &input, - QString &message) + QString &message, + AdditionalModelHandler *handler) { SVDEBUG << "ModelTransformerFactory::transform: Constructing transformer with input model " << input.getModel() << endl; Transforms transforms; transforms.push_back(transform); - vector<Model *> mm = transformMultiple(transforms, input, message); + vector<Model *> mm = transformMultiple(transforms, input, message, handler); if (mm.empty()) return 0; else return mm[0]; } @@ -209,17 +210,22 @@ vector<Model *> ModelTransformerFactory::transformMultiple(const Transforms &transforms, const ModelTransformer::Input &input, - QString &message) + QString &message, + AdditionalModelHandler *handler) { SVDEBUG << "ModelTransformerFactory::transformMultiple: Constructing transformer with input model " << input.getModel() << endl; ModelTransformer *t = createTransformer(transforms, input); if (!t) return vector<Model *>(); - connect(t, SIGNAL(finished()), this, SLOT(transformerFinished())); + if (handler) { + m_handlers[t] = handler; + } m_runningTransformers.insert(t); + connect(t, SIGNAL(finished()), this, SLOT(transformerFinished())); + t->start(); vector<Model *> models = t->detachOutputModels(); @@ -270,6 +276,16 @@ m_runningTransformers.erase(transformer); + if (m_handlers.find(transformer) != m_handlers.end()) { + if (transformer->willHaveAdditionalOutputModels()) { + vector<Model *> mm = transformer->detachAdditionalOutputModels(); + m_handlers[transformer]->moreModelsAvailable(mm); + } else { + m_handlers[transformer]->noMoreModelsAvailable(); + } + m_handlers.erase(transformer); + } + transformer->wait(); // unnecessary but reassuring delete transformer; }