diff --git a/src/DataFilter.cpp b/src/DataFilter.cpp index dfec225c7..f1bf3a6eb 100644 --- a/src/DataFilter.cpp +++ b/src/DataFilter.cpp @@ -19,6 +19,7 @@ #include "DataFilter.h" #include "Context.h" #include "Athlete.h" +#include "RideItem.h" #include "RideNavigator.h" #include "RideFileCache.h" #include diff --git a/src/DataFilter.h b/src/DataFilter.h index b2cdc99b1..17bc6eb12 100644 --- a/src/DataFilter.h +++ b/src/DataFilter.h @@ -16,16 +16,19 @@ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#ifndef _GC_DataFilter_h +#define _GC_DataFilter_h + #include #include #include #include #include #include "RideCache.h" -#include "RideItem.h" #include "RideFile.h" //for SeriesType class Context; +class RideItem; class RideMetric; class FieldDefinition; class DataFilter; @@ -93,38 +96,5 @@ class DataFilter : public QObject QStringList filenames; }; -class FilterSet -{ - // used to collect filters and apply if needed - QVector filters_; - - public: - - // create one with a set - FilterSet(bool on, QStringList list) { - if (on) filters_ << list; - } - - // create an empty set - FilterSet() {} - - // add a new filter - void addFilter(bool on, QStringList list) { - if (on) filters_ << list; - } - - // clear the filter set - void clear() { - filters_.clear(); - } - - // does the name in question pass the filter set ? - bool pass(QString name) { - foreach(QStringList list, filters_) - if (!list.contains(name)) - return false; - return true; - } -}; - extern int DataFilterdebug; +#endif diff --git a/src/Specification.cpp b/src/Specification.cpp new file mode 100644 index 000000000..c1ee9b931 --- /dev/null +++ b/src/Specification.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Mark Liversedge (liversedge@gmail.com) + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "Specification.h" +#include "RideItem.h" + +Specification::Specification(DateRange dr, FilterSet fs) : dr(dr), fs(fs) {} +Specification::Specification() {} + +// does the rideitem pass the specification ? +bool +Specification::pass(RideItem*item) +{ + return (dr.pass(item->dateTime.date()) && fs.pass(item->fileName)); +} + +// set criteria +void +Specification::setDateRange(DateRange dr) +{ + this->dr = dr; +} + +void +Specification::setFilterSet(FilterSet fs) +{ + this->fs = fs; +} diff --git a/src/Specification.h b/src/Specification.h new file mode 100644 index 000000000..a25537839 --- /dev/null +++ b/src/Specification.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2014 Mark Liversedge (liversedge@gmail.com) + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _GC_Specification_h +#define _GC_Specification_h + +#include +#include +#include "TimeUtils.h" + +class RideItem; + +class FilterSet +{ + // used to collect filters and apply if needed + QVector filters_; + + public: + + // create one with a set + FilterSet(bool on, QStringList list) { + if (on) filters_ << list; + } + + // create an empty set + FilterSet() {} + + // add a new filter + void addFilter(bool on, QStringList list) { + if (on) filters_ << list; + } + + // clear the filter set + void clear() { + filters_.clear(); + } + + // does the name in question pass the filter set ? + bool pass(QString name) { + foreach(QStringList list, filters_) + if (!list.contains(name)) + return false; + return true; + } +}; + +class Specification +{ + public: + Specification(DateRange dr, FilterSet fs); + Specification(); + + // does the rideitem pass the specification ? + bool pass(RideItem*); + + // set criteria + void setDateRange(DateRange dr); + void setFilterSet(FilterSet fs); + + private: + DateRange dr; + FilterSet fs; +}; +#endif diff --git a/src/src.pro b/src/src.pro index b757a99ab..8b3688897 100644 --- a/src/src.pro +++ b/src/src.pro @@ -421,6 +421,7 @@ HEADERS += \ Settings.h \ ShareDialog.h \ SpecialFields.h \ + Specification.h \ SpinScanPlot.h \ SpinScanPolarPlot.h \ SpinScanPlotWindow.h \ @@ -644,6 +645,7 @@ SOURCES += \ ShareDialog.cpp \ SmallPlot.cpp \ SpecialFields.cpp \ + Specification.cpp \ SpinScanPlot.cpp \ SpinScanPolarPlot.cpp \ SpinScanPlotWindow.cpp \