DataFilters: Summary should have a filter

Missed off by accident when filtering was added.

Fixes #536.
This commit is contained in:
Mark Liversedge
2013-03-30 09:54:58 +00:00
parent 093c562d07
commit b1db3dbe93
6 changed files with 64 additions and 10 deletions

View File

@@ -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

View File

@@ -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";

View File

@@ -33,7 +33,7 @@
#include <math.h>
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("<h3>Power Zones</h3>");
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("<h3>Heart Rate Zones</h3>");

View File

@@ -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

View File

@@ -100,7 +100,8 @@ SummaryMetrics::getUnitsForSymbol(QString symbol, bool UseMetric) const
else return QString("units");
}
QString SummaryMetrics::getAggregated(QString name, const QList<SummaryMetrics> &results, bool useMetricUnits, bool nofmt)
QString SummaryMetrics::getAggregated(QString name, const QList<SummaryMetrics> &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<SummaryMetrics>
// 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

View File

@@ -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<SummaryMetrics> &results, bool useMetricUnits, bool nofmt = false);
static QString getAggregated(QString name, const QList<SummaryMetrics> &results, const QStringList &filters, bool filtered,
bool useMetricUnits, bool nofmt = false);
QMap<QString, double> &values() { return value; }
QMap<QString, QString> &texts() { return text; }