Mercurial > hg > svcore
comparison 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 |
comparison
equal
deleted
inserted
replaced
874:862fe7b20df7 | 890:4cbf8c6a462d |
---|---|
193 } | 193 } |
194 | 194 |
195 Model * | 195 Model * |
196 ModelTransformerFactory::transform(const Transform &transform, | 196 ModelTransformerFactory::transform(const Transform &transform, |
197 const ModelTransformer::Input &input, | 197 const ModelTransformer::Input &input, |
198 QString &message) | 198 QString &message, |
199 AdditionalModelHandler *handler) | |
199 { | 200 { |
200 SVDEBUG << "ModelTransformerFactory::transform: Constructing transformer with input model " << input.getModel() << endl; | 201 SVDEBUG << "ModelTransformerFactory::transform: Constructing transformer with input model " << input.getModel() << endl; |
201 | 202 |
202 Transforms transforms; | 203 Transforms transforms; |
203 transforms.push_back(transform); | 204 transforms.push_back(transform); |
204 vector<Model *> mm = transformMultiple(transforms, input, message); | 205 vector<Model *> mm = transformMultiple(transforms, input, message, handler); |
205 if (mm.empty()) return 0; | 206 if (mm.empty()) return 0; |
206 else return mm[0]; | 207 else return mm[0]; |
207 } | 208 } |
208 | 209 |
209 vector<Model *> | 210 vector<Model *> |
210 ModelTransformerFactory::transformMultiple(const Transforms &transforms, | 211 ModelTransformerFactory::transformMultiple(const Transforms &transforms, |
211 const ModelTransformer::Input &input, | 212 const ModelTransformer::Input &input, |
212 QString &message) | 213 QString &message, |
214 AdditionalModelHandler *handler) | |
213 { | 215 { |
214 SVDEBUG << "ModelTransformerFactory::transformMultiple: Constructing transformer with input model " << input.getModel() << endl; | 216 SVDEBUG << "ModelTransformerFactory::transformMultiple: Constructing transformer with input model " << input.getModel() << endl; |
215 | 217 |
216 ModelTransformer *t = createTransformer(transforms, input); | 218 ModelTransformer *t = createTransformer(transforms, input); |
217 if (!t) return vector<Model *>(); | 219 if (!t) return vector<Model *>(); |
218 | 220 |
221 if (handler) { | |
222 m_handlers[t] = handler; | |
223 } | |
224 | |
225 m_runningTransformers.insert(t); | |
226 | |
219 connect(t, SIGNAL(finished()), this, SLOT(transformerFinished())); | 227 connect(t, SIGNAL(finished()), this, SLOT(transformerFinished())); |
220 | |
221 m_runningTransformers.insert(t); | |
222 | 228 |
223 t->start(); | 229 t->start(); |
224 vector<Model *> models = t->detachOutputModels(); | 230 vector<Model *> models = t->detachOutputModels(); |
225 | 231 |
226 if (!models.empty()) { | 232 if (!models.empty()) { |
268 << endl; | 274 << endl; |
269 } | 275 } |
270 | 276 |
271 m_runningTransformers.erase(transformer); | 277 m_runningTransformers.erase(transformer); |
272 | 278 |
279 if (m_handlers.find(transformer) != m_handlers.end()) { | |
280 if (transformer->willHaveAdditionalOutputModels()) { | |
281 vector<Model *> mm = transformer->detachAdditionalOutputModels(); | |
282 m_handlers[transformer]->moreModelsAvailable(mm); | |
283 } else { | |
284 m_handlers[transformer]->noMoreModelsAvailable(); | |
285 } | |
286 m_handlers.erase(transformer); | |
287 } | |
288 | |
273 transformer->wait(); // unnecessary but reassuring | 289 transformer->wait(); // unnecessary but reassuring |
274 delete transformer; | 290 delete transformer; |
275 } | 291 } |
276 | 292 |
277 void | 293 void |