Mercurial > hg > svapp
comparison framework/Document.cpp @ 137:e2aec1708a2c
* Save/load of region models
author | Chris Cannam |
---|---|
date | Thu, 09 Oct 2008 12:04:22 +0000 |
parents | 6d2e49c59b3b |
children | c0b176d86be7 |
comparison
equal
deleted
inserted
replaced
136:6d2e49c59b3b | 137:e2aec1708a2c |
---|---|
35 // For alignment: | 35 // For alignment: |
36 #include "data/model/AggregateWaveModel.h" | 36 #include "data/model/AggregateWaveModel.h" |
37 #include "data/model/SparseTimeValueModel.h" | 37 #include "data/model/SparseTimeValueModel.h" |
38 #include "data/model/AlignmentModel.h" | 38 #include "data/model/AlignmentModel.h" |
39 | 39 |
40 //#define DEBUG_DOCUMENT 1 | 40 #define DEBUG_DOCUMENT 1 |
41 | 41 |
42 //!!! still need to handle command history, documentRestored/documentModified | 42 //!!! still need to handle command history, documentRestored/documentModified |
43 | 43 |
44 Document::Document() : | 44 Document::Document() : |
45 m_mainModel(0), | 45 m_mainModel(0), |
276 // delete any of the models. | 276 // delete any of the models. |
277 | 277 |
278 #ifdef DEBUG_DOCUMENT | 278 #ifdef DEBUG_DOCUMENT |
279 std::cerr << "Document::setMainModel: Have " | 279 std::cerr << "Document::setMainModel: Have " |
280 << m_layers.size() << " layers" << std::endl; | 280 << m_layers.size() << " layers" << std::endl; |
281 std::cerr << "Models now: "; | |
282 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) { | |
283 std::cerr << i->first << " "; | |
284 } | |
285 std::cerr << std::endl; | |
281 #endif | 286 #endif |
282 | 287 |
283 for (LayerSet::iterator i = m_layers.begin(); i != m_layers.end(); ++i) { | 288 for (LayerSet::iterator i = m_layers.begin(); i != m_layers.end(); ++i) { |
284 | 289 |
285 Layer *layer = *i; | 290 Layer *layer = *i; |
297 #endif | 302 #endif |
298 LayerFactory::getInstance()->setModel(layer, m_mainModel); | 303 LayerFactory::getInstance()->setModel(layer, m_mainModel); |
299 continue; | 304 continue; |
300 } | 305 } |
301 | 306 |
302 if (model && (m_models.find(model) == m_models.end())) { | 307 if (!model) { |
308 std::cerr << "WARNING: Document::setMainModel: Null model in layer " | |
309 << layer << std::endl; | |
310 // get rid of this hideous degenerate | |
311 obsoleteLayers.push_back(layer); | |
312 continue; | |
313 } | |
314 | |
315 if (m_models.find(model) == m_models.end()) { | |
303 std::cerr << "WARNING: Document::setMainModel: Unknown model " | 316 std::cerr << "WARNING: Document::setMainModel: Unknown model " |
304 << model << " in layer " << layer << std::endl; | 317 << model << " in layer " << layer << std::endl; |
305 // get rid of this hideous degenerate | 318 // and this one |
306 obsoleteLayers.push_back(layer); | 319 obsoleteLayers.push_back(layer); |
307 continue; | 320 continue; |
308 } | 321 } |
309 | 322 |
310 if (m_models[model].source && | 323 if (m_models[model].source && |
359 dynamic_cast<RangeSummarisableTimeValueModel *>(replacementModel); | 372 dynamic_cast<RangeSummarisableTimeValueModel *>(replacementModel); |
360 #ifdef DEBUG_DOCUMENT | 373 #ifdef DEBUG_DOCUMENT |
361 if (rm) { | 374 if (rm) { |
362 std::cerr << "new model has " << rm->getChannelCount() << " channels " << std::endl; | 375 std::cerr << "new model has " << rm->getChannelCount() << " channels " << std::endl; |
363 } else { | 376 } else { |
364 std::cerr << "new model is not a RangeSummarisableTimeValueModel!" << std::endl; | 377 std::cerr << "new model " << replacementModel << " is not a RangeSummarisableTimeValueModel!" << std::endl; |
365 } | 378 } |
366 #endif | 379 #endif |
367 setModel(layer, replacementModel); | 380 setModel(layer, replacementModel); |
368 } | 381 } |
369 } | 382 } |
373 deleteLayer(obsoleteLayers[k], true); | 386 deleteLayer(obsoleteLayers[k], true); |
374 } | 387 } |
375 | 388 |
376 for (ModelMap::iterator i = m_models.begin(); i != m_models.end(); ++i) { | 389 for (ModelMap::iterator i = m_models.begin(); i != m_models.end(); ++i) { |
377 | 390 |
391 Model *m = i->first; | |
392 | |
393 #ifdef DEBUG_DOCUMENT | |
394 std::cerr << "considering alignment for model " << m << " (name \"" | |
395 << m->objectName().toStdString() << "\")" << std::endl; | |
396 #endif | |
397 | |
378 if (m_autoAlignment) { | 398 if (m_autoAlignment) { |
379 | 399 |
380 alignModel(i->first); | 400 alignModel(m); |
381 | 401 |
382 } else if (oldMainModel && | 402 } else if (oldMainModel && |
383 (i->first->getAlignmentReference() == oldMainModel)) { | 403 (m->getAlignmentReference() == oldMainModel)) { |
384 | 404 |
385 alignModel(i->first); | 405 alignModel(m); |
386 } | 406 } |
387 } | 407 } |
388 | 408 |
389 if (oldMainModel) { | 409 if (oldMainModel) { |
390 oldMainModel->aboutToDelete(); | 410 oldMainModel->aboutToDelete(); |
423 | 443 |
424 outputModelToAdd->setSourceModel(input.getModel()); | 444 outputModelToAdd->setSourceModel(input.getModel()); |
425 | 445 |
426 m_models[outputModelToAdd] = rec; | 446 m_models[outputModelToAdd] = rec; |
427 | 447 |
448 #ifdef DEBUG_DOCUMENT | |
449 std::cerr << "Document::addDerivedModel: Added model " << outputModelToAdd << std::endl; | |
450 std::cerr << "Models now: "; | |
451 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) { | |
452 std::cerr << i->first << " "; | |
453 } | |
454 std::cerr << std::endl; | |
455 #endif | |
456 | |
428 emit modelAdded(outputModelToAdd); | 457 emit modelAdded(outputModelToAdd); |
429 } | 458 } |
430 | 459 |
431 | 460 |
432 void | 461 void |
441 ModelRecord rec; | 470 ModelRecord rec; |
442 rec.source = 0; | 471 rec.source = 0; |
443 rec.refcount = 0; | 472 rec.refcount = 0; |
444 | 473 |
445 m_models[model] = rec; | 474 m_models[model] = rec; |
475 | |
476 #ifdef DEBUG_DOCUMENT | |
477 std::cerr << "Document::addImportedModel: Added model " << model << std::endl; | |
478 std::cerr << "Models now: "; | |
479 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) { | |
480 std::cerr << i->first << " "; | |
481 } | |
482 std::cerr << std::endl; | |
483 #endif | |
446 | 484 |
447 if (m_autoAlignment) alignModel(model); | 485 if (m_autoAlignment) alignModel(model); |
448 | 486 |
449 emit modelAdded(model); | 487 emit modelAdded(model); |
450 } | 488 } |
538 } | 576 } |
539 | 577 |
540 model->aboutToDelete(); | 578 model->aboutToDelete(); |
541 emit modelAboutToBeDeleted(model); | 579 emit modelAboutToBeDeleted(model); |
542 m_models.erase(model); | 580 m_models.erase(model); |
581 | |
582 #ifdef DEBUG_DOCUMENT | |
583 std::cerr << "Document::releaseModel: Deleted model " << model << std::endl; | |
584 std::cerr << "Models now: "; | |
585 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) { | |
586 std::cerr << i->first << " "; | |
587 } | |
588 std::cerr << std::endl; | |
589 #endif | |
590 | |
543 delete model; | 591 delete model; |
544 } | 592 } |
545 } | 593 } |
546 | 594 |
547 void | 595 void |