diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 270a1922f..00cb012ef 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1360,6 +1360,43 @@ MainWindow::showTreeContextMenuPopup(const QPoint &pos) void MainWindow::intervalPopup() { + // always show the 'find best' 'find peaks' options + QMenu menu(intervalItem); + + RideItem *rideItem = (RideItem *)treeWidget->selectedItems().first(); + + if (rideItem != NULL && rideItem->ride() && rideItem->ride()->dataPoints().count()) { + QAction *actFindPeak = new QAction(tr("Find Peak Intervals"), intervalItem); + QAction *actFindBest = new QAction(tr("Find Best Intervals"), intervalItem); + connect(actFindPeak, SIGNAL(triggered(void)), this, SLOT(findPowerPeaks(void))); + connect(actFindBest, SIGNAL(triggered(void)), this, SLOT(addIntervals(void))); + menu.addAction(actFindPeak); + menu.addAction(actFindBest); + } + + if (intervalWidget->selectedItems().count() == 1) { + + // we can zoom, rename etc if only 1 interval is selected + QAction *actZoomInt = new QAction(tr("Zoom to interval"), intervalWidget); + QAction *actRenameInt = new QAction(tr("Rename interval"), intervalWidget); + QAction *actDeleteInt = new QAction(tr("Delete interval"), intervalWidget); + connect(actRenameInt, SIGNAL(triggered(void)), this, SLOT(renameIntervalSelected(void))); + connect(actDeleteInt, SIGNAL(triggered(void)), this, SLOT(deleteIntervalSelected(void))); + connect(actZoomInt, SIGNAL(triggered(void)), this, SLOT(zoomIntervalSelected(void))); + + menu.addAction(actZoomInt); + menu.addAction(actRenameInt); + menu.addAction(actDeleteInt); + } + + if (intervalWidget->selectedItems().count() > 1) { + + QAction *actDeleteInt = new QAction(tr("Delete selected intervals"), intervalWidget); + connect(actDeleteInt, SIGNAL(triggered(void)), this, SLOT(deleteIntervalSelected(void))); + menu.addAction(actDeleteInt); + } + + menu.exec(analSidebar->mapToGlobal((QPoint(intervalItem->pos().x()+intervalItem->width()-20, intervalItem->pos().y())))); } void @@ -2421,17 +2458,17 @@ MainWindow::updateRideFileIntervals() which->setDirty(true); } +void +MainWindow::deleteIntervalSelected() +{ + // delete the intervals that are selected (from the menu) + // the normal delete intervals does that already + deleteInterval(); +} + void MainWindow::deleteInterval() { - // renumber remaining - int oindex = activeInterval->displaySequence; - for (int i=0; ichildCount(); i++) { - IntervalItem *it = (IntervalItem *)allIntervals->child(i); - int ds = it->displaySequence; - if (ds > oindex) it->setDisplaySequence(ds-1); - } - // now delete highlighted! for (int i=0; ichildCount();) { if (allIntervals->child(i)->isSelected()) delete allIntervals->takeChild(i); @@ -2441,6 +2478,19 @@ MainWindow::deleteInterval() updateRideFileIntervals(); // will emit intervalChanged() signal } +void +MainWindow::renameIntervalSelected() +{ + // go edit the name + for (int i=0; ichildCount();) { + if (allIntervals->child(i)->isSelected()) { + allIntervals->child(i)->setFlags(activeInterval->flags() | Qt::ItemIsEditable); + intervalWidget->editItem(allIntervals->child(i), 0); + break; + } else i++; + } +} + void MainWindow::renameInterval() { // go edit the name @@ -2454,6 +2504,18 @@ MainWindow::intervalEdited(QTreeWidgetItem *, int) { updateRideFileIntervals(); // will emit intervalChanged() signal } +void +MainWindow::zoomIntervalSelected() +{ + // zoom the one interval that is selected via popup menu + for (int i=0; ichildCount();) { + if (allIntervals->child(i)->isSelected()) { + emit intervalZoom((IntervalItem*)(allIntervals->child(i))); + break; + } else i++; + } +} + void MainWindow::zoomInterval() { // zoom into this interval on allPlot diff --git a/src/MainWindow.h b/src/MainWindow.h index cb2116a2a..37dc38450 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -324,9 +324,12 @@ class MainWindow : public QMainWindow void resetWindowLayout(); void dateChanged(const QDate &); void showContextMenuPopup(const QPoint &); - void deleteInterval(); - void renameInterval(); - void zoomInterval(); + void deleteInterval(); // from right click + void renameInterval(); // from right click + void zoomInterval(); // from right click + void renameIntervalSelected(void); // from menu popup + void deleteIntervalSelected(void); // from menu popup + void zoomIntervalSelected(void); // from menu popup void frontInterval(); void backInterval(); void intervalEdited(QTreeWidgetItem *, int);