# HG changeset patch # User Chris Cannam # Date 1562337290 -3600 # Node ID e540aa5d89cd42ba49ccfa27d0f7929119072273 # Parent 232262e3805120341cdadc108c5985100773ccde Update for removal of (public) getId from Model diff -r 232262e38051 -r e540aa5d89cd layer/Colour3DPlotLayer.cpp --- a/layer/Colour3DPlotLayer.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/Colour3DPlotLayer.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -155,10 +155,10 @@ if (newModel) { connectSignals(m_model); - connect(newModel.get(), SIGNAL(modelChanged()), - this, SLOT(handleModelChanged())); - connect(newModel.get(), SIGNAL(modelChangedWithin(sv_frame_t, sv_frame_t)), - this, SLOT(handleModelChangedWithin(sv_frame_t, sv_frame_t))); + connect(newModel.get(), SIGNAL(modelChanged(ModelId)), + this, SLOT(handleModelChanged(ModelId))); + connect(newModel.get(), SIGNAL(modelChangedWithin(ModelId, sv_frame_t, sv_frame_t)), + this, SLOT(handleModelChangedWithin(ModelId, sv_frame_t, sv_frame_t))); m_peakResolution = 256; if (newModel->getResolution() > 512) { @@ -214,14 +214,13 @@ if (m_peakCache.isNone()) { auto peakCache = std::make_shared (m_model, m_peakCacheDivisor); - ModelById::add(peakCache); - m_peakCache = peakCache->getId(); + m_peakCache = ModelById::add(peakCache); } return m_peakCache; } void -Colour3DPlotLayer::handleModelChanged() +Colour3DPlotLayer::handleModelChanged(ModelId modelId) { if (!m_colourScaleSet && m_colourScale == ColourScaleType::Linear) { auto model = ModelById::getAs(m_model); @@ -234,11 +233,13 @@ } } invalidatePeakCache(); - emit modelChanged(); + emit modelChanged(modelId); } void -Colour3DPlotLayer::handleModelChangedWithin(sv_frame_t startFrame, sv_frame_t endFrame) +Colour3DPlotLayer::handleModelChangedWithin(ModelId modelId, + sv_frame_t startFrame, + sv_frame_t endFrame) { if (!m_colourScaleSet && m_colourScale == ColourScaleType::Linear) { auto model = ModelById::getAs(m_model); @@ -250,7 +251,7 @@ } } } - emit modelChangedWithin(startFrame, endFrame); + emit modelChangedWithin(modelId, startFrame, endFrame); } Layer::PropertyList diff -r 232262e38051 -r e540aa5d89cd layer/Colour3DPlotLayer.h --- a/layer/Colour3DPlotLayer.h Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/Colour3DPlotLayer.h Fri Jul 05 15:34:50 2019 +0100 @@ -156,8 +156,8 @@ QString extraAttributes = "") const override; protected slots: - void handleModelChanged(); - void handleModelChangedWithin(sv_frame_t, sv_frame_t); + void handleModelChanged(ModelId); + void handleModelChangedWithin(ModelId, sv_frame_t, sv_frame_t); protected: ModelId m_model; // A DenseThreeDimensionalModel diff -r 232262e38051 -r e540aa5d89cd layer/FlexiNoteLayer.cpp --- a/layer/FlexiNoteLayer.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/FlexiNoteLayer.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -189,7 +189,7 @@ if (model) { model->setScaleUnits (UnitDatabase::getInstance()->getUnitById(value)); - emit modelChanged(); + emit modelChanged(m_model); } } else { return SingleColourLayer::setProperty(name, value); diff -r 232262e38051 -r e540aa5d89cd layer/ImageLayer.cpp --- a/layer/ImageLayer.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/ImageLayer.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -930,7 +930,7 @@ m_images.erase(img); for (ViewImageMap::iterator i = m_scaled.begin(); i != m_scaled.end(); ++i) { i->second.erase(img); - emit modelChanged(); + emit modelChanged(getModel()); } } diff -r 232262e38051 -r e540aa5d89cd layer/Layer.cpp --- a/layer/Layer.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/Layer.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -51,17 +51,17 @@ auto model = ModelById::get(modelId); if (!model) return; - connect(model.get(), SIGNAL(modelChanged()), - this, SIGNAL(modelChanged())); + connect(model.get(), SIGNAL(modelChanged(ModelId)), + this, SIGNAL(modelChanged(ModelId))); - connect(model.get(), SIGNAL(modelChangedWithin(sv_frame_t, sv_frame_t)), - this, SIGNAL(modelChangedWithin(sv_frame_t, sv_frame_t))); + connect(model.get(), SIGNAL(modelChangedWithin(ModelId, sv_frame_t, sv_frame_t)), + this, SIGNAL(modelChangedWithin(ModelId, sv_frame_t, sv_frame_t))); - connect(model.get(), SIGNAL(completionChanged()), - this, SIGNAL(modelCompletionChanged())); + connect(model.get(), SIGNAL(completionChanged(ModelId)), + this, SIGNAL(modelCompletionChanged(ModelId))); - connect(model.get(), SIGNAL(alignmentCompletionChanged()), - this, SIGNAL(modelAlignmentCompletionChanged())); + connect(model.get(), SIGNAL(alignmentCompletionChanged(ModelId)), + this, SIGNAL(modelAlignmentCompletionChanged(ModelId))); } QString diff -r 232262e38051 -r e540aa5d89cd layer/Layer.h --- a/layer/Layer.h Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/Layer.h Fri Jul 05 15:34:50 2019 +0100 @@ -562,10 +562,10 @@ void showLayer(LayerGeometryProvider *, bool show); signals: - void modelChanged(); - void modelCompletionChanged(); - void modelAlignmentCompletionChanged(); - void modelChangedWithin(sv_frame_t startFrame, sv_frame_t endFrame); + void modelChanged(ModelId); + void modelCompletionChanged(ModelId); + void modelAlignmentCompletionChanged(ModelId); + void modelChangedWithin(ModelId, sv_frame_t startFrame, sv_frame_t endFrame); void modelReplaced(); void layerParametersChanged(); diff -r 232262e38051 -r e540aa5d89cd layer/NoteLayer.cpp --- a/layer/NoteLayer.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/NoteLayer.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -193,7 +193,7 @@ if (model) { model->setScaleUnits (UnitDatabase::getInstance()->getUnitById(value)); - emit modelChanged(); + emit modelChanged(m_model); } } else { return SingleColourLayer::setProperty(name, value); diff -r 232262e38051 -r e540aa5d89cd layer/RegionLayer.cpp --- a/layer/RegionLayer.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/RegionLayer.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -228,7 +228,7 @@ if (model) { model->setScaleUnits (UnitDatabase::getInstance()->getUnitById(value)); - emit modelChanged(); + emit modelChanged(m_model); } } else { return SingleColourLayer::setProperty(name, value); diff -r 232262e38051 -r e540aa5d89cd layer/SpectrogramLayer.cpp --- a/layer/SpectrogramLayer.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/SpectrogramLayer.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -215,10 +215,12 @@ connectSignals(m_model); - connect(newModel.get(), SIGNAL(modelChanged()), - this, SLOT(cacheInvalid())); - connect(newModel.get(), SIGNAL(modelChangedWithin(sv_frame_t, sv_frame_t)), - this, SLOT(cacheInvalid(sv_frame_t, sv_frame_t))); + connect(newModel.get(), + SIGNAL(modelChanged(ModelId)), + this, SLOT(cacheInvalid(ModelId))); + connect(newModel.get(), + SIGNAL(modelChangedWithin(ModelId, sv_frame_t, sv_frame_t)), + this, SLOT(cacheInvalid(ModelId, sv_frame_t, sv_frame_t))); } emit modelReplaced(); @@ -1058,7 +1060,7 @@ } void -SpectrogramLayer::cacheInvalid() +SpectrogramLayer::cacheInvalid(ModelId) { #ifdef DEBUG_SPECTROGRAM_REPAINT cerr << "SpectrogramLayer::cacheInvalid()" << endl; @@ -1070,6 +1072,7 @@ void SpectrogramLayer::cacheInvalid( + ModelId, #ifdef DEBUG_SPECTROGRAM_REPAINT sv_frame_t from, sv_frame_t to #else @@ -1417,8 +1420,7 @@ return; } - ModelById::add(newFFTModel); - m_fftModel = newFFTModel->getId(); + m_fftModel = ModelById::add(newFFTModel); bool createWholeCache = false; checkCacheSpace(&m_peakCacheDivisor, &createWholeCache); @@ -1426,20 +1428,17 @@ if (createWholeCache) { auto whole = std::make_shared(m_fftModel, 1); - ModelById::add(whole); - m_wholeCache = whole->getId(); + m_wholeCache = ModelById::add(whole); auto peaks = std::make_shared(m_wholeCache, m_peakCacheDivisor); - ModelById::add(peaks); - m_peakCache = peaks->getId(); + m_peakCache = ModelById::add(peaks); } else { auto peaks = std::make_shared(m_fftModel, m_peakCacheDivisor); - ModelById::add(peaks); - m_peakCache = peaks->getId(); + m_peakCache = ModelById::add(peaks); } } diff -r 232262e38051 -r e540aa5d89cd layer/SpectrogramLayer.h --- a/layer/SpectrogramLayer.h Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/SpectrogramLayer.h Fri Jul 05 15:34:50 2019 +0100 @@ -237,8 +237,8 @@ ModelId getSliceableModel() const override; protected slots: - void cacheInvalid(); - void cacheInvalid(sv_frame_t startFrame, sv_frame_t endFrame); + void cacheInvalid(ModelId); + void cacheInvalid(ModelId, sv_frame_t startFrame, sv_frame_t endFrame); void preferenceChanged(PropertyContainer::PropertyName name); diff -r 232262e38051 -r e540aa5d89cd layer/SpectrumLayer.cpp --- a/layer/SpectrumLayer.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/SpectrumLayer.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -116,8 +116,7 @@ m_maxbin = newFFT->getHeight(); } - ModelById::add(newFFT); - setSliceableModel(newFFT->getId()); + setSliceableModel(ModelById::add(newFFT)); m_biasCurve.clear(); for (int i = 0; i < fftSize; ++i) { diff -r 232262e38051 -r e540aa5d89cd layer/TimeValueLayer.cpp --- a/layer/TimeValueLayer.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/layer/TimeValueLayer.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -284,7 +284,7 @@ if (model) { model->setScaleUnits (UnitDatabase::getInstance()->getUnitById(value)); - emit modelChanged(); + emit modelChanged(m_model); } } else if (name == "Draw Segment Division Lines") { setDrawSegmentDivisions(value > 0.5); diff -r 232262e38051 -r e540aa5d89cd view/Overview.cpp --- a/view/Overview.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/view/Overview.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -42,7 +42,7 @@ } void -Overview::modelChangedWithin(sv_frame_t startFrame, sv_frame_t endFrame) +Overview::modelChangedWithin(ModelId modelId, sv_frame_t startFrame, sv_frame_t endFrame) { using namespace std::rel_ops; @@ -70,7 +70,7 @@ } } - View::modelChangedWithin(startFrame, endFrame); + View::modelChangedWithin(modelId, startFrame, endFrame); } void diff -r 232262e38051 -r e540aa5d89cd view/Overview.h --- a/view/Overview.h Thu Jul 04 18:04:44 2019 +0100 +++ b/view/Overview.h Fri Jul 05 15:34:50 2019 +0100 @@ -41,7 +41,7 @@ QString getPropertyContainerIconName() const override { return "panner"; } public slots: - void modelChangedWithin(sv_frame_t startFrame, sv_frame_t endFrame) override; + void modelChangedWithin(ModelId, sv_frame_t startFrame, sv_frame_t endFrame) override; void modelReplaced() override; void globalCentreFrameChanged(sv_frame_t) override; diff -r 232262e38051 -r e540aa5d89cd view/Pane.cpp --- a/view/Pane.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/view/Pane.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -367,37 +367,49 @@ Layer *topLayer = getTopLayer(); bool haveSomeTimeXAxis = false; - std::shared_ptr waveformModel; // just for reporting purposes - std::shared_ptr workModel; - - for (LayerList::iterator vi = m_layerStack.end(); vi != m_layerStack.begin(); ) { + ModelId waveformModelId; // just for reporting purposes + ModelId workModelId; + + for (LayerList::iterator vi = m_layerStack.end(); + vi != m_layerStack.begin(); ) { + --vi; + if (!haveSomeTimeXAxis && (*vi)->hasTimeXAxis()) { haveSomeTimeXAxis = true; } - auto model = ModelById::get((*vi)->getModel()); - - if (model) { + + ModelId modelId = (*vi)->getModel(); + if (!modelId.isNone()) { if (dynamic_cast(*vi)) { - waveformModel = model; - workModel = waveformModel; + waveformModelId = modelId; + workModelId = modelId; } else { - if (std::dynamic_pointer_cast(model)) { - workModel = model; - } else if (auto wm = ModelById::getAs - (model->getSourceModel())) { - workModel = wm; + if (ModelById::isa(modelId)) { + workModelId = modelId; + } else { + auto model = ModelById::get(modelId); + if (model) { + ModelId sourceId = model->getSourceModel(); + if (ModelById::isa(sourceId)) { + workModelId = sourceId; + } + } } } } - if (waveformModel && workModel && haveSomeTimeXAxis) break; + if (!waveformModelId.isNone() && + !workModelId.isNone() && + haveSomeTimeXAxis) { + break; + } } // Block off left and right extents so we can see where the main model ends - if (workModel && hasTopLayerTimeXAxis()) { - drawModelTimeExtents(r, paint, *workModel); + if (!workModelId.isNone() && hasTopLayerTimeXAxis()) { + drawModelTimeExtents(r, paint, workModelId); } // Crosshairs for mouse movement in measure mode @@ -448,26 +460,26 @@ paint.setPen(QColor(50, 50, 50)); - if (waveformModel && + if (!waveformModelId.isNone() && sampleRate && m_manager && m_manager->shouldShowDuration()) { - drawDurationAndRate(r, *waveformModel, sampleRate, paint); + drawDurationAndRate(r, waveformModelId, sampleRate, paint); } bool haveWorkTitle = false; - if (workModel && + if (!workModelId.isNone() && m_manager && m_manager->shouldShowWorkTitle()) { - drawWorkTitle(r, paint, *workModel); + drawWorkTitle(r, paint, workModelId); haveWorkTitle = true; } - if (workModel && + if (!workModelId.isNone() && m_manager && m_manager->getAlignMode()) { - drawAlignmentStatus(r, paint, *workModel, haveWorkTitle); + drawAlignmentStatus(r, paint, workModelId, haveWorkTitle); } if (m_manager && @@ -759,8 +771,11 @@ } void -Pane::drawModelTimeExtents(QRect r, QPainter &paint, const Model &model) +Pane::drawModelTimeExtents(QRect r, QPainter &paint, ModelId modelId) { + auto model = ModelById::get(modelId); + if (!model) return; + paint.save(); QBrush brush; @@ -773,7 +788,7 @@ paint.setPen(Qt::white); } - sv_frame_t f0 = model.getStartFrame(); + sv_frame_t f0 = model->getStartFrame(); if (f0 > getStartFrame() && f0 < getEndFrame()) { int x0 = getXForFrame(f0); @@ -783,7 +798,7 @@ } } - sv_frame_t f1 = model.getEndFrame(); + sv_frame_t f1 = model->getEndFrame(); if (f1 > getStartFrame() && f1 < getEndFrame()) { int x1 = getXForFrame(f1); @@ -797,14 +812,17 @@ } void -Pane::drawAlignmentStatus(QRect r, QPainter &paint, const Model &model, +Pane::drawAlignmentStatus(QRect r, QPainter &paint, ModelId modelId, bool down) { - ModelId reference = model.getAlignmentReference(); + auto model = ModelById::get(modelId); + if (!model) return; + + ModelId reference = model->getAlignmentReference(); /* if (!reference) { cerr << "Pane[" << this << "]::drawAlignmentStatus: No reference" << endl; - } else if (reference == model.getId()) { + } else if (reference == model->getId()) { cerr << "Pane[" << this << "]::drawAlignmentStatus: This is the reference model" << endl; } else { cerr << "Pane[" << this << "]::drawAlignmentStatus: This is not the reference" << endl; @@ -813,12 +831,12 @@ QString text; int completion = 100; - if (reference == model.getId()) { + if (reference == modelId) { text = tr("Reference"); } else if (reference.isNone()) { text = tr("Unaligned"); } else { - completion = model.getAlignmentCompletion(); + completion = model->getAlignmentCompletion(); if (completion == 0) { text = tr("Unaligned"); } else if (completion < 100) { @@ -850,17 +868,20 @@ } void -Pane::modelAlignmentCompletionChanged() +Pane::modelAlignmentCompletionChanged(ModelId modelId) { - View::modelAlignmentCompletionChanged(); + View::modelAlignmentCompletionChanged(modelId); update(QRect(0, 0, 300, 100)); } void -Pane::drawWorkTitle(QRect r, QPainter &paint, const Model &model) +Pane::drawWorkTitle(QRect r, QPainter &paint, ModelId modelId) { - QString title = model.getTitle(); - QString maker = model.getMaker(); + auto model = ModelById::get(modelId); + if (!model) return; + + QString title = model->getTitle(); + QString maker = model->getMaker(); //SVDEBUG << "Pane::drawWorkTitle: title=\"" << title//<< "\", maker=\"" << maker << "\"" << endl; if (title == "") return; @@ -1034,16 +1055,19 @@ } void -Pane::drawDurationAndRate(QRect r, const Model &waveformModel, +Pane::drawDurationAndRate(QRect r, ModelId waveformModelId, sv_samplerate_t sampleRate, QPainter &paint) { + auto waveformModel = ModelById::get(waveformModelId); + if (!waveformModel) return; + int fontHeight = paint.fontMetrics().height(); int fontAscent = paint.fontMetrics().ascent(); if (r.y() + r.height() < height() - fontHeight - 6) return; - sv_samplerate_t modelRate = waveformModel.getSampleRate(); - sv_samplerate_t nativeRate = waveformModel.getNativeRate(); + sv_samplerate_t modelRate = waveformModel->getSampleRate(); + sv_samplerate_t nativeRate = waveformModel->getNativeRate(); sv_samplerate_t playbackRate = m_manager->getPlaybackSampleRate(); QString srNote = ""; @@ -1062,7 +1086,7 @@ } QString desc = tr("%1 / %2Hz%3") - .arg(RealTime::frame2RealTime(waveformModel.getEndFrame(), + .arg(RealTime::frame2RealTime(waveformModel->getEndFrame(), sampleRate) .toText(false).c_str()) .arg(nativeRate) diff -r 232262e38051 -r e540aa5d89cd view/Pane.h --- a/view/Pane.h Thu Jul 04 18:04:44 2019 +0100 +++ b/view/Pane.h Fri Jul 05 15:34:50 2019 +0100 @@ -88,7 +88,7 @@ virtual void toolModeChanged() override; virtual void zoomWheelsEnabledChanged() override; virtual void viewZoomLevelChanged(View *, ZoomLevel, bool locked) override; - virtual void modelAlignmentCompletionChanged() override; + virtual void modelAlignmentCompletionChanged(ModelId) override; // local slots, not overrides virtual void horizontalThumbwheelMoved(int value); @@ -129,12 +129,12 @@ void drawVerticalScale(QRect r, Layer *, QPainter &); void drawFeatureDescription(Layer *, QPainter &); void drawCentreLine(sv_samplerate_t, QPainter &, bool omitLine); - void drawModelTimeExtents(QRect, QPainter &, const Model &); - void drawDurationAndRate(QRect, const Model &, sv_samplerate_t, QPainter &); - void drawWorkTitle(QRect, QPainter &, const Model &); + void drawModelTimeExtents(QRect, QPainter &, ModelId); + void drawDurationAndRate(QRect, ModelId, sv_samplerate_t, QPainter &); + void drawWorkTitle(QRect, QPainter &, ModelId); void drawLayerNames(QRect, QPainter &); void drawEditingSelection(QPainter &); - void drawAlignmentStatus(QRect, QPainter &, const Model &, bool down); + void drawAlignmentStatus(QRect, QPainter &, ModelId, bool down); virtual bool render(QPainter &paint, int x0, sv_frame_t f0, sv_frame_t f1) override; diff -r 232262e38051 -r e540aa5d89cd view/View.cpp --- a/view/View.cpp Thu Jul 04 18:04:44 2019 +0100 +++ b/view/View.cpp Fri Jul 05 15:34:50 2019 +0100 @@ -706,14 +706,14 @@ this, SLOT(layerMeasurementRectsChanged())); connect(layer, SIGNAL(layerNameChanged()), this, SLOT(layerNameChanged())); - connect(layer, SIGNAL(modelChanged()), - this, SLOT(modelChanged())); - connect(layer, SIGNAL(modelCompletionChanged()), - this, SLOT(modelCompletionChanged())); - connect(layer, SIGNAL(modelAlignmentCompletionChanged()), - this, SLOT(modelAlignmentCompletionChanged())); - connect(layer, SIGNAL(modelChangedWithin(sv_frame_t, sv_frame_t)), - this, SLOT(modelChangedWithin(sv_frame_t, sv_frame_t))); + connect(layer, SIGNAL(modelChanged(ModelId)), + this, SLOT(modelChanged(ModelId))); + connect(layer, SIGNAL(modelCompletionChanged(ModelId)), + this, SLOT(modelCompletionChanged(ModelId))); + connect(layer, SIGNAL(modelAlignmentCompletionChanged(ModelId)), + this, SLOT(modelAlignmentCompletionChanged(ModelId))); + connect(layer, SIGNAL(modelChangedWithin(ModelId, sv_frame_t, sv_frame_t)), + this, SLOT(modelChangedWithin(ModelId, sv_frame_t, sv_frame_t))); connect(layer, SIGNAL(modelReplaced()), this, SLOT(modelReplaced())); @@ -761,14 +761,14 @@ this, SLOT(layerParameterRangesChanged())); disconnect(layer, SIGNAL(layerNameChanged()), this, SLOT(layerNameChanged())); - disconnect(layer, SIGNAL(modelChanged()), - this, SLOT(modelChanged())); - disconnect(layer, SIGNAL(modelCompletionChanged()), - this, SLOT(modelCompletionChanged())); - disconnect(layer, SIGNAL(modelAlignmentCompletionChanged()), - this, SLOT(modelAlignmentCompletionChanged())); - disconnect(layer, SIGNAL(modelChangedWithin(sv_frame_t, sv_frame_t)), - this, SLOT(modelChangedWithin(sv_frame_t, sv_frame_t))); + disconnect(layer, SIGNAL(modelChanged(ModelId)), + this, SLOT(modelChanged(ModelId))); + disconnect(layer, SIGNAL(modelCompletionChanged(ModelId)), + this, SLOT(modelCompletionChanged(ModelId))); + disconnect(layer, SIGNAL(modelAlignmentCompletionChanged(ModelId)), + this, SLOT(modelAlignmentCompletionChanged(ModelId))); + disconnect(layer, SIGNAL(modelChangedWithin(ModelId, sv_frame_t, sv_frame_t)), + this, SLOT(modelChangedWithin(ModelId, sv_frame_t, sv_frame_t))); disconnect(layer, SIGNAL(modelReplaced()), this, SLOT(modelReplaced())); @@ -922,23 +922,12 @@ } void -View::modelChanged() +View::modelChanged(ModelId modelId) { #ifdef DEBUG_VIEW_WIDGET_PAINT cerr << "View(" << this << ")::modelChanged()" << endl; #endif - QObject *obj = sender(); - - ModelId model; - if (Model *modelPtr = qobject_cast(obj)) { - model = modelPtr->getId(); - } else if (Layer *layerPtr = qobject_cast(obj)) { - model = layerPtr->getModel(); - } else { - return; - } - // If the model that has changed is not used by any of the cached // layers, we won't need to recreate the cache @@ -948,7 +937,7 @@ LayerList scrollables = getScrollableBackLayers(false, discard); for (LayerList::const_iterator i = scrollables.begin(); i != scrollables.end(); ++i) { - if ((*i)->getModel() == model) { + if ((*i)->getModel() == modelId) { recreate = true; break; } @@ -960,25 +949,15 @@ emit layerModelChanged(); - checkProgress(obj); + checkProgress(modelId); update(); } void -View::modelChangedWithin(sv_frame_t startFrame, sv_frame_t endFrame) +View::modelChangedWithin(ModelId modelId, + sv_frame_t startFrame, sv_frame_t endFrame) { - QObject *obj = sender(); - - ModelId model; - if (Model *modelPtr = qobject_cast(obj)) { - model = modelPtr->getId(); - } else if (Layer *layerPtr = qobject_cast(obj)) { - model = layerPtr->getModel(); - } else { - return; - } - sv_frame_t myStartFrame = getStartFrame(); sv_frame_t myEndFrame = getEndFrame(); @@ -987,11 +966,11 @@ #endif if (myStartFrame > 0 && endFrame < myStartFrame) { - checkProgress(obj); + checkProgress(modelId); return; } if (startFrame > myEndFrame) { - checkProgress(obj); + checkProgress(modelId); return; } @@ -1004,7 +983,7 @@ LayerList scrollables = getScrollableBackLayers(false, discard); for (LayerList::const_iterator i = scrollables.begin(); i != scrollables.end(); ++i) { - if ((*i)->getModel() == model) { + if ((*i)->getModel() == modelId) { recreate = true; break; } @@ -1017,27 +996,21 @@ if (startFrame < myStartFrame) startFrame = myStartFrame; if (endFrame > myEndFrame) endFrame = myEndFrame; - checkProgress(obj); + checkProgress(modelId); update(); } void -View::modelCompletionChanged() +View::modelCompletionChanged(ModelId modelId) { -// cerr << "View(" << this << ")::modelCompletionChanged()" << endl; - - QObject *obj = sender(); - checkProgress(obj); + checkProgress(modelId); } void -View::modelAlignmentCompletionChanged() +View::modelAlignmentCompletionChanged(ModelId modelId) { -// cerr << "View(" << this << ")::modelAlignmentCompletionChanged()" << endl; - - QObject *obj = sender(); - checkProgress(obj); + checkProgress(modelId); } void @@ -1391,17 +1364,18 @@ if (!layer) continue; if (dynamic_cast(layer)) continue; - auto model = ModelById::get(layer->getModel()); + ModelId thisId = layer->getModel(); + auto model = ModelById::get(thisId); if (!model) continue; - anyModel = model->getId(); + anyModel = thisId; if (!model->getAlignmentReference().isNone()) { - alignedModel = model->getId(); + alignedModel = thisId; if (layer->isLayerOpaque() || std::dynamic_pointer_cast (model)) { - goodModel = model->getId(); + goodModel = thisId; } } } @@ -1762,11 +1736,11 @@ } void -View::checkProgress(void *object) +View::checkProgress(ModelId modelId) { if (!m_showProgress) { #ifdef DEBUG_PROGRESS_STUFF - SVCERR << "View[" << this << "]::checkProgress(" << object << "): " + SVCERR << "View[" << this << "]::checkProgress(" << modelId << "): " << "m_showProgress is off" << endl; #endif return; @@ -1786,7 +1760,7 @@ QProgressBar *pb = i->second.bar; QPushButton *cancel = i->second.cancel; - if (i->first == object) { + if (i->first && i->first->getModel() == modelId) { found = true; @@ -1820,8 +1794,6 @@ m_lastError = error; } - ModelId modelId = i->first->getModel(); - auto model = ModelById::get(modelId); auto wfm = std::dynamic_pointer_cast (model); diff -r 232262e38051 -r e540aa5d89cd view/View.h --- a/view/View.h Thu Jul 04 18:04:44 2019 +0100 +++ b/view/View.h Fri Jul 05 15:34:50 2019 +0100 @@ -417,10 +417,10 @@ void contextHelpChanged(const QString &); public slots: - virtual void modelChanged(); - virtual void modelChangedWithin(sv_frame_t startFrame, sv_frame_t endFrame); - virtual void modelCompletionChanged(); - virtual void modelAlignmentCompletionChanged(); + virtual void modelChanged(ModelId); + virtual void modelChangedWithin(ModelId, sv_frame_t startFrame, sv_frame_t endFrame); + virtual void modelCompletionChanged(ModelId); + virtual void modelAlignmentCompletionChanged(ModelId); virtual void modelReplaced(); virtual void layerParametersChanged(); virtual void layerParameterRangesChanged(); @@ -504,7 +504,7 @@ void movePlayPointer(sv_frame_t f); - void checkProgress(void *object); + void checkProgress(ModelId); int getProgressBarWidth() const; // if visible int effectiveDevicePixelRatio() const;