mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-14 00:28:42 +00:00
DataFilters: Summary should have a filter
Missed off by accident when filtering was added. Fixes #536.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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>");
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user