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