From b1db3dbe93594fe3ca300dcae4beb51002abfbb2 Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Sat, 30 Mar 2013 09:54:58 +0000 Subject: [PATCH] DataFilters: Summary should have a filter Missed off by accident when filtering was added. Fixes #536. --- src/GcCalendar.cpp | 3 ++- src/LTMSidebar.cpp | 3 ++- src/RideSummaryWindow.cpp | 37 +++++++++++++++++++++++++++++++------ src/RideSummaryWindow.h | 22 ++++++++++++++++++++++ src/SummaryMetrics.cpp | 6 +++++- src/SummaryMetrics.h | 3 ++- 6 files changed, 64 insertions(+), 10 deletions(-) diff --git a/src/GcCalendar.cpp b/src/GcCalendar.cpp index d8f71b98b..896143337 100644 --- a/src/GcCalendar.cpp +++ b/src/GcCalendar.cpp @@ -333,7 +333,8 @@ GcCalendar::setSummary() const RideMetric *metric = RideMetricFactory::instance().rideMetric(metricname); - QString value = SummaryMetrics::getAggregated(metricname, results, useMetricUnits); + QStringList empty; // usually for filters, but we don't do that + QString value = SummaryMetrics::getAggregated(metricname, results, empty, false, useMetricUnits); // Maximum Max and Average Average looks nasty, remove from name for display diff --git a/src/LTMSidebar.cpp b/src/LTMSidebar.cpp index b3d68c675..0075c8497 100644 --- a/src/LTMSidebar.cpp +++ b/src/LTMSidebar.cpp @@ -680,7 +680,8 @@ LTMSidebar::setSummary(DateRange dateRange) const RideMetric *metric = RideMetricFactory::instance().rideMetric(metricname); - QString value = SummaryMetrics::getAggregated(metricname, results, main->useMetricUnits); + QStringList empty; // filter list not used at present + QString value = SummaryMetrics::getAggregated(metricname, results, empty, false, main->useMetricUnits); // Maximum Max and Average Average looks nasty, remove from name for display QString s = metric ? metric->name().replace(QRegExp(tr("^(Average|Max) ")), "") : "unknown"; diff --git a/src/RideSummaryWindow.cpp b/src/RideSummaryWindow.cpp index 7d8768ac3..b3ef16ccd 100644 --- a/src/RideSummaryWindow.cpp +++ b/src/RideSummaryWindow.cpp @@ -33,7 +33,7 @@ #include RideSummaryWindow::RideSummaryWindow(MainWindow *mainWindow, bool ridesummary) : - GcChartWindow(mainWindow), mainWindow(mainWindow), ridesummary(ridesummary), useCustom(false), useToToday(false) + GcChartWindow(mainWindow), mainWindow(mainWindow), ridesummary(ridesummary), useCustom(false), useToToday(false), filtered(false) { setInstanceName("Ride Summary Window"); setRideItem(NULL); @@ -54,6 +54,15 @@ RideSummaryWindow::RideSummaryWindow(MainWindow *mainWindow, bool ridesummary) : cl->setSpacing(0); setControls(c); +#ifdef GC_HAVE_LUCENE + // filter / searchbox + searchBox = new SearchFilterBox(this, mainWindow); + connect(searchBox, SIGNAL(searchClear()), this, SLOT(clearFilter())); + connect(searchBox, SIGNAL(searchResults(QStringList)), this, SLOT(setFilter(QStringList))); + cl->addRow(new QLabel(tr("Filter")), searchBox); + cl->addWidget(new QLabel("")); //spacing +#endif + cl->addRow(new QLabel(tr("Date range")), dateSetting); } @@ -93,6 +102,22 @@ RideSummaryWindow::RideSummaryWindow(MainWindow *mainWindow, bool ridesummary) : setChartLayout(vlayout); } +void +RideSummaryWindow::clearFilter() +{ + filters.clear(); + filtered = false; + refresh(); +} + +void +RideSummaryWindow::setFilter(QStringList list) +{ + filters = list; + filtered = true; + refresh(); +} + void RideSummaryWindow::rideSelected() { @@ -312,7 +337,7 @@ RideSummaryWindow::htmlSummary() const // get the value - from metrics or from data array if (ridesummary) s = s.arg(time_to_string(metrics.getForSymbol(symbol))); - else s = s.arg(SummaryMetrics::getAggregated(symbol, data, useMetricUnits)); + else s = s.arg(SummaryMetrics::getAggregated(symbol, data, filters, filtered, useMetricUnits)); } else { if (m->units(useMetricUnits) != "") s = s.arg(" (" + m->units(useMetricUnits) + ")"); @@ -328,7 +353,7 @@ RideSummaryWindow::htmlSummary() const double pace; if (ridesummary) pace = metrics.getForSymbol(symbol) * (useMetricUnits ? 1 : m->conversion()) + (useMetricUnits ? 0 : m->conversionSum()); - else pace = SummaryMetrics::getAggregated(symbol, data, useMetricUnits).toDouble(); + else pace = SummaryMetrics::getAggregated(symbol, data, filters, filtered, useMetricUnits).toDouble(); s = s.arg(QTime(0,0,0,0).addSecs(pace*60).toString("mm:ss")); @@ -337,7 +362,7 @@ RideSummaryWindow::htmlSummary() const // get the value - from metrics or from data array if (ridesummary) s = s.arg(metrics.getForSymbol(symbol) * (useMetricUnits ? 1 : m->conversion()) + (useMetricUnits ? 0 : m->conversionSum()), 0, 'f', m->precision()); - else s = s.arg(SummaryMetrics::getAggregated(symbol, data, useMetricUnits)); + else s = s.arg(SummaryMetrics::getAggregated(symbol, data, filters, filtered, useMetricUnits)); } } @@ -356,7 +381,7 @@ RideSummaryWindow::htmlSummary() const // if using metrics or data if (ridesummary) time_in_zone[i] = metrics.getForSymbol(timeInZones[i]); - else time_in_zone[i] = SummaryMetrics::getAggregated(timeInZones[i], data, useMetricUnits, true).toDouble(); + else time_in_zone[i] = SummaryMetrics::getAggregated(timeInZones[i], data, filters, filtered, useMetricUnits, true).toDouble(); } summary += tr("

Power Zones

"); summary += mainWindow->zones()->summarize(rideItem->zoneRange(), time_in_zone); //aggregating @@ -371,7 +396,7 @@ RideSummaryWindow::htmlSummary() const // if using metrics or data if (ridesummary) time_in_zone[i] = metrics.getForSymbol(timeInZonesHR[i]); - else time_in_zone[i] = SummaryMetrics::getAggregated(timeInZonesHR[i], data, useMetricUnits, true).toDouble(); + else time_in_zone[i] = SummaryMetrics::getAggregated(timeInZonesHR[i], data, filters, filtered, useMetricUnits, true).toDouble(); } summary += tr("

Heart Rate Zones

"); diff --git a/src/RideSummaryWindow.h b/src/RideSummaryWindow.h index a77ab81ab..ea5c59d8e 100644 --- a/src/RideSummaryWindow.h +++ b/src/RideSummaryWindow.h @@ -27,12 +27,19 @@ #include "SummaryMetrics.h" +#ifdef GC_HAVE_LUCENE +#include "SearchFilterBox.h" +#endif + class RideSummaryWindow : public GcChartWindow { Q_OBJECT G_OBJECT +#ifdef GC_HAVE_LUCENE + Q_PROPERTY(QString filter READ filter WRITE setFilter USER true) +#endif Q_PROPERTY(QDate fromDate READ fromDate WRITE setFromDate USER true) Q_PROPERTY(QDate toDate READ toDate WRITE setToDate USER true) Q_PROPERTY(QDate startDate READ startDate WRITE setStartDate USER true) @@ -61,6 +68,11 @@ class RideSummaryWindow : public GcChartWindow void setLastNX(int x) { dateSetting->setLastNX(x); } int prevN() { return dateSetting->prevN(); } void setPrevN(int x) { dateSetting->setPrevN(x); } +#ifdef GC_HAVE_LUCENE + // filter + QString filter() const { return ridesummary ? "" : searchBox->filter(); } + void setFilter(QString x) { if (!ridesummary) searchBox->setFilter(x); } +#endif protected slots: @@ -75,6 +87,11 @@ class RideSummaryWindow : public GcChartWindow void useStandardRange(); void useThruToday(); +#ifdef GC_HAVE_LUCENE + void clearFilter(); + void setFilter(QStringList); +#endif + protected: QString htmlSummary() const; @@ -92,6 +109,11 @@ class RideSummaryWindow : public GcChartWindow bool useCustom; bool useToToday; DateRange custom; +#ifdef GC_HAVE_LUCENE + SearchFilterBox *searchBox; +#endif + QStringList filters; // empty when no lucene + bool filtered; // are we using a filter? }; #endif // _GC_RideSummaryWindow_h diff --git a/src/SummaryMetrics.cpp b/src/SummaryMetrics.cpp index 449f89901..45f50dca7 100644 --- a/src/SummaryMetrics.cpp +++ b/src/SummaryMetrics.cpp @@ -100,7 +100,8 @@ SummaryMetrics::getUnitsForSymbol(QString symbol, bool UseMetric) const else return QString("units"); } -QString SummaryMetrics::getAggregated(QString name, const QList &results, bool useMetricUnits, bool nofmt) +QString SummaryMetrics::getAggregated(QString name, const QList &results, const QStringList &filters, + bool filtered, bool useMetricUnits, bool nofmt) { // get the metric details, so we can convert etc const RideMetric *metric = RideMetricFactory::instance().rideMetric(name); @@ -113,6 +114,9 @@ QString SummaryMetrics::getAggregated(QString name, const QList // loop through and aggregate foreach (SummaryMetrics rideMetrics, results) { + // skip filtered rides + if (filtered && !filters.contains(rideMetrics.getFileName())) continue; + // get this value double value = rideMetrics.getForSymbol(name); double count = rideMetrics.getForSymbol("workout_time"); // for averaging diff --git a/src/SummaryMetrics.h b/src/SummaryMetrics.h index 0fb3c34fe..0e5334dc7 100644 --- a/src/SummaryMetrics.h +++ b/src/SummaryMetrics.h @@ -64,7 +64,8 @@ class SummaryMetrics QString getUnitsForSymbol(QString symbol, bool UseMetric) const; // when passed a list of summary metrics and a name return aggregated value as a string - static QString getAggregated(QString name, const QList &results, bool useMetricUnits, bool nofmt = false); + static QString getAggregated(QString name, const QList &results, const QStringList &filters, bool filtered, + bool useMetricUnits, bool nofmt = false); QMap &values() { return value; } QMap &texts() { return text; }