comparison framework/Document.cpp @ 660:85ada073d2db single-point

Some debug output adjustments
author Chris Cannam
date Tue, 02 Apr 2019 14:26:46 +0100
parents 029c224384d1
children a2bf5e6c54ce
comparison
equal deleted inserted replaced
659:49cf3787cf22 660:85ada073d2db
72 //!!! Document should really own the command history. atm we 72 //!!! Document should really own the command history. atm we
73 //still refer to it in various places that don't have access to 73 //still refer to it in various places that don't have access to
74 //the document, be nice to fix that 74 //the document, be nice to fix that
75 75
76 #ifdef DEBUG_DOCUMENT 76 #ifdef DEBUG_DOCUMENT
77 cerr << "\n\nDocument::~Document: about to clear command history" << endl; 77 SVDEBUG << "\n\nDocument::~Document: about to clear command history" << endl;
78 #endif 78 #endif
79 CommandHistory::getInstance()->clear(); 79 CommandHistory::getInstance()->clear();
80 80
81 #ifdef DEBUG_DOCUMENT 81 #ifdef DEBUG_DOCUMENT
82 SVDEBUG << "Document::~Document: about to delete layers" << endl; 82 SVDEBUG << "Document::~Document: about to delete layers" << endl;
152 { 152 {
153 LayerFactory::LayerTypeSet types = 153 LayerFactory::LayerTypeSet types =
154 LayerFactory::getInstance()->getValidLayerTypes(model); 154 LayerFactory::getInstance()->getValidLayerTypes(model);
155 155
156 if (types.empty()) { 156 if (types.empty()) {
157 cerr << "WARNING: Document::importLayer: no valid display layer for model" << endl; 157 SVCERR << "WARNING: Document::importLayer: no valid display layer for model" << endl;
158 return nullptr; 158 return nullptr;
159 } 159 }
160 160
161 //!!! for now, just use the first suitable layer type 161 //!!! for now, just use the first suitable layer type
162 LayerFactory::LayerType type = *types.begin(); 162 LayerFactory::LayerType type = *types.begin();
274 m_primary = layers; 274 m_primary = layers;
275 } 275 }
276 276
277 void 277 void
278 moreModelsAvailable(vector<Model *> models) override { 278 moreModelsAvailable(vector<Model *> models) override {
279 std::cerr << "AdditionalModelConverter::moreModelsAvailable: " << models.size() << " model(s)" << std::endl; 279 SVDEBUG << "AdditionalModelConverter::moreModelsAvailable: " << models.size() << " model(s)" << endl;
280 // We can't automatically regenerate the additional models on 280 // We can't automatically regenerate the additional models on
281 // reload -- we should delete them instead 281 // reload -- we should delete them instead
282 QStringList names; 282 QStringList names;
283 foreach (Model *model, models) { 283 foreach (Model *model, models) {
284 m_doc->addAdditionalModel(model); 284 m_doc->addAdditionalModel(model);
290 delete this; 290 delete this;
291 } 291 }
292 292
293 void 293 void
294 noMoreModelsAvailable() override { 294 noMoreModelsAvailable() override {
295 std::cerr << "AdditionalModelConverter::noMoreModelsAvailable" << std::endl; 295 SVDEBUG << "AdditionalModelConverter::noMoreModelsAvailable" << endl;
296 m_handler->layersCreated(this, m_primary, vector<Layer *>()); 296 m_handler->layersCreated(this, m_primary, vector<Layer *>());
297 delete this; 297 delete this;
298 } 298 }
299 299
300 void cancel() { 300 void cancel() {
367 367
368 LayerFactory::LayerTypeSet types = 368 LayerFactory::LayerTypeSet types =
369 LayerFactory::getInstance()->getValidLayerTypes(newModel); 369 LayerFactory::getInstance()->getValidLayerTypes(newModel);
370 370
371 if (types.empty()) { 371 if (types.empty()) {
372 cerr << "WARNING: Document::createLayerForTransformer: no valid display layer for output of transform " << names[i] << endl; 372 SVCERR << "WARNING: Document::createLayerForTransformer: no valid display layer for output of transform " << names[i] << endl;
373 //!!! inadequate cleanup: 373 //!!! inadequate cleanup:
374 newModel->aboutToDelete(); 374 newModel->aboutToDelete();
375 emit modelAboutToBeDeleted(newModel); 375 emit modelAboutToBeDeleted(newModel);
376 m_models.erase(newModel); 376 m_models.erase(newModel);
377 delete newModel; 377 delete newModel;
430 // model, or delete the layer for each layer that is currently 430 // model, or delete the layer for each layer that is currently
431 // using one of these. Carry out this replacement before we 431 // using one of these. Carry out this replacement before we
432 // delete any of the models. 432 // delete any of the models.
433 433
434 #ifdef DEBUG_DOCUMENT 434 #ifdef DEBUG_DOCUMENT
435 cerr << "Document::setMainModel: Have " 435 SVDEBUG << "Document::setMainModel: Have "
436 << m_layers.size() << " layers" << endl; 436 << m_layers.size() << " layers" << endl;
437 cerr << "Models now: "; 437 cerr << "Models now: ";
438 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) { 438 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) {
439 cerr << i->first << " "; 439 cerr << i->first << " ";
440 } 440 }
441 cerr << endl; 441 SVDEBUG << endl;
442 cerr << "Old main model: " << oldMainModel << endl; 442 SVDEBUG << "Old main model: " << oldMainModel << endl;
443 #endif 443 #endif
444 444
445 for (LayerSet::iterator i = m_layers.begin(); i != m_layers.end(); ++i) { 445 for (LayerSet::iterator i = m_layers.begin(); i != m_layers.end(); ++i) {
446 446
447 Layer *layer = *i; 447 Layer *layer = *i;
448 Model *model = layer->getModel(); 448 Model *model = layer->getModel();
449 449
450 #ifdef DEBUG_DOCUMENT 450 #ifdef DEBUG_DOCUMENT
451 cerr << "Document::setMainModel: inspecting model " 451 SVDEBUG << "Document::setMainModel: inspecting model "
452 << (model ? model->objectName(): "(null)") << " in layer " 452 << (model ? model->objectName(): "(null)") << " in layer "
453 << layer->objectName() << endl; 453 << layer->objectName() << endl;
454 #endif 454 #endif
455 455
456 if (model == oldMainModel) { 456 if (model == oldMainModel) {
457 #ifdef DEBUG_DOCUMENT 457 #ifdef DEBUG_DOCUMENT
458 cerr << "... it uses the old main model, replacing" << endl; 458 SVDEBUG << "... it uses the old main model, replacing" << endl;
459 #endif 459 #endif
460 LayerFactory::getInstance()->setModel(layer, m_mainModel); 460 LayerFactory::getInstance()->setModel(layer, m_mainModel);
461 continue; 461 continue;
462 } 462 }
463 463
464 if (!model) { 464 if (!model) {
465 cerr << "WARNING: Document::setMainModel: Null model in layer " 465 SVCERR << "WARNING: Document::setMainModel: Null model in layer "
466 << layer << endl; 466 << layer << endl;
467 // get rid of this hideous degenerate 467 // get rid of this hideous degenerate
468 obsoleteLayers.push_back(layer); 468 obsoleteLayers.push_back(layer);
469 continue; 469 continue;
470 } 470 }
471 471
479 479
480 if (m_models[model].source && 480 if (m_models[model].source &&
481 (m_models[model].source == oldMainModel)) { 481 (m_models[model].source == oldMainModel)) {
482 482
483 #ifdef DEBUG_DOCUMENT 483 #ifdef DEBUG_DOCUMENT
484 cerr << "... it uses a model derived from the old main model, regenerating" << endl; 484 SVDEBUG << "... it uses a model derived from the old main model, regenerating" << endl;
485 #endif 485 #endif
486 486
487 // This model was derived from the previous main 487 // This model was derived from the previous main
488 // model: regenerate it. 488 // model: regenerate it.
489 489
499 ModelTransformer::Input 499 ModelTransformer::Input
500 (m_mainModel, m_models[model].channel), 500 (m_mainModel, m_models[model].channel),
501 message); 501 message);
502 502
503 if (!replacementModel) { 503 if (!replacementModel) {
504 cerr << "WARNING: Document::setMainModel: Failed to regenerate model for transform \"" 504 SVCERR << "WARNING: Document::setMainModel: Failed to regenerate model for transform \""
505 << transformId << "\"" << " in layer " << layer << endl; 505 << transformId << "\"" << " in layer " << layer << endl;
506 if (failedTransformers.find(transformId) 506 if (failedTransformers.find(transformId)
507 == failedTransformers.end()) { 507 == failedTransformers.end()) {
508 emit modelRegenerationFailed(layer->objectName(), 508 emit modelRegenerationFailed(layer->objectName(),
509 transformId, 509 transformId,
510 message); 510 message);
516 emit modelRegenerationWarning(layer->objectName(), 516 emit modelRegenerationWarning(layer->objectName(),
517 transformId, 517 transformId,
518 message); 518 message);
519 } 519 }
520 #ifdef DEBUG_DOCUMENT 520 #ifdef DEBUG_DOCUMENT
521 cerr << "Replacing model " << model << " (type " 521 SVDEBUG << "Replacing model " << model << " (type "
522 << typeid(*model).name() << ") with model " 522 << typeid(*model).name() << ") with model "
523 << replacementModel << " (type " 523 << replacementModel << " (type "
524 << typeid(*replacementModel).name() << ") in layer " 524 << typeid(*replacementModel).name() << ") in layer "
525 << layer << " (name " << layer->objectName() << ")" 525 << layer << " (name " << layer->objectName() << ")"
526 << endl; 526 << endl;
527 527
528 RangeSummarisableTimeValueModel *rm = 528 RangeSummarisableTimeValueModel *rm =
529 dynamic_cast<RangeSummarisableTimeValueModel *>(replacementModel); 529 dynamic_cast<RangeSummarisableTimeValueModel *>(replacementModel);
530 if (rm) { 530 if (rm) {
531 cerr << "new model has " << rm->getChannelCount() << " channels " << endl; 531 SVDEBUG << "new model has " << rm->getChannelCount() << " channels " << endl;
532 } else { 532 } else {
533 cerr << "new model " << replacementModel << " is not a RangeSummarisableTimeValueModel!" << endl; 533 SVDEBUG << "new model " << replacementModel << " is not a RangeSummarisableTimeValueModel!" << endl;
534 } 534 }
535 #endif 535 #endif
536 setModel(layer, replacementModel); 536 setModel(layer, replacementModel);
537 } 537 }
538 } 538 }
597 return; 597 return;
598 } 598 }
599 599
600 #ifdef DEBUG_DOCUMENT 600 #ifdef DEBUG_DOCUMENT
601 if (input.getModel()) { 601 if (input.getModel()) {
602 cerr << "Document::addAlreadyDerivedModel: source is " << input.getModel() << " \"" << input.getModel()->objectName() << "\"" << endl; 602 SVDEBUG << "Document::addAlreadyDerivedModel: source is " << input.getModel() << " \"" << input.getModel()->objectName() << "\"" << endl;
603 } else { 603 } else {
604 cerr << "Document::addAlreadyDerivedModel: source is " << input.getModel() << endl; 604 SVDEBUG << "Document::addAlreadyDerivedModel: source is " << input.getModel() << endl;
605 } 605 }
606 #endif 606 #endif
607 607
608 ModelRecord rec; 608 ModelRecord rec;
609 rec.source = input.getModel(); 609 rec.source = input.getModel();
620 cerr << "Document::addAlreadyDerivedModel: Added model " << outputModelToAdd << endl; 620 cerr << "Document::addAlreadyDerivedModel: Added model " << outputModelToAdd << endl;
621 cerr << "Models now: "; 621 cerr << "Models now: ";
622 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) { 622 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) {
623 cerr << i->first << " "; 623 cerr << i->first << " ";
624 } 624 }
625 cerr << endl; 625 SVDEBUG << endl;
626 #endif 626 #endif
627 627
628 emit modelAdded(outputModelToAdd); 628 emit modelAdded(outputModelToAdd);
629 } 629 }
630 630
650 SVDEBUG << "Document::addImportedModel: Added model " << model << endl; 650 SVDEBUG << "Document::addImportedModel: Added model " << model << endl;
651 cerr << "Models now: "; 651 cerr << "Models now: ";
652 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) { 652 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) {
653 cerr << i->first << " "; 653 cerr << i->first << " ";
654 } 654 }
655 cerr << endl; 655 SVDEBUG << endl;
656 #endif 656 #endif
657 657
658 if (m_autoAlignment) { 658 if (m_autoAlignment) {
659 SVDEBUG << "Document::addImportedModel: auto-alignment is on, aligning model if possible" << endl; 659 SVDEBUG << "Document::addImportedModel: auto-alignment is on, aligning model if possible" << endl;
660 alignModel(model); 660 alignModel(model);
686 SVDEBUG << "Document::addAdditionalModel: Added model " << model << endl; 686 SVDEBUG << "Document::addAdditionalModel: Added model " << model << endl;
687 cerr << "Models now: "; 687 cerr << "Models now: ";
688 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) { 688 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) {
689 cerr << i->first << " "; 689 cerr << i->first << " ";
690 } 690 }
691 cerr << endl; 691 SVDEBUG << endl;
692 #endif 692 #endif
693 693
694 if (m_autoAlignment) { 694 if (m_autoAlignment) {
695 SVDEBUG << "Document::addAdditionalModel: auto-alignment is on, aligning model if possible" << endl; 695 SVDEBUG << "Document::addAdditionalModel: auto-alignment is on, aligning model if possible" << endl;
696 alignModel(model); 696 alignModel(model);
770 getDefaultTransformFor(applied.getIdentifier(), 770 getDefaultTransformFor(applied.getIdentifier(),
771 applied.getSampleRate()) 771 applied.getSampleRate())
772 .getPluginVersion()); 772 .getPluginVersion());
773 773
774 if (!model) { 774 if (!model) {
775 cerr << "WARNING: Document::addDerivedModel: no output model for transform " << applied.getIdentifier() << endl; 775 SVCERR << "WARNING: Document::addDerivedModel: no output model for transform " << applied.getIdentifier() << endl;
776 } else { 776 } else {
777 addAlreadyDerivedModel(applied, input, model); 777 addAlreadyDerivedModel(applied, input, model);
778 } 778 }
779 } 779 }
780 780
838 SVDEBUG << "Document::releaseModel: Deleted model " << model << endl; 838 SVDEBUG << "Document::releaseModel: Deleted model " << model << endl;
839 cerr << "Models now: "; 839 cerr << "Models now: ";
840 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) { 840 for (ModelMap::const_iterator i = m_models.begin(); i != m_models.end(); ++i) {
841 cerr << i->first << " "; 841 cerr << i->first << " ";
842 } 842 }
843 cerr << endl; 843 SVDEBUG << endl;
844 #endif 844 #endif
845 845
846 delete model; 846 delete model;
847 } 847 }
848 } 848 }
851 Document::deleteLayer(Layer *layer, bool force) 851 Document::deleteLayer(Layer *layer, bool force)
852 { 852 {
853 if (m_layerViewMap.find(layer) != m_layerViewMap.end() && 853 if (m_layerViewMap.find(layer) != m_layerViewMap.end() &&
854 m_layerViewMap[layer].size() > 0) { 854 m_layerViewMap[layer].size() > 0) {
855 855
856 cerr << "WARNING: Document::deleteLayer: Layer " 856 SVCERR << "WARNING: Document::deleteLayer: Layer "
857 << layer << " [" << layer->objectName() << "]" 857 << layer << " [" << layer->objectName() << "]"
858 << " is still used in " << m_layerViewMap[layer].size() 858 << " is still used in " << m_layerViewMap[layer].size()
859 << " views!" << endl; 859 << " views!" << endl;
860 860
861 if (force) { 861 if (force) {
862 862
863 #ifdef DEBUG_DOCUMENT 863 #ifdef DEBUG_DOCUMENT
864 cerr << "(force flag set -- deleting from all views)" << endl; 864 SVCERR << "(force flag set -- deleting from all views)" << endl;
865 #endif 865 #endif
866 866
867 for (std::set<View *>::iterator j = m_layerViewMap[layer].begin(); 867 for (std::set<View *>::iterator j = m_layerViewMap[layer].begin();
868 j != m_layerViewMap[layer].end(); ++j) { 868 j != m_layerViewMap[layer].end(); ++j) {
869 // don't use removeLayerFromView, as it issues a command 869 // don't use removeLayerFromView, as it issues a command
932 PlayParameterRepository::getInstance()->copyParameters 932 PlayParameterRepository::getInstance()->copyParameters
933 (previousModel, model); 933 (previousModel, model);
934 } 934 }
935 935
936 LayerFactory::getInstance()->setModel(layer, model); 936 LayerFactory::getInstance()->setModel(layer, model);
937 // std::cerr << "layer type: " << LayerFactory::getInstance()->getLayerTypeName(LayerFactory::getInstance()->getLayerType(layer)) << std::endl;
938 937
939 if (previousModel) { 938 if (previousModel) {
940 releaseModel(previousModel); 939 releaseModel(previousModel);
941 } 940 }
942 } 941 }
952 { 951 {
953 Model *model = layer->getModel(); 952 Model *model = layer->getModel();
954 if (!model) { 953 if (!model) {
955 #ifdef DEBUG_DOCUMENT 954 #ifdef DEBUG_DOCUMENT
956 SVDEBUG << "Document::addLayerToView: Layer (\"" 955 SVDEBUG << "Document::addLayerToView: Layer (\""
957 << layer->objectName() << "\") with no model being added to view: " 956 << layer->objectName()
957 << "\") with no model being added to view: "
958 << "normally you want to set the model first" << endl; 958 << "normally you want to set the model first" << endl;
959 #endif 959 #endif
960 } else { 960 } else {
961 if (model != m_mainModel && 961 if (model != m_mainModel &&
962 m_models.find(model) == m_models.end()) { 962 m_models.find(model) == m_models.end()) {
984 bool firstView = (m_layerViewMap.find(layer) == m_layerViewMap.end() || 984 bool firstView = (m_layerViewMap.find(layer) == m_layerViewMap.end() ||
985 m_layerViewMap[layer].empty()); 985 m_layerViewMap[layer].empty());
986 986
987 if (m_layerViewMap[layer].find(view) != 987 if (m_layerViewMap[layer].find(view) !=
988 m_layerViewMap[layer].end()) { 988 m_layerViewMap[layer].end()) {
989 cerr << "WARNING: Document::addToLayerViewMap:" 989 SVCERR << "WARNING: Document::addToLayerViewMap:"
990 << " Layer " << layer << " -> view " << view << " already in" 990 << " Layer " << layer << " -> view " << view << " already in"
991 << " layer view map -- internal inconsistency" << endl; 991 << " layer view map -- internal inconsistency" << endl;
992 } 992 }
993 993
994 m_layerViewMap[layer].insert(view); 994 m_layerViewMap[layer].insert(view);
999 void 999 void
1000 Document::removeFromLayerViewMap(Layer *layer, View *view) 1000 Document::removeFromLayerViewMap(Layer *layer, View *view)
1001 { 1001 {
1002 if (m_layerViewMap[layer].find(view) == 1002 if (m_layerViewMap[layer].find(view) ==
1003 m_layerViewMap[layer].end()) { 1003 m_layerViewMap[layer].end()) {
1004 cerr << "WARNING: Document::removeFromLayerViewMap:" 1004 SVCERR << "WARNING: Document::removeFromLayerViewMap:"
1005 << " Layer " << layer << " -> view " << view << " not in" 1005 << " Layer " << layer << " -> view " << view << " not in"
1006 << " layer view map -- internal inconsistency" << endl; 1006 << " layer view map -- internal inconsistency" << endl;
1007 } 1007 }
1008 1008
1009 m_layerViewMap[layer].erase(view); 1009 m_layerViewMap[layer].erase(view);
1105 rm->setAlignment(new AlignmentModel(model, model, nullptr, nullptr)); 1105 rm->setAlignment(new AlignmentModel(model, model, nullptr, nullptr));
1106 return; 1106 return;
1107 } 1107 }
1108 1108
1109 if (!m_align->alignModel(m_mainModel, rm)) { 1109 if (!m_align->alignModel(m_mainModel, rm)) {
1110 cerr << "Alignment failed: " << m_align->getError() << endl; 1110 SVCERR << "Alignment failed: " << m_align->getError() << endl;
1111 emit alignmentFailed(m_align->getError()); 1111 emit alignmentFailed(m_align->getError());
1112 } 1112 }
1113 } 1113 }
1114 1114
1115 void 1115 void
1266 out << indent + QString("<data%1%2>\n") 1266 out << indent + QString("<data%1%2>\n")
1267 .arg(extraAttributes == "" ? "" : " ").arg(extraAttributes); 1267 .arg(extraAttributes == "" ? "" : " ").arg(extraAttributes);
1268 1268
1269 if (m_mainModel) { 1269 if (m_mainModel) {
1270 1270
1271 #ifdef DEBUG_DOCUMENT
1272 SVDEBUG << "Document::toXml: writing main model" << endl;
1273 #endif
1274
1271 if (asTemplate) { 1275 if (asTemplate) {
1272 writePlaceholderMainModel(out, indent + " "); 1276 writePlaceholderMainModel(out, indent + " ");
1273 } else { 1277 } else {
1274 m_mainModel->toXml(out, indent + " ", "mainModel=\"true\""); 1278 m_mainModel->toXml(out, indent + " ", "mainModel=\"true\"");
1275 } 1279 }
1280 playParameters->toXml 1284 playParameters->toXml
1281 (out, indent + " ", 1285 (out, indent + " ",
1282 QString("model=\"%1\"") 1286 QString("model=\"%1\"")
1283 .arg(m_mainModel->getExportId())); 1287 .arg(m_mainModel->getExportId()));
1284 } 1288 }
1289 } else {
1290 #ifdef DEBUG_DOCUMENT
1291 SVDEBUG << "Document::toXml: have no main model to write" << endl;
1292 #endif
1285 } 1293 }
1286 1294
1287 // Models that are not used in a layer that is in a view should 1295 // Models that are not used in a layer that is in a view should
1288 // not be written. Get our list of required models first. 1296 // not be written. Get our list of required models first.
1289 1297
1317 // models first and we might as well stick with that. 1325 // models first and we might as well stick with that.
1318 1326
1319 for (std::set<Model *>::iterator i = m_aggregateModels.begin(); 1327 for (std::set<Model *>::iterator i = m_aggregateModels.begin();
1320 i != m_aggregateModels.end(); ++i) { 1328 i != m_aggregateModels.end(); ++i) {
1321 1329
1322 SVDEBUG << "checking aggregate model " << *i << endl; 1330 #ifdef DEBUG_DOCUMENT
1331 SVDEBUG << "Document::toXml: checking aggregate model " << *i << endl;
1332 #endif
1323 1333
1324 AggregateWaveModel *aggregate = qobject_cast<AggregateWaveModel *>(*i); 1334 AggregateWaveModel *aggregate = qobject_cast<AggregateWaveModel *>(*i);
1325 if (!aggregate) continue; 1335 if (!aggregate) continue;
1326 if (used.find(aggregate) == used.end()) { 1336 if (used.find(aggregate) == used.end()) {
1337 #ifdef DEBUG_DOCUMENT
1327 SVDEBUG << "(unused, skipping)" << endl; 1338 SVDEBUG << "(unused, skipping)" << endl;
1339 #endif
1328 continue; 1340 continue;
1329 } 1341 }
1330 1342
1343 #ifdef DEBUG_DOCUMENT
1331 SVDEBUG << "(used, writing)" << endl; 1344 SVDEBUG << "(used, writing)" << endl;
1345 #endif
1332 1346
1333 aggregate->toXml(out, indent + " "); 1347 aggregate->toXml(out, indent + " ");
1334 } 1348 }
1335 1349
1336 std::set<Model *> written; 1350 std::set<Model *> written;
1351 Model *model = i->first; 1365 Model *model = i->first;
1352 const ModelRecord &rec = i->second; 1366 const ModelRecord &rec = i->second;
1353 1367
1354 if (used.find(model) == used.end()) continue; 1368 if (used.find(model) == used.end()) continue;
1355 1369
1370 #ifdef DEBUG_DOCUMENT
1371 SVDEBUG << "Document::toXml: looking at model " << model
1372 << " (" << model->getTypeName() << ", \""
1373 << model->objectName() << "\") [pass = "
1374 << pass << "]" << endl;
1375 #endif
1376
1356 // We need an intelligent way to determine which models 1377 // We need an intelligent way to determine which models
1357 // need to be streamed (i.e. have been edited, or are 1378 // need to be streamed (i.e. have been edited, or are
1358 // small) and which should not be (i.e. remain as 1379 // small) and which should not be (i.e. remain as
1359 // generated by a transform, and are large). 1380 // generated by a transform, and are large).
1360 // 1381 //