Preserve XData on Combine Activities (Join)

Part 2 of #2406
This commit is contained in:
Alejandro Martinez
2017-09-09 20:51:21 -03:00
parent 12d44e9c03
commit 71176bd0dd

View File

@@ -109,6 +109,12 @@ MergeActivityWizard::setRide(RideFile **here, RideFile *with)
// data to 'pollute' the process
if (with) *here = with->resample(recIntSecs);
else *here = NULL;
// preserve XData
if (with && *here) {
foreach (XDataSeries *xdata, with->xdata())
(*here)->addXData(xdata->name, new XDataSeries(*xdata));
}
}
void
@@ -284,6 +290,10 @@ MergeActivityWizard::combine()
lp = p;
}
// preserve XData from first ride
foreach (XDataSeries *xdata, ride1->xdata())
combined->addXData(xdata->name, new XDataSeries (*xdata));
// now add the data from the second one!
double distanceOffset=0;
double timeOffset=0;
@@ -306,6 +316,28 @@ MergeActivityWizard::combine()
combined->appendPoint(add);
}
// and XData from second ride, append if series already present
foreach (XDataSeries *xdata, ride2->xdata()) {
if (combined->xdata().contains(xdata->name)) {
foreach (XDataPoint *point, xdata->datapoints) {
XDataPoint *pt = new XDataPoint(*point);
pt->secs = point->secs + timeOffset;
pt->km = point->km + distanceOffset;
combined->xdata(xdata->name)->datapoints.append(pt);
}
} else {
XDataSeries *xd = new XDataSeries(*xdata);
xd->datapoints.clear();
foreach (XDataPoint *point, xdata->datapoints) {
XDataPoint *pt = new XDataPoint(*point);
pt->secs = point->secs + timeOffset;
pt->km = point->km + distanceOffset;
xd->datapoints.append(pt);
}
combined->addXData(xd->name, xd);
}
}
// any intervals with a number name? find the last
int intervalN=0;
foreach(RideFileInterval *interval, ride1->intervals()) {
@@ -717,7 +749,6 @@ MergeChoose::validatePage()
RideFile *ride = RideFileFactory::instance().openRideFile(wizard->context, thisfile, errors, &rides);
if (ride && ride->dataPoints().count()) {
wizard->setRide(&wizard->ride2, ride);
return true;
}