Mercurial > hg > tony
diff 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 |
line wrap: on
line diff
--- a/src/Analyser.cpp Mon Mar 31 10:20:21 2014 +0100 +++ b/src/Analyser.cpp Tue Apr 01 13:17:53 2014 +0100 @@ -75,6 +75,9 @@ m_paneStack = paneStack; m_pane = pane; + connect(doc, SIGNAL(layerAboutToBeDeleted(Layer *)), + this, SLOT(layerAboutToBeDeleted(Layer *))); + m_reAnalysingSelection = Selection(); m_reAnalysisCandidates.clear(); m_currentCandidate = -1; @@ -128,6 +131,7 @@ { if (!m_layers[Spectrogram]) return false; m_layers[Spectrogram]->setDisplayExtents(min, max); + return true; } QString @@ -534,10 +538,18 @@ void Analyser::discardPitchCandidates() { - foreach (Layer *layer, m_reAnalysisCandidates) { - // This will cause the layer to be deleted later (ownership is - // transferred to the remove command) - m_document->removeLayerFromView(m_pane, layer); + if (!m_reAnalysisCandidates.empty()) { + + CommandHistory::getInstance()->startCompoundOperation + (tr("Discard Previous Candidates"), true); + + foreach (Layer *layer, m_reAnalysisCandidates) { + // This will cause the layer to be deleted later (ownership is + // transferred to the remove command) + m_document->removeLayerFromView(m_pane, layer); + } + + CommandHistory::getInstance()->endCompoundOperation(); } m_reAnalysisCandidates.clear(); @@ -547,6 +559,22 @@ } void +Analyser::layerAboutToBeDeleted(Layer *doomed) +{ + cerr << "Analyser::layerAboutToBeDeleted(" << doomed << ")" << endl; + + vector<Layer *> notDoomed; + + foreach (Layer *layer, m_reAnalysisCandidates) { + if (layer != doomed) { + notDoomed.push_back(layer); + } + } + + m_reAnalysisCandidates = notDoomed; +} + +void Analyser::takePitchTrackFrom(Layer *otherLayer) { Layer *myLayer = m_layers[PitchTrack];