1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-10-07 07:13:21 +02:00
GPXSee/src/data/data.cpp

120 lines
2.8 KiB
C++
Raw Normal View History

#include <QFile>
#include <QFileInfo>
2016-10-23 11:09:20 +02:00
#include <QLineF>
#include "gpxparser.h"
#include "tcxparser.h"
#include "csvparser.h"
#include "kmlparser.h"
#include "fitparser.h"
2016-11-10 00:08:11 +01:00
#include "igcparser.h"
2016-11-16 23:54:15 +01:00
#include "nmeaparser.h"
2016-10-23 11:09:20 +02:00
#include "data.h"
2017-09-14 20:19:19 +02:00
static GPXParser gpx;
static TCXParser tcx;
static KMLParser kml;
static FITParser fit;
static CSVParser csv;
static IGCParser igc;
static NMEAParser nmea;
2017-07-27 19:47:46 +02:00
static QHash<QString, Parser*> parsers()
2016-10-23 11:09:20 +02:00
{
2017-07-27 19:47:46 +02:00
QHash<QString, Parser*> hash;
2017-09-14 20:19:19 +02:00
hash.insert("gpx", &gpx);
hash.insert("tcx", &tcx);
hash.insert("kml", &kml);
hash.insert("fit", &fit);
hash.insert("csv", &csv);
hash.insert("igc", &igc);
hash.insert("nmea", &nmea);
2017-07-27 19:47:46 +02:00
return hash;
2016-10-23 11:09:20 +02:00
}
2017-09-14 20:19:19 +02:00
2017-07-27 19:47:46 +02:00
QHash<QString, Parser*> Data::_parsers = parsers();
2016-10-23 11:09:20 +02:00
Data::~Data()
{
for (int i = 0; i < _tracks.count(); i++)
delete _tracks.at(i);
for (int i = 0; i < _routes.count(); i++)
delete _routes.at(i);
}
2017-07-27 19:47:46 +02:00
void Data::processData()
{
for (int i = 0; i < _trackData.count(); i++)
_tracks.append(new Track(_trackData.at(i)));
for (int i = 0; i < _routeData.count(); i++)
_routes.append(new Route(_routeData.at(i)));
}
2016-10-23 11:09:20 +02:00
bool Data::loadFile(const QString &fileName)
{
QFile file(fileName);
QFileInfo fi(fileName);
2016-10-23 11:09:20 +02:00
_errorString.clear();
_errorLine = 0;
if (!file.open(QFile::ReadOnly)) {
2016-10-23 11:09:20 +02:00
_errorString = qPrintable(file.errorString());
return false;
}
QHash<QString, Parser*>::iterator it;
if ((it = _parsers.find(fi.suffix().toLower())) != _parsers.end()) {
2017-07-27 19:47:46 +02:00
if (it.value()->parse(&file, _trackData, _routeData, _waypoints)) {
processData();
2016-10-23 11:09:20 +02:00
return true;
}
_errorLine = it.value()->errorLine();
_errorString = it.value()->errorString();
} else {
for (it = _parsers.begin(); it != _parsers.end(); it++) {
2017-07-27 19:47:46 +02:00
if (it.value()->parse(&file, _trackData, _routeData, _waypoints)) {
processData();
return true;
}
file.reset();
2016-10-23 11:09:20 +02:00
}
qWarning("Error loading data file: %s:\n", qPrintable(fileName));
for (it = _parsers.begin(); it != _parsers.end(); it++)
qWarning("%s: line %d: %s\n", qPrintable(it.key()),
it.value()->errorLine(), qPrintable(it.value()->errorString()));
_errorLine = 0;
_errorString = "Unknown format";
2016-10-23 11:09:20 +02:00
}
return false;
}
2017-07-27 19:47:46 +02:00
QString Data::formats()
{
2018-02-04 15:30:54 +01:00
return
tr("Supported files") + " (*.csv *.fit *.gpx *.igc *.kml *.nmea *.tcx);;"
+ tr("CSV files") + " (*.csv);;" + tr("FIT files") + " (*.fit);;"
+ tr("GPX files") + " (*.gpx);;" + tr("IGC files") + " (*.igc);;"
+ tr("KML files") + " (*.kml);;" + tr("NMEA files") + " (*.nmea);;"
+ tr("TCX files") + " (*.tcx);;" + tr("All files") + "(*)";
2017-07-27 19:47:46 +02:00
}
QStringList Data::filter()
{
QStringList filter;
QHash<QString, Parser*>::iterator it;
for (it = _parsers.begin(); it != _parsers.end(); it++)
filter << QString("*.%1").arg(it.key());
return filter;
}