From b8cb2b7afdb60618d60df59a3a7fe95a7e99c3be Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Mon, 11 Feb 2013 20:01:05 +0000 Subject: [PATCH] Fix SEGV on finf intervals on a blank activity If you try to find intervals on a blank (manual) activity the dialog will SEGV. It now checks in the same way as split. --- src/MainWindow.cpp | 61 +++++++++++++++++++++++++++------------------- src/MainWindow.h | 1 - 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 7426a82d3..747994ab0 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1281,7 +1281,7 @@ MainWindow::showTreeContextMenuPopup(const QPoint &pos) connect(actDeleteRide, SIGNAL(triggered(void)), this, SLOT(deleteRide())); QAction *actBestInt = new QAction(tr("Find Best Intervals"), treeWidget); - connect(actBestInt, SIGNAL(triggered(void)), this, SLOT(findBestIntervals())); + connect(actBestInt, SIGNAL(triggered(void)), this, SLOT(addIntervals())); QAction *actPowerPeaks = new QAction(tr("Find Power Peaks"), treeWidget); connect(actPowerPeaks, SIGNAL(triggered(void)), this, SLOT(findPowerPeaks())); @@ -2275,20 +2275,22 @@ MainWindow::downloadTP() * Intervals *--------------------------------------------------------------------*/ -void -MainWindow::findBestIntervals() -{ - BestIntervalDialog *p = new BestIntervalDialog(this); - p->setWindowModality(Qt::ApplicationModal); // don't allow select other ride or it all goes wrong! - p->exec(); -} - void MainWindow::addIntervals() { - AddIntervalDialog *p = new AddIntervalDialog(this); - p->setWindowModality(Qt::ApplicationModal); // don't allow select other ride or it all goes wrong! - p->exec(); + if (ride && ride->ride() && ride->ride()->dataPoints().count()) { + + AddIntervalDialog *p = new AddIntervalDialog(this); + p->setWindowModality(Qt::ApplicationModal); // don't allow select other ride or it all goes wrong! + p->exec(); + + } else { + + if (!ride || !ride->ride()) + QMessageBox::critical(this, tr("Find Best Intervals"), tr("No activity selected")); + else + QMessageBox::critical(this, tr("Find Best Intervals"), tr("Current activity contains no data")); + } } void @@ -2319,20 +2321,29 @@ MainWindow::findPowerPeaks() return; } - addIntervalForPowerPeaksForSecs(ride->ride(), 5, "Peak 5s"); - addIntervalForPowerPeaksForSecs(ride->ride(), 10, "Peak 10s"); - addIntervalForPowerPeaksForSecs(ride->ride(), 20, "Peak 20s"); - addIntervalForPowerPeaksForSecs(ride->ride(), 30, "Peak 30s"); - addIntervalForPowerPeaksForSecs(ride->ride(), 60, "Peak 1min"); - addIntervalForPowerPeaksForSecs(ride->ride(), 120, "Peak 2min"); - addIntervalForPowerPeaksForSecs(ride->ride(), 300, "Peak 5min"); - addIntervalForPowerPeaksForSecs(ride->ride(), 600, "Peak 10min"); - addIntervalForPowerPeaksForSecs(ride->ride(), 1200, "Peak 20min"); - addIntervalForPowerPeaksForSecs(ride->ride(), 1800, "Peak 30min"); - addIntervalForPowerPeaksForSecs(ride->ride(), 3600, "Peak 60min"); + if (ride && ride->ride() && ride->ride()->dataPoints().count()) { - // now update the RideFileIntervals - updateRideFileIntervals(); + addIntervalForPowerPeaksForSecs(ride->ride(), 5, "Peak 5s"); + addIntervalForPowerPeaksForSecs(ride->ride(), 10, "Peak 10s"); + addIntervalForPowerPeaksForSecs(ride->ride(), 20, "Peak 20s"); + addIntervalForPowerPeaksForSecs(ride->ride(), 30, "Peak 30s"); + addIntervalForPowerPeaksForSecs(ride->ride(), 60, "Peak 1min"); + addIntervalForPowerPeaksForSecs(ride->ride(), 120, "Peak 2min"); + addIntervalForPowerPeaksForSecs(ride->ride(), 300, "Peak 5min"); + addIntervalForPowerPeaksForSecs(ride->ride(), 600, "Peak 10min"); + addIntervalForPowerPeaksForSecs(ride->ride(), 1200, "Peak 20min"); + addIntervalForPowerPeaksForSecs(ride->ride(), 1800, "Peak 30min"); + addIntervalForPowerPeaksForSecs(ride->ride(), 3600, "Peak 60min"); + + // now update the RideFileIntervals + updateRideFileIntervals(); + + } else { + if (!ride || !ride->ride()) + QMessageBox::critical(this, tr("Find Power Peaks"), tr("No activity selected")); + else + QMessageBox::critical(this, tr("Find Power Peaks"), tr("Current activity contains no data")); + } } void diff --git a/src/MainWindow.h b/src/MainWindow.h index 607a1455d..a36da668b 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -299,7 +299,6 @@ class MainWindow : public QMainWindow #endif void importFile(); void importWorkout(); - void findBestIntervals(); void addIntervals(); void addIntervalForPowerPeaksForSecs(RideFile *ride, int windowSizeSecs, QString name); void findPowerPeaks();