Mercurial > hg > tony
changeset 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 | 322287c4ed1f |
children | 3ff0f36c8fc1 |
files | .hgsubstate src/Analyser.cpp src/Analyser.h |
diffstat | 3 files changed, 40 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgsubstate Mon Mar 31 10:20:21 2014 +0100 +++ b/.hgsubstate Tue Apr 01 13:17:53 2014 +0100 @@ -1,6 +1,6 @@ 0ca7c7e21991b7cf5c6c4306af64280947d0b357 chp 236814e07bd07473958c1ff89103124536a0c3c8 dataquay -60eb8771d34050e3bed8e715f5fcd0275de469ef pyin +8180299e50873655869e3ee51390099632033a43 pyin 27d4e7152c954bf3c4387319db088fb3cd02436b sv-dependency-builds 3144af512ea3447e6cf1775f02b5b54b5a5ddeb5 svapp 0c8218b2d84a172049d966c82c2064f5aa59c503 svcore
--- 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];
--- a/src/Analyser.h Mon Mar 31 10:20:21 2014 +0100 +++ b/src/Analyser.h Tue Apr 01 13:17:53 2014 +0100 @@ -55,10 +55,10 @@ bool setDisplayFrequencyExtents(float min, float max); enum Component { - Audio, - PitchTrack, - Notes, - Spectrogram, + Audio = 0, + PitchTrack = 1, + Notes = 2, + Spectrogram = 3, }; bool isVisible(Component c) const; @@ -192,6 +192,9 @@ signals: void layersChanged(); +protected slots: + void layerAboutToBeDeleted(Layer *); + protected: Document *m_document; WaveFileModel *m_fileModel;