Mercurial > hg > svgui
diff view/Pane.cpp @ 854:c17719e488c9
Fix some potential null-pointer derefs, and simplify some logic where loops were used with an unconditional "break" that meant they could only happen once (from coverity scan)
author | Chris Cannam |
---|---|
date | Wed, 03 Sep 2014 12:04:22 +0100 |
parents | d843e6275d0f |
children | 59a22f3bf86d |
line wrap: on
line diff
--- a/view/Pane.cpp Wed Sep 03 11:53:43 2014 +0100 +++ b/view/Pane.cpp Wed Sep 03 12:04:22 2014 +0100 @@ -419,10 +419,10 @@ if (e) paint.setClipRect(r); - ViewManager::ToolMode toolMode = m_manager->getToolModeFor(this); + ViewManager::ToolMode toolMode = ViewManager::NavigateMode; + if (m_manager) toolMode = m_manager->getToolModeFor(this); if (m_manager && -// !m_manager->isPlaying() && m_mouseInWidget && toolMode == ViewManager::MeasureMode) { @@ -495,6 +495,7 @@ paint.setPen(QColor(50, 50, 50)); if (waveformModel && + sampleRate && m_manager && m_manager->shouldShowDuration()) { drawDurationAndRate(r, waveformModel, sampleRate, paint); @@ -1093,8 +1094,9 @@ if (m_scaleWidth > 0) { - for (LayerList::iterator vi = m_layerStack.end(); vi != m_layerStack.begin(); ) { - --vi; + Layer *layer = getTopLayer(); + + if (layer) { paint.save(); @@ -1103,12 +1105,11 @@ paint.drawRect(xorigin, -1, m_scaleWidth, height()+1); paint.setBrush(Qt::NoBrush); - (*vi)->paintVerticalScale + layer->paintVerticalScale (this, m_manager->shouldShowVerticalColourScale(), paint, QRect(xorigin, 0, m_scaleWidth, height())); paint.restore(); - break; } } @@ -1127,12 +1128,11 @@ int formerScaleWidth = m_scaleWidth; if (m_manager && m_manager->shouldShowVerticalScale()) { - for (LayerList::iterator vi = m_layerStack.end(); vi != m_layerStack.begin(); ) { - --vi; + Layer *layer = getTopLayer(); + if (layer) { QPainter paint(image); - m_scaleWidth = (*vi)->getVerticalScaleWidth + m_scaleWidth = layer->getVerticalScaleWidth (this, m_manager->shouldShowVerticalColourScale(), paint); - break; } } else { m_scaleWidth = 0; @@ -1164,11 +1164,10 @@ int sw = 0; if (m_manager && m_manager->shouldShowVerticalScale()) { - for (LayerList::iterator vi = m_layerStack.end(); vi != m_layerStack.begin(); ) { - --vi; - sw = (*vi)->getVerticalScaleWidth + Layer *layer = getTopLayer(); + if (layer) { + sw = layer->getVerticalScaleWidth (this, m_manager->shouldShowVerticalColourScale(), paint); - break; } } @@ -1454,7 +1453,7 @@ void Pane::mouseReleaseEvent(QMouseEvent *e) { - if (e->buttons() & Qt::RightButton) { + if (e && (e->buttons() & Qt::RightButton)) { return; } @@ -1582,7 +1581,7 @@ void Pane::mouseMoveEvent(QMouseEvent *e) { - if (e->buttons() & Qt::RightButton) { + if (!e || (e->buttons() & Qt::RightButton)) { return; } @@ -1634,7 +1633,7 @@ } } - if (!m_manager->isPlaying()) { + if (m_manager && !m_manager->isPlaying()) { bool updating = false; @@ -1651,8 +1650,7 @@ } } - if (!updating && mode == ViewManager::MeasureMode && - m_manager && !m_manager->isPlaying()) { + if (!updating && mode == ViewManager::MeasureMode) { Layer *layer = getTopLayer(); if (layer && layer->nearestMeasurementRectChanged @@ -2127,7 +2125,8 @@ bool doScroll = false; if (!m_manager) doScroll = true; - if (!m_manager->isPlaying()) doScroll = true; + else if (!m_manager->isPlaying()) doScroll = true; + if (m_followPlay != PlaybackScrollContinuous) doScroll = true; if (doScroll) { @@ -2173,7 +2172,7 @@ if (mode == ViewManager::SelectMode) { m_clickedInRange = false; - m_manager->clearInProgressSelection(); + if (m_manager) m_manager->clearInProgressSelection(); emit doubleClickSelectInvoked(getFrameForX(e->x())); return; }