void PfPvWindow::compareChanged() { if (!amVisible()) { compareStale = true; return; } // we get busy so lets turn off updates till we're done setUpdatesEnabled(false); // ensure redraws happen setIsBlank(false); current = NULL; // we don't have a current ride compareStale = false; // but compare is no longer stale if (context->isCompareIntervals) { // set the scale and zones pfPvPlot->showCompareIntervals(); } else { // same as tab selected etc rideSelected(); } setUpdatesEnabled(true); }
void ScatterWindow::rideSelected() { if (!amVisible()) return; ride = myRideItem; if (ride == current) return; if (!ride || !ride->ride() || !ride->ride()->dataPoints().count()) { current = NULL; setIsBlank(true); return; } else setIsBlank(false); current = ride; timeSlider->setMinimum(0); if (ride->ride()->dataPoints().count()) timeSlider->setMaximum(ride->ride()->dataPoints().last()->secs); else timeSlider->setMaximum(100); timeSlider->setTickInterval(timeSlider->maximum()/20); setData(); }
void CriticalPowerWindow::newRideAdded(RideItem *here) { // any plots we already have are now stale stale = true; // mine just got Zapped, a new rideitem would not be my current item if (here == currentRide) currentRide = NULL; if (rangemode) { // force replot... stale = true; dateRangeChanged(myDateRange); } else { Season season = seasons->seasons.at(cComboSeason->currentIndex()); // Refresh global curve if a ride is added during those dates if ((here->dateTime.date() >= season.getStart() || season.getStart() == QDate()) && (here->dateTime.date() <= season.getEnd() || season.getEnd() == QDate())) cpintPlot->changeSeason(season.getStart(), season.getEnd()); // if visible make the changes visible // rideSelected is easiest way if (amVisible()) rideSelected(); } }
void ScatterWindow::intervalSelected() { if (!amVisible()) return; setData(); }
void PerformanceManagerWindow::rideSelected() { bool wasActive = active; active = amVisible(); if (!wasActive && active) replot(); }
void ModelWindow::intervalSelected() { if (!amVisible()) return; setData(false); }
void PfPvWindow::rideSelected() { // we need to refresh for compare mode if (isCompare()) { if (isVisible() && compareStale) compareChanged(); return; } if (!amVisible()) { compareStale = true; return; } RideItem *ride = myRideItem; if (!ride || !ride->ride() || !ride->ride()->isDataPresent(RideFile::watts) || !ride->ride()->isDataPresent(RideFile::cad)) { setIsBlank(true); current = NULL; return; } else { setIsBlank(false); } if (!stale && ride == current) return; pfPvPlot->setData(ride); current = ride; stale = false; // update the QLabel widget with the CP value set in PfPvPlot::setData() qaCPValue->setText(QString("%1").arg(pfPvPlot->getCP())); }
void HistogramWindow::zonesChanged() { if (!amVisible()) return; powerHist->refreshZoneLabels(); powerHist->replot(); }
void AllPlotWindow::rideSelected() { RideItem *ride = myRideItem; if (ride == NULL) current = NULL; // ignore if not active if (!amVisible()) { stale = true; return; } // ignore if null, or manual / empty if (!ride || !ride->ride() || !ride->ride()->dataPoints().count()) { current = NULL; return; } // we already plotted it! if (ride == current && stale == false) return; // ok, its now the current ride current = ride; // clear any previous selections clearSelection(); // setup the control widgets, dependant on // data present in this ride, needs to happen // before we set the plots below... setAllPlotWidgets(ride); // setup the charts to reflect current ride selection fullPlot->setDataFromRide(ride); // Fixup supplied by Josef Gebel int startidx, stopidx; if ( fullPlot->bydist == true ) { startidx = ride->ride()->distanceIndex( ( double ) spanSlider->lowerValue() / 1000.0 ); stopidx = ride->ride()->distanceIndex( ( double ) spanSlider->upperValue() / 1000.0 ); } else { startidx = ride->ride()->timeIndex( spanSlider->lowerValue() ); stopidx = ride->ride()->timeIndex( spanSlider->upperValue() ); } allPlot->setDataFromPlot( fullPlot, startidx, stopidx ); // redraw all the plots, they will check // to see if they are currently visible // and only redraw if neccessary redrawFullPlot(); redrawAllPlot(); setupStackPlots(); stale = false; }
void RideWindow::rideSelected() { // skip display if data drawn or invalid if (myRideItem == NULL || !amVisible()) return; RideItem * r = myRideItem; if (ride == r || !r || !r->ride()) return; else ride = r; loadRide(); }
void AllPlotWindow::zonesChanged() { if (!amVisible()) { stale = true; return; } allPlot->refreshZoneLabels(); allPlot->replot(); }
void HrPwWindow::rideSelected() { if (!amVisible()) return; RideItem *ride = myRideItem; if (!ride || !ride->ride()) return; setData(ride); }
void ModelWindow::rideSelected() { if (!amVisible()) return; ride = myRideItem; if (!ride || !ride->ride() || ride == current) current = ride; setData(true); }
void HistogramWindow::dateRangeChanged(DateRange dateRange) { // if we're using a custom one lets keep it if (rangemode && (useCustom || useToToday)) dateRange = custom; // has it changed? if (dateRange.from != cfrom || dateRange.to != cto) stale = true; if (!amVisible() || !stale) return; updateChart(); }
void HrPwWindow::rideSelected() { if (!amVisible()) return; RideItem *ride = myRideItem; if (!ride || !ride->ride() || !ride->ride()->isDataPresent(RideFile::watts) || !ride->ride()->isDataPresent(RideFile::hr)) setIsBlank(true); else { setIsBlank(false); setData(ride); } }
void CriticalPowerWindow::dateRangeChanged(DateRange dateRange) { if (!amVisible()) return; if (dateRange.from == cfrom && dateRange.to == cto && !stale) return; cpintPlot->changeSeason(dateRange.from, dateRange.to); cpintPlot->calculate(currentRide); cfrom = dateRange.from; cto = dateRange.to; stale = false; }
// // User selected a new interval // void HistogramWindow::intervalSelected() { if (!amVisible()) return; RideItem *ride = myRideItem; // null? or not plotting current ride, ignore signal if (!ride || rangemode) return; // update interval = true; updateChart(); }
void CriticalPowerWindow::rideSelected() { if (!amVisible()) return; currentRide = myRideItem; if (currentRide) { cpintPlot->calculate(currentRide); // apply latest colors picker->setRubberBandPen(GColor(CPLOTTRACKER)); cpintSetCPButton->setEnabled(cpintPlot->cp > 0); } }
void AerolabWindow::rideSelected() { if (!amVisible()) return; RideItem *ride = myRideItem; if (!ride) return; aerolab->setData(ride, true); allZoomer->setZoomBase(); }
// // A new ride was selected // void HistogramWindow::rideSelected() { if (!amVisible()) return; RideItem *ride = myRideItem; if (!ride || (rangemode && !stale)) return; if (rangemode) { // get range that applies to this ride powerRange = context->athlete->zones()->whichRange(ride->dateTime.date()); hrRange = context->athlete->hrZones()->whichRange(ride->dateTime.date()); } // update updateChart(); }
void CriticalPowerWindow::dateRangeChanged(DateRange dateRange) { if (!amVisible()) return; // it will either be sidebar or custom... if (useCustom) dateRange = custom; else dateRange = myDateRange; if (dateRange.from == cfrom && dateRange.to == cto && !stale) return; cpintPlot->changeSeason(dateRange.from, dateRange.to); cpintPlot->calculate(currentRide); cfrom = dateRange.from; cto = dateRange.to; stale = false; }
void HomeWindow::rideSelected() { if (amVisible()) { for (int i=0; i < charts.count(); i++) { // show if its not a tab if (currentStyle) charts[i]->show(); // keep tabs hidden, show the rest // if we are tabbed AND its the current tab then mimic tabselected // to force the tabwidget to refresh AND set its ride property (see below) //otherwise just go ahead and notify it of a new ride if (!currentStyle && charts.count() && i==tabbed->currentIndex()) tabSelected(tabbed->currentIndex(), true); // for ride change else charts[i]->setProperty("ride", property("ride")); } } }
void LTMWindow::refreshPlot() { if (amVisible() == true) { if (isCompare()) { // COMPARE PLOTS stackWidget->setCurrentIndex(3); refreshCompare(); } else if (ltmTool->showData->isChecked()) { // DATA TABLE stackWidget->setCurrentIndex(1); refreshDataTable(); } else { if (ltmTool->showStack->isChecked()) { // STACK PLOTS refreshStackPlots(); stackWidget->setCurrentIndex(2); stackDirty = false; } else { // NORMAL PLOTS plotted = DateRange(settings.start.date(), settings.end.date()); ltmPlot->setData(&settings); stackWidget->setCurrentIndex(0); dirty = false; spanSlider->setMinimum(ltmPlot->axisScaleDiv(QwtPlot::xBottom).lowerBound()); spanSlider->setMaximum(ltmPlot->axisScaleDiv(QwtPlot::xBottom).upperBound()); spanSlider->setLowerValue(spanSlider->minimum()); spanSlider->setUpperValue(spanSlider->maximum()); } } } }
void AllPlotWindow::intervalsChanged() { if (!amVisible()) { stale = true; return; } // show selection on fullplot too fullPlot->refreshIntervalMarkers(); fullPlot->replot(); // allPlot of course allPlot->refreshIntervalMarkers(); allPlot->replot(); // and then the stacked plot foreach (AllPlot *plot, allPlots) { plot->refreshIntervalMarkers(); plot->replot(); }
void LTMWindow::compareChanged() { if (!amVisible()) { compareDirty = true; return; } if (isCompare()) { // refresh plot handles the compare case refreshPlot(); } else { // forced refresh back to normal stackDirty = dirty = true; filterChanged(); // forces reread etc } repaint(); }
void AllPlotWindow::configChanged() { //We now use the window background color //fullPlot->setCanvasBackground(GColor(CPLOTTHUMBNAIL)); // we're going to replot, but only if we're active // and all the other guff RideItem *ride = myRideItem; if (!amVisible()) { stale = true; return; } // ignore if null, or manual / empty if (!ride || !ride->ride() || !ride->ride()->dataPoints().count()) return; // ok replot with the new config! redrawFullPlot(); redrawAllPlot(); redrawStackPlot(); }
void LTMWindow::refreshPlot() { if (amVisible() == true) { if (isCompare()) { // COMPARE PLOTS stackWidget->setCurrentIndex(3); refreshCompare(); } else if (ltmTool->showData->isChecked()) { // DATA TABLE stackWidget->setCurrentIndex(1); refreshDataTable(); } else { if (ltmTool->showStack->isChecked()) { // STACK PLOTS refreshStackPlots(); stackWidget->setCurrentIndex(2); stackDirty = false; } else { // NORMAL PLOTS plotted = DateRange(settings.start.date(), settings.end.date()); ltmPlot->setData(&settings); stackWidget->setCurrentIndex(0); dirty = false; } } } }
void HistogramWindow::forceReplot() { stale = true; if (amVisible()) updateChart(); }
void HistogramWindow::updateChart() { if (!amVisible()) { stale = true; return; } // What is the selected series? RideFile::SeriesType series = static_cast<RideFile::SeriesType>(seriesCombo->itemData(seriesCombo->currentIndex()).toInt()); // If no data present show the blank state page if (!rangemode) { RideFile::SeriesType baseSeries = (series == RideFile::wattsKg) ? RideFile::watts : series; if (rideItem() != NULL && rideItem()->ride()->isDataPresent(baseSeries)) setIsBlank(false); else setIsBlank(true); } else { setIsBlank(false); } // Lets get the data then if (stale) { RideFileCache *old = source; if (rangemode) { // set the date range to the appropiate selection DateRange use; if (useCustom) { use = custom; } else if (useToToday) { use = myDateRange; QDate today = QDate::currentDate(); if (use.to > today) use.to = today; } else { use = myDateRange; } if (data->isChecked()) { // plotting a data series, so refresh the ridefilecache #ifdef GC_HAVE_LUCENE source = new RideFileCache(context, use.from, use.to, isfiltered, files, rangemode); #else source = new RideFileCache(context, use.from, use.to); #endif cfrom = use.from; cto = use.to; stale = false; if (old) delete old; // guarantee source pointer changes stale = false; // well we tried // set the data on the plot powerHist->setData(source); // and which series to plot powerHist->setSeries(series); // and now the controls powerHist->setShading(shadeZones->isChecked() ? true : false); powerHist->setZoned(showInZones->isChecked() ? true : false); powerHist->setlnY(showLnY->isChecked() ? true : false); powerHist->setWithZeros(showZeroes->isChecked() ? true : false); powerHist->setSumY(showSumY->currentIndex()== 0 ? true : false); } else { if (last.from != use.from || last.to != use.to) { // remember the last lot we collected last = use; // plotting a metric, reread the metrics for the selected date range results = context->athlete->metricDB->getAllMetricsFor(use); } if (results.count() == 0) setIsBlank(true); else setIsBlank(false); // setData using the summary metrics -- always reset since filters may // have changed, or perhaps the bin width... powerHist->setSeries(RideFile::none); powerHist->setDelta(getDelta()); powerHist->setDigits(getDigits()); #ifdef GC_HAVE_LUCENE powerHist->setData(results, totalMetric(), distMetric(), isfiltered, files); #else powerHist->setData(results, totalMetric(), distMetric(), false, QStringList()); #endif powerHist->setColor(colorButton->getColor()); } } else { powerHist->setData(myRideItem, interval); // intervals selected forces data to // be recomputed since interval selection // has changed. // and which series to plot powerHist->setSeries(series); // and now the controls powerHist->setShading(shadeZones->isChecked() ? true : false); powerHist->setZoned(showInZones->isChecked() ? true : false); powerHist->setlnY(showLnY->isChecked() ? true : false); powerHist->setWithZeros(showZeroes->isChecked() ? true : false); powerHist->setSumY(showSumY->currentIndex()== 0 ? true : false); } powerHist->recalc(true); // interval changed? force recalc powerHist->replot(); interval = false;// we force a recalc whem called coz intervals // have been selected. The recalc routine in // powerhist optimises out, but doesn't keep track // of interval selection -- simplifies the setters // and getters, so worth this 'hack'. } // if stale }