comparison src/Analyser.cpp @ 242:3cb56556db72

Discard layer pointers when their layers are deleted; package up some more actions into compound commands
author Chris Cannam
date Tue, 01 Apr 2014 13:17:53 +0100
parents d40c6cdb30a4
children 3ff0f36c8fc1
comparison
equal deleted inserted replaced
241:322287c4ed1f 242:3cb56556db72
73 m_document = doc; 73 m_document = doc;
74 m_fileModel = model; 74 m_fileModel = model;
75 m_paneStack = paneStack; 75 m_paneStack = paneStack;
76 m_pane = pane; 76 m_pane = pane;
77 77
78 connect(doc, SIGNAL(layerAboutToBeDeleted(Layer *)),
79 this, SLOT(layerAboutToBeDeleted(Layer *)));
80
78 m_reAnalysingSelection = Selection(); 81 m_reAnalysingSelection = Selection();
79 m_reAnalysisCandidates.clear(); 82 m_reAnalysisCandidates.clear();
80 m_currentCandidate = -1; 83 m_currentCandidate = -1;
81 m_candidatesVisible = false; 84 m_candidatesVisible = false;
82 85
126 bool 129 bool
127 Analyser::setDisplayFrequencyExtents(float min, float max) 130 Analyser::setDisplayFrequencyExtents(float min, float max)
128 { 131 {
129 if (!m_layers[Spectrogram]) return false; 132 if (!m_layers[Spectrogram]) return false;
130 m_layers[Spectrogram]->setDisplayExtents(min, max); 133 m_layers[Spectrogram]->setDisplayExtents(min, max);
134 return true;
131 } 135 }
132 136
133 QString 137 QString
134 Analyser::addVisualisations() 138 Analyser::addVisualisations()
135 { 139 {
532 } 536 }
533 537
534 void 538 void
535 Analyser::discardPitchCandidates() 539 Analyser::discardPitchCandidates()
536 { 540 {
537 foreach (Layer *layer, m_reAnalysisCandidates) { 541 if (!m_reAnalysisCandidates.empty()) {
538 // This will cause the layer to be deleted later (ownership is 542
539 // transferred to the remove command) 543 CommandHistory::getInstance()->startCompoundOperation
540 m_document->removeLayerFromView(m_pane, layer); 544 (tr("Discard Previous Candidates"), true);
545
546 foreach (Layer *layer, m_reAnalysisCandidates) {
547 // This will cause the layer to be deleted later (ownership is
548 // transferred to the remove command)
549 m_document->removeLayerFromView(m_pane, layer);
550 }
551
552 CommandHistory::getInstance()->endCompoundOperation();
541 } 553 }
542 554
543 m_reAnalysisCandidates.clear(); 555 m_reAnalysisCandidates.clear();
544 m_currentCandidate = -1; 556 m_currentCandidate = -1;
545 m_reAnalysingSelection = Selection(); 557 m_reAnalysingSelection = Selection();
546 m_candidatesVisible = false; 558 m_candidatesVisible = false;
559 }
560
561 void
562 Analyser::layerAboutToBeDeleted(Layer *doomed)
563 {
564 cerr << "Analyser::layerAboutToBeDeleted(" << doomed << ")" << endl;
565
566 vector<Layer *> notDoomed;
567
568 foreach (Layer *layer, m_reAnalysisCandidates) {
569 if (layer != doomed) {
570 notDoomed.push_back(layer);
571 }
572 }
573
574 m_reAnalysisCandidates = notDoomed;
547 } 575 }
548 576
549 void 577 void
550 Analyser::takePitchTrackFrom(Layer *otherLayer) 578 Analyser::takePitchTrackFrom(Layer *otherLayer)
551 { 579 {