1 #include <QApplication>
4 #include "common/util.h"
10 #include "igcparser.h"
11 #include "nmeaparser.h"
12 #include "oziparsers.h"
13 #include "locparser.h"
14 #include "slfparser.h"
15 #include "geojsonparser.h"
16 #include "exifparser.h"
17 #include "cupparser.h"
18 #include "gpiparser.h"
19 #include "smlparser.h"
20 #include "ov2parser.h"
21 #include "itnparser.h"
22 #include "onmoveparsers.h"
23 #include "twonavparser.h"
33 static NMEAParser nmea
;
39 static GeoJSONParser geojson
;
40 static EXIFParser exif
;
48 static TwoNavParser twonav
;
50 static QMultiMap
<QString
, Parser
*> parsers()
52 QMultiMap
<QString
, Parser
*> map
;
54 map
.insert("gpx", &gpx
);
55 map
.insert("tcx", &tcx
);
56 map
.insert("kml", &kml
);
57 map
.insert("kmz", &kml
);
58 map
.insert("fit", &fit
);
59 map
.insert("csv", &csv
);
60 map
.insert("igc", &igc
);
61 map
.insert("nmea", &nmea
);
62 map
.insert("plt", &plt
);
63 map
.insert("wpt", &wpt
);
64 map
.insert("rte", &rte
);
65 map
.insert("loc", &loc
);
66 map
.insert("slf", &slf
);
67 map
.insert("json", &geojson
);
68 map
.insert("geojson", &geojson
);
69 map
.insert("jpeg", &exif
);
70 map
.insert("jpg", &exif
);
71 map
.insert("cup", &cup
);
72 map
.insert("gpi", &gpi
);
73 map
.insert("sml", &sml
);
74 map
.insert("ov2", &ov2
);
75 map
.insert("itn", &itn
);
76 map
.insert("omd", &omd
);
77 map
.insert("ghp", &ghp
);
78 map
.insert("trk", &twonav
);
79 map
.insert("rte", &twonav
);
80 map
.insert("wpt", &twonav
);
85 QMultiMap
<QString
, Parser
*> Data::_parsers
= parsers();
87 void Data::processData(QList
<TrackData
> &trackData
, QList
<RouteData
> &routeData
)
89 for (int i
= 0; i
< trackData
.count(); i
++)
90 _tracks
.append(Track(trackData
.at(i
)));
91 for (int i
= 0; i
< routeData
.count(); i
++)
92 _routes
.append(Route(routeData
.at(i
)));
95 Data::Data(const QString
&fileName
, bool tryUnknown
)
98 QFileInfo
fi(Util::displayName(fileName
));
99 QList
<TrackData
> trackData
;
100 QList
<RouteData
> routeData
;
105 if (!file
.open(QFile::ReadOnly
)) {
106 _errorString
= qPrintable(file
.errorString());
110 QMultiMap
<QString
, Parser
*>::iterator it
;
111 QString
suffix(fi
.suffix().toLower());
112 if ((it
= _parsers
.find(suffix
)) != _parsers
.end()) {
113 while (it
!= _parsers
.end() && it
.key() == suffix
) {
114 if (it
.value()->parse(&file
, trackData
, routeData
, _polygons
,
116 processData(trackData
, routeData
);
120 _errorLine
= it
.value()->errorLine();
121 _errorString
= it
.value()->errorString();
127 qWarning("%s:", qPrintable(fileName
));
128 for (it
= _parsers
.find(suffix
); it
!= _parsers
.end()
129 && it
.key() == suffix
; it
++)
130 qWarning(" %s: line %d: %s", qPrintable(it
.key()),
131 it
.value()->errorLine(), qPrintable(it
.value()->errorString()));
133 } else if (tryUnknown
) {
134 for (it
= _parsers
.begin(); it
!= _parsers
.end(); it
++) {
135 if (it
.value()->parse(&file
, trackData
, routeData
, _polygons
,
137 processData(trackData
, routeData
);
144 qWarning("%s:", qPrintable(fileName
));
145 for (it
= _parsers
.begin(); it
!= _parsers
.end(); it
++)
146 qWarning(" %s: line %d: %s", qPrintable(it
.key()),
147 it
.value()->errorLine(), qPrintable(it
.value()->errorString()));
150 _errorString
= "Unknown format";
154 QString
Data::formats()
157 qApp
->translate("Data", "Supported files") + " (" + filter().join(" ") + ");;"
158 + qApp
->translate("Data", "CSV files") + " (*.csv);;"
159 + qApp
->translate("Data", "CUP files") + " (*.cup);;"
160 + qApp
->translate("Data", "FIT files") + " (*.fit);;"
161 + qApp
->translate("Data", "GeoJSON files") + " (*.geojson *.json);;"
162 + qApp
->translate("Data", "GPI files") + " (*.gpi);;"
163 + qApp
->translate("Data", "GPX files") + " (*.gpx);;"
164 + qApp
->translate("Data", "IGC files") + " (*.igc);;"
165 + qApp
->translate("Data", "ITN files") + " (*.itn);;"
166 + qApp
->translate("Data", "JPEG images") + " (*.jpg *.jpeg);;"
167 + qApp
->translate("Data", "KML files") + " (*.kml *.kmz);;"
168 + qApp
->translate("Data", "LOC files") + " (*.loc);;"
169 + qApp
->translate("Data", "NMEA files") + " (*.nmea);;"
170 + qApp
->translate("Data", "ONmove files") + " (*.omd *.ghp);;"
171 + qApp
->translate("Data", "OV2 files") + " (*.ov2);;"
172 + qApp
->translate("Data", "OziExplorer files") + " (*.plt *.rte *.wpt);;"
173 + qApp
->translate("Data", "SLF files") + " (*.slf);;"
174 + qApp
->translate("Data", "SML files") + " (*.sml);;"
175 + qApp
->translate("Data", "TCX files") + " (*.tcx);;"
176 + qApp
->translate("Data", "TwoNav files") + " (*.rte *.trk *.wpt);;"
177 + qApp
->translate("Data", "All files") + " (*)";
180 QStringList
Data::filter()
185 for (QMultiMap
<QString
, Parser
*>::iterator it
= _parsers
.begin();
186 it
!= _parsers
.end(); it
++) {
187 if (it
.key() != last
)
188 filter
<< "*." + it
.key();