diff --git a/src/Computrainer3dpFile.cpp b/src/Computrainer3dpFile.cpp index 9d056e443..9a8971169 100644 --- a/src/Computrainer3dpFile.cpp +++ b/src/Computrainer3dpFile.cpp @@ -35,6 +35,7 @@ typedef unsigned char ubyte; static int Computrainer3dpFileReaderRegistered = RideFileFactory::instance().registerReader("3dp", + "Computrainer 3dp", new Computrainer3dpFileReader ()); diff --git a/src/CpintPlot.cpp b/src/CpintPlot.cpp index cd4024989..fe563859d 100644 --- a/src/CpintPlot.cpp +++ b/src/CpintPlot.cpp @@ -65,16 +65,6 @@ struct cpi_file_info { QString file, inname, outname; }; -bool -is_ride_filename(const QString filename) -{ - QStringList suffixList = RideFileFactory::instance().suffixes(); - QString s("^([0-9][0-9][0-9][0-9])_([0-9][0-9])_([0-9][0-9])" - "_([0-9][0-9])_([0-9][0-9])_([0-9][0-9])\\.(%1)$"); - QRegExp re(s.arg(suffixList.join("|"))); - return (re.exactMatch(filename)); -} - QString ride_filename_to_cpi_filename(const QString filename) { @@ -88,7 +78,7 @@ cpi_files_to_update(const QDir &dir, QList &result) QListIterator i(filenames); while (i.hasNext()) { const QString &filename = i.next(); - if (is_ride_filename(filename)) { + if (RideFileFactory::instance().rideFileRegExp().exactMatch(filename)) { QString inname = dir.absoluteFilePath(filename); QString outname = dir.absoluteFilePath(ride_filename_to_cpi_filename(filename)); diff --git a/src/CsvRideFile.cpp b/src/CsvRideFile.cpp index 18d99de3e..6784842a9 100644 --- a/src/CsvRideFile.cpp +++ b/src/CsvRideFile.cpp @@ -28,7 +28,8 @@ #include "math.h" static int csvFileReaderRegistered = - RideFileFactory::instance().registerReader("csv", new CsvFileReader()); + RideFileFactory::instance().registerReader( + "csv","Comma Separated Variable", new CsvFileReader()); RideFile *CsvFileReader::openRideFile(QFile &file, QStringList &errors) const { diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 9245de90e..1385a6e6e 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -533,14 +533,18 @@ MainWindow::importFile() QString lastDir = (lastDirVar != QVariant()) ? lastDirVar.toString() : QDir::homePath(); - QStringList suffixList = RideFileFactory::instance().suffixes(); + const RideFileFactory &rff = RideFileFactory::instance(); + QStringList suffixList = rff.suffixes(); suffixList.replaceInStrings(QRegExp("^"), "*."); - QString suffixes = suffixList.join(" "); QStringList fileNames; + QStringList allFormats; + allFormats << QString("All Support Formats (%1)").arg(suffixList.join(" ")); + foreach(QString suffix, rff.suffixes()) + allFormats << QString("%1 (*.%2)").arg(rff.description(suffix)).arg(suffix); + allFormats << "All files (*.*)"; fileNames = QFileDialog::getOpenFileNames( this, tr("Import from File"), lastDir, - tr("All Support Formats (%1);;Raw Powertap Files (*.raw);;Comma Separated Variable (*.csv);;SRM training files (*.srm);;Garmin Training Centre (*.tcx);;Polar Precision (*.hrm);;WKO+ Files (*.wko);;Computrainer 3dp (*.3dp);;Quarq ANT+ Files (*.qla);;All files (*.*)").arg(suffixes)); - + allFormats.join(";;")); if (!fileNames.isEmpty()) { lastDir = QFileInfo(fileNames.front()).absolutePath(); settings->setValue(GC_SETTINGS_LAST_IMPORT_PATH, lastDir); diff --git a/src/ManualRideFile.cpp b/src/ManualRideFile.cpp index 36c7a8095..fc124c35e 100644 --- a/src/ManualRideFile.cpp +++ b/src/ManualRideFile.cpp @@ -25,7 +25,7 @@ #include "math.h" static int manualFileReaderRegistered = - RideFileFactory::instance().registerReader("man", new ManualFileReader()); + RideFileFactory::instance().registerReader("man", "Manual Ride File", new ManualFileReader()); RideFile *ManualFileReader::openRideFile(QFile &file, QStringList &errors) const { diff --git a/src/MetricAggregator.cpp b/src/MetricAggregator.cpp index 303810d84..c11337e7e 100644 --- a/src/MetricAggregator.cpp +++ b/src/MetricAggregator.cpp @@ -30,13 +30,6 @@ #include #include -static QString rideFileRegExp() -{ - QStringList suffixList = RideFileFactory::instance().suffixes(); - QString result("^(\\d\\d\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)\\.(%1)$"); - return result.arg(suffixList.join("|")); -} - MetricAggregator::MetricAggregator() { } @@ -47,7 +40,7 @@ void MetricAggregator::aggregateRides(QDir home, Zones *zones) DBAccess *dbaccess = new DBAccess(home); dbaccess->dropMetricTable(); dbaccess->createDatabase(); - QRegExp rx(rideFileRegExp()); + QRegExp rx = RideFileFactory::instance().rideFileRegExp(); QStringList errors; QStringListIterator i(RideFileFactory::instance().listRideFiles(home)); while (i.hasNext()) { @@ -71,7 +64,7 @@ bool MetricAggregator::importRide(QDir path, Zones *zones, RideFile *ride, QStri QFile file(path.absolutePath() + "/" + fileName); int zone_range = -1; - QRegExp rx(rideFileRegExp()); + QRegExp rx = RideFileFactory::instance().rideFileRegExp(); if (!rx.exactMatch(fileName)) { fprintf(stderr, "bad name: %s\n", fileName.toAscii().constData()); assert(false); @@ -147,7 +140,7 @@ void MetricAggregator::scanForMissing(QDir home, Zones *zones) QStringList errors; DBAccess *dbaccess = new DBAccess(home); QStringList filenames = dbaccess->getAllFileNames(); - QRegExp rx(rideFileRegExp()); + QRegExp rx = RideFileFactory::instance().rideFileRegExp(); QStringListIterator i(RideFileFactory::instance().listRideFiles(home)); while (i.hasNext()) { QString name = i.next(); diff --git a/src/PolarRideFile.cpp b/src/PolarRideFile.cpp index d9f0085bc..3f812bb10 100644 --- a/src/PolarRideFile.cpp +++ b/src/PolarRideFile.cpp @@ -25,7 +25,8 @@ static int polarFileReaderRegistered = - RideFileFactory::instance().registerReader("hrm", new PolarFileReader()); + RideFileFactory::instance().registerReader( + "hrm", "Polar Precision", new PolarFileReader()); RideFile *PolarFileReader::openRideFile(QFile &file, QStringList &errors) const { diff --git a/src/QuarqRideFile.cpp b/src/QuarqRideFile.cpp index c2e205c1d..f473697c5 100644 --- a/src/QuarqRideFile.cpp +++ b/src/QuarqRideFile.cpp @@ -102,8 +102,10 @@ bool quarqInterpreterInstalled( void ) { return installed; } -static int antFileReaderRegistered = - quarqInterpreterInstalled() ? RideFileFactory::instance().registerReader("qla", new QuarqFileReader()) : 0; +static int antFileReaderRegistered = quarqInterpreterInstalled() + ? RideFileFactory::instance().registerReader( + "qla", "Quarq ANT+ Files", new QuarqFileReader()) + : 0; RideFile *QuarqFileReader::openRideFile(QFile &file, QStringList &errors) const { diff --git a/src/RawRideFile.cpp b/src/RawRideFile.cpp index 1d06be155..c76118275 100644 --- a/src/RawRideFile.cpp +++ b/src/RawRideFile.cpp @@ -23,7 +23,8 @@ #include static int rawFileReaderRegistered = - RideFileFactory::instance().registerReader("raw", new RawFileReader()); + RideFileFactory::instance().registerReader( + "raw", "GoldenCheetah Raw PowerTap Format", new RawFileReader()); struct ReadState { diff --git a/src/RideFile.cpp b/src/RideFile.cpp index 935a6a896..ebd3a8101 100644 --- a/src/RideFile.cpp +++ b/src/RideFile.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2007 Sean C. Rhea (srhea@srhea.net) + * 2009 Justin F. Knotzke (jknotzke@shampoo.ca) * * 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 @@ -162,11 +163,13 @@ RideFileFactory &RideFileFactory::instance() return *instance_; } -int RideFileFactory::registerReader(const QString &suffix, +int RideFileFactory::registerReader(const QString &suffix, + const QString &description, RideFileReader *reader) { assert(!readFuncs_.contains(suffix)); readFuncs_.insert(suffix, reader); + descriptions_.insert(suffix, description); return 1; } @@ -175,6 +178,14 @@ QStringList RideFileFactory::suffixes() const return readFuncs_.keys(); } +QRegExp +RideFileFactory::rideFileRegExp() const +{ + QStringList suffixList = RideFileFactory::instance().suffixes(); + QString s("^(\\d\\d\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)_(\\d\\d)\\.(%1)$"); + return QRegExp(s.arg(suffixList.join("|"))); +} + RideFile *RideFileFactory::openRideFile(QFile &file, QStringList &errors) const { diff --git a/src/RideFile.h b/src/RideFile.h index 8fb4b968c..ca6adbd8b 100644 --- a/src/RideFile.h +++ b/src/RideFile.h @@ -115,6 +115,7 @@ class RideFileFactory { static RideFileFactory *instance_; QMap readFuncs_; + QMap descriptions_; RideFileFactory() {} @@ -122,10 +123,15 @@ class RideFileFactory { static RideFileFactory &instance(); - int registerReader(const QString &suffix, RideFileReader *reader); + int registerReader(const QString &suffix, const QString &description, + RideFileReader *reader); RideFile *openRideFile(QFile &file, QStringList &errors) const; QStringList listRideFiles(const QDir &dir) const; QStringList suffixes() const; + QString description(const QString &suffix) const { + return descriptions_[suffix]; + } + QRegExp rideFileRegExp() const; }; #endif // _RideFile_h diff --git a/src/SrmRideFile.cpp b/src/SrmRideFile.cpp index 5383ae8c5..5f63c6c70 100644 --- a/src/SrmRideFile.cpp +++ b/src/SrmRideFile.cpp @@ -23,7 +23,8 @@ #define PI M_PI static int srmFileReaderRegistered = - RideFileFactory::instance().registerReader("srm", new SrmFileReader()); + RideFileFactory::instance().registerReader( + "srm", "SRM training files", new SrmFileReader()); RideFile *SrmFileReader::openRideFile(QFile &file, QStringList &errors) const { diff --git a/src/TcxRideFile.cpp b/src/TcxRideFile.cpp index 33eb19a04..32e49ba08 100644 --- a/src/TcxRideFile.cpp +++ b/src/TcxRideFile.cpp @@ -21,7 +21,8 @@ #include "TcxParser.h" static int tcxFileReaderRegistered = - RideFileFactory::instance().registerReader("tcx", new TcxFileReader()); + RideFileFactory::instance().registerReader( + "tcx", "Garmin Training Centre", new TcxFileReader()); RideFile *TcxFileReader::openRideFile(QFile &file, QStringList &errors) const { diff --git a/src/WkoRideFile.cpp b/src/WkoRideFile.cpp index b6ec86feb..75d596f0b 100644 --- a/src/WkoRideFile.cpp +++ b/src/WkoRideFile.cpp @@ -69,7 +69,8 @@ static WKO_ULONG WKO_device; // Device ID used for this workou static char WKO_GRAPHS[32]; // GRAPHS available in this workout static int wkoFileReaderRegistered = - RideFileFactory::instance().registerReader("wko", new WkoFileReader()); + RideFileFactory::instance().registerReader( + "wko", "WKO+ Files", new WkoFileReader()); //****************************************************************************** diff --git a/src/XmlRideFile.cpp b/src/XmlRideFile.cpp index 5d0019164..28c29ac19 100644 --- a/src/XmlRideFile.cpp +++ b/src/XmlRideFile.cpp @@ -24,7 +24,8 @@ #include static int xmlFileReaderRegistered = - RideFileFactory::instance().registerReader("xml", new XmlFileReader()); + RideFileFactory::instance().registerReader( + "xml", "XML Ride Files", new XmlFileReader()); struct Interval { double from_secs, thru_secs;