Mercurial > hg > tony
changeset 573:5c14493026da by-id
ModelById updates
author | Chris Cannam |
---|---|
date | Mon, 08 Jul 2019 19:27:49 +0100 |
parents | 3f0b44418a19 |
children | ca0ff30dae26 |
files | repoint-lock.json src/Analyser.cpp src/MainWindow.cpp src/MainWindow.h |
diffstat | 4 files changed, 71 insertions(+), 71 deletions(-) [+] |
line wrap: on
line diff
--- a/repoint-lock.json Mon Jul 08 14:12:08 2019 +0100 +++ b/repoint-lock.json Mon Jul 08 19:27:49 2019 +0100 @@ -46,7 +46,7 @@ "pin": "1c8844bfa946" }, "pyin": { - "pin": "550d5f186abb" + "pin": "6f17d912e1dd" }, "chp": { "pin": "456842723db6"
--- a/src/Analyser.cpp Mon Jul 08 14:12:08 2019 +0100 +++ b/src/Analyser.cpp Mon Jul 08 19:27:49 2019 +0100 @@ -197,32 +197,36 @@ void Analyser::layerCompletionChanged() { - if (getInitialAnalysisCompletion() == 100) { + if (getInitialAnalysisCompletion() < 100) { + return; + } - emit initialAnalysisCompleted(); + emit initialAnalysisCompleted(); - if (m_layers[Audio]) { + if (!m_layers[Audio]) { + return; + } - // Extend pitch-track and note layers so as to nominally - // end at the same time as the audio. This affects any - // time-filling done on export etc. - - sv_frame_t endFrame = m_layers[Audio]->getModel()->getEndFrame(); + // Extend pitch-track and note layers so as to nominally end at + // the same time as the audio. This affects any time-filling done + // on export etc. + + auto audioModel = ModelById::get(m_layers[Audio]->getModel()); + sv_frame_t endFrame = audioModel->getEndFrame(); - if (m_layers[PitchTrack]) { - SparseTimeValueModel *model = qobject_cast<SparseTimeValueModel *> - (m_layers[PitchTrack]->getModel()); - if (model) { - model->extendEndFrame(endFrame); - } - } - if (m_layers[Notes]) { - NoteModel *model = qobject_cast<NoteModel *> - (m_layers[Notes]->getModel()); - if (model) { - model->extendEndFrame(endFrame); - } - } + if (m_layers[PitchTrack]) { + auto model = ModelById::getAs<SparseTimeValueModel> + (m_layers[PitchTrack]->getModel()); + if (model) { + model->extendEndFrame(endFrame); + } + } + + if (m_layers[Notes]) { + auto model = ModelById::getAs<NoteModel> + (m_layers[Notes]->getModel()); + if (model) { + model->extendEndFrame(endFrame); } } } @@ -315,7 +319,7 @@ waveform->setShowMeans(false); // too small & pale for this waveform->setBaseColour (ColourDatabase::getInstance()->getColourIndex(tr("Grey"))); - PlayParameters *params = waveform->getPlayParameters(); + auto params = waveform->getPlayParameters(); if (params) { params->setPlayPan(-1); params->setPlayGain(1); @@ -463,7 +467,7 @@ qobject_cast<TimeValueLayer *>(m_layers[PitchTrack]); if (pitchLayer) { pitchLayer->setBaseColour(cdb->getColourIndex(tr("Black"))); - PlayParameters *params = pitchLayer->getPlayParameters(); + auto params = pitchLayer->getPlayParameters(); if (params) { params->setPlayPan(1); params->setPlayGain(0.5); @@ -476,7 +480,7 @@ qobject_cast<FlexiNoteLayer *>(m_layers[Notes]); if (flexiNoteLayer) { flexiNoteLayer->setBaseColour(cdb->getColourIndex(tr("Bright Blue"))); - PlayParameters *params = flexiNoteLayer->getPlayParameters(); + auto params = flexiNoteLayer->getPlayParameters(); if (params) { params->setPlayPan(1); params->setPlayGain(0.5); @@ -613,7 +617,7 @@ transforms.push_back(t); m_currentAsyncHandle = - m_document->createDerivedLayersAsync(transforms, ModelId, this); + m_document->createDerivedLayersAsync(transforms, m_fileModel, this); return ""; } @@ -681,7 +685,7 @@ for (int i = 0; i < (int)all.size(); ++i) { TimeValueLayer *t = qobject_cast<TimeValueLayer *>(all[i]); if (t) { - PlayParameters *params = t->getPlayParameters(); + auto params = t->getPlayParameters(); if (params) { params->setPlayAudible(false); } @@ -861,16 +865,20 @@ Analyser::takePitchTrackFrom(Layer *otherLayer) { Layer *myLayer = m_layers[PitchTrack]; - if (!myLayer) return; + if (!myLayer || !otherLayer) return; + + auto myModel = ModelById::get(myLayer->getModel()); + auto otherModel = ModelById::get(otherLayer->getModel()); + if (!myModel || !otherModel) return; Clipboard clip; - - Selection sel = Selection(myLayer->getModel()->getStartFrame(), - myLayer->getModel()->getEndFrame()); + + Selection sel = Selection(myModel->getStartFrame(), + myModel->getEndFrame()); myLayer->deleteSelection(sel); - sel = Selection(otherLayer->getModel()->getStartFrame(), - otherLayer->getModel()->getEndFrame()); + sel = Selection(otherModel->getStartFrame(), + otherModel->getEndFrame()); otherLayer->copy(m_pane, sel, clip); // Remove all pitches <= 0Hz -- we now save absent pitches as 0Hz @@ -986,7 +994,7 @@ Analyser::isAudible(Component c) const { if (m_layers[c]) { - PlayParameters *params = m_layers[c]->getPlayParameters(); + auto params = m_layers[c]->getPlayParameters(); if (!params) return false; return params->isPlayAudible(); } else { @@ -998,7 +1006,7 @@ Analyser::setAudible(Component c, bool a) { if (m_layers[c]) { - PlayParameters *params = m_layers[c]->getPlayParameters(); + auto params = m_layers[c]->getPlayParameters(); if (!params) return; params->setPlayAudible(a); saveState(c); @@ -1009,7 +1017,7 @@ Analyser::getGain(Component c) const { if (m_layers[c]) { - PlayParameters *params = m_layers[c]->getPlayParameters(); + auto params = m_layers[c]->getPlayParameters(); if (!params) return 1.f; return params->getPlayGain(); } else { @@ -1021,7 +1029,7 @@ Analyser::setGain(Component c, float gain) { if (m_layers[c]) { - PlayParameters *params = m_layers[c]->getPlayParameters(); + auto params = m_layers[c]->getPlayParameters(); if (!params) return; params->setPlayGain(gain); saveState(c); @@ -1032,7 +1040,7 @@ Analyser::getPan(Component c) const { if (m_layers[c]) { - PlayParameters *params = m_layers[c]->getPlayParameters(); + auto params = m_layers[c]->getPlayParameters(); if (!params) return 1.f; return params->getPlayPan(); } else { @@ -1044,7 +1052,7 @@ Analyser::setPan(Component c, float pan) { if (m_layers[c]) { - PlayParameters *params = m_layers[c]->getPlayParameters(); + auto params = m_layers[c]->getPlayParameters(); if (!params) return; params->setPlayPan(pan); saveState(c);
--- a/src/MainWindow.cpp Mon Jul 08 14:12:08 2019 +0100 +++ b/src/MainWindow.cpp Mon Jul 08 19:27:49 2019 +0100 @@ -1313,7 +1313,7 @@ Layer *layer = m_analyser->getLayer(Analyser::Notes); if (!layer) return; - NoteModel *model = qobject_cast<NoteModel *>(layer->getModel()); + auto model = ModelById::getAs<NoteModel>(layer->getModel()); if (!model) return; //!!! This seems like a strange and inefficient way to do this - @@ -2111,7 +2111,8 @@ QString MainWindow::exportToSVL(QString path, Layer *layer) { - Model *model = layer->getModel(); + auto model = ModelById::get(layer->getModel()); + if (!model) return "Internal error: No model in layer"; QFile file(path); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { @@ -2202,10 +2203,13 @@ SVDEBUG << "MainWindow::importPitchLayer: Have model" << endl; + ModelId modelId = ModelById::add + (std::shared_ptr<Model>(model)); + CommandHistory::getInstance()->startCompoundOperation (tr("Import Pitch Track"), true); - Layer *newLayer = m_document->createImportedLayer(model); + Layer *newLayer = m_document->createImportedLayer(modelId); m_analyser->takePitchTrackFrom(newLayer); @@ -2213,8 +2217,6 @@ CommandHistory::getInstance()->endCompoundOperation(); - //!!! swap all data in to existing layer instead of this - if (!source.isRemote()) { registerLastOpenedFilePath (FileFinder::LayerFile, @@ -2239,8 +2241,7 @@ Layer *layer = m_analyser->getLayer(Analyser::PitchTrack); if (!layer) return; - SparseTimeValueModel *model = - qobject_cast<SparseTimeValueModel *>(layer->getModel()); + auto model = ModelById::getAs<SparseTimeValueModel>(layer->getModel()); if (!model) return; FileFinder::FileType type = FileFinder::LayerFileNoMidiNonSV; @@ -2263,7 +2264,7 @@ } else if (suffix == "ttl" || suffix == "n3") { - RDFExporter exporter(path, model); + RDFExporter exporter(path, model.get()); exporter.write(); if (!exporter.isOK()) { error = exporter.getError(); @@ -2273,7 +2274,7 @@ DataExportOptions options = DataExportFillGaps; - CSVFileWriter writer(path, model, + CSVFileWriter writer(path, model.get(), ((suffix == "csv") ? "," : "\t"), options); writer.write(); @@ -2296,7 +2297,7 @@ Layer *layer = m_analyser->getLayer(Analyser::Notes); if (!layer) return; - NoteModel *model = qobject_cast<NoteModel *>(layer->getModel()); + auto model = ModelById::getAs<NoteModel>(layer->getModel()); if (!model) return; FileFinder::FileType type = FileFinder::LayerFileNonSV; @@ -2317,7 +2318,7 @@ } else if (suffix == "mid" || suffix == "midi") { - MIDIFileWriter writer(path, model, model->getSampleRate()); + MIDIFileWriter writer(path, model.get(), model->getSampleRate()); writer.write(); if (!writer.isOK()) { error = writer.getError(); @@ -2325,7 +2326,7 @@ } else if (suffix == "ttl" || suffix == "n3") { - RDFExporter exporter(path, model); + RDFExporter exporter(path, model.get()); exporter.write(); if (!exporter.isOK()) { error = exporter.getError(); @@ -2335,7 +2336,7 @@ DataExportOptions options = DataExportOmitLevels; - CSVFileWriter writer(path, model, + CSVFileWriter writer(path, model.get(), ((suffix == "csv") ? "," : "\t"), options); writer.write(); @@ -2654,9 +2655,9 @@ { Pane *pane = m_analyser->getPane(); Layer *layer0 = m_analyser->getLayer(Analyser::Notes); - NoteModel *model = qobject_cast<NoteModel *>(layer0->getModel()); + auto model = ModelById::getAs<NoteModel>(layer0->getModel()); FlexiNoteLayer *layer = qobject_cast<FlexiNoteLayer *>(layer0); - if (!layer) return; + if (!layer || !model) return; MultiSelection::SelectionList selections = m_viewManager->getSelections(); @@ -2960,23 +2961,17 @@ } void -MainWindow::modelAdded(Model *model) +MainWindow::modelAdded(ModelId model) { MainWindowBase::modelAdded(model); - DenseTimeValueModel *dtvm = qobject_cast<DenseTimeValueModel *>(model); + auto dtvm = ModelById::getAs<DenseTimeValueModel>(model); if (dtvm) { cerr << "A dense time-value model (such as an audio file) has been loaded" << endl; } } void -MainWindow::modelAboutToBeDeleted(Model *model) -{ - MainWindowBase::modelAboutToBeDeleted(model); -} - -void -MainWindow::mainModelChanged(WaveFileModel *model) +MainWindow::mainModelChanged(ModelId model) { m_panLayer->setModel(model); @@ -3023,7 +3018,7 @@ void MainWindow::analyseNewMainModel() { - WaveFileModel *model = getMainModel(); + auto model = getMainModel(); cerr << "MainWindow::analyseNewMainModel: main model is " << model << endl; @@ -3073,7 +3068,7 @@ this, SLOT(regionOutlined(QRect))); QString error = m_analyser->newFileLoaded - (m_document, getMainModel(), m_paneStack, pane); + (m_document, getMainModelId(), m_paneStack, pane); if (error != "") { QMessageBox::warning (this, @@ -3083,13 +3078,11 @@ } } - if (!m_withSpectrogram) - { + if (!m_withSpectrogram) { m_analyser->setVisible(Analyser::Spectrogram, false); } - if (!m_withSonification) - { + if (!m_withSonification) { m_analyser->setAudible(Analyser::PitchTrack, false); m_analyser->setAudible(Analyser::Notes, false); }
--- a/src/MainWindow.h Mon Jul 08 14:12:08 2019 +0100 +++ b/src/MainWindow.h Mon Jul 08 19:27:49 2019 +0100 @@ -137,7 +137,6 @@ virtual void mainModelChanged(ModelId); virtual void mainModelGainChanged(float); virtual void modelAdded(ModelId); - virtual void modelAboutToBeDeleted(ModelId); virtual void modelGenerationFailed(QString, QString); virtual void modelGenerationWarning(QString, QString);