1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-24 03:35:53 +01:00

Do not make unnecessary checks when loading IMG maps and TrekBuddy atlases

This commit is contained in:
Martin Tůma 2022-06-09 00:38:25 +02:00
parent ca0089e486
commit e7d6c3f76a
7 changed files with 36 additions and 37 deletions

View File

@ -149,18 +149,3 @@ GMAPData::~GMAPData()
{ {
qDeleteAll(_files); qDeleteAll(_files);
} }
bool GMAPData::isGMAP(const QString &path)
{
QFile file(path);
if (!file.open(QFile::ReadOnly | QFile::Text))
return false;
QXmlStreamReader reader(&file);
if (reader.readNextStartElement()
&& reader.name() == QLatin1String("MapProduct"))
return true;
return false;
}

View File

@ -14,8 +14,6 @@ public:
GMAPData(const QString &fileName); GMAPData(const QString &fileName);
~GMAPData(); ~GMAPData();
static bool isGMAP(const QString &path);
private: private:
bool readXML(const QString &path, QString &dataDir, QString &typFile, bool readXML(const QString &path, QString &dataDir, QString &typFile,
QString &baseMap); QString &baseMap);

View File

@ -77,25 +77,23 @@ void Atlas::computeBounds()
QRectF(offsets.at(i), _maps.at(i)->bounds().size())); QRectF(offsets.at(i), _maps.at(i)->bounds().size()));
} }
Atlas::Atlas(const QString &fileName, QObject *parent) Atlas::Atlas(const QString &fileName, bool TAR, QObject *parent)
: Map(fileName, parent), _zoom(0), _mapIndex(-1), _valid(false) : Map(fileName, parent), _zoom(0), _mapIndex(-1), _valid(false)
{ {
QFileInfo fi(fileName); QFileInfo fi(fileName);
QByteArray ba; QByteArray ba;
QString suffix = fi.suffix().toLower();
Tar tar(fileName); Tar tar(fileName);
_name = fi.dir().dirName(); _name = fi.dir().dirName();
if (suffix == "tar") { if (TAR) {
if (!tar.open()) { if (!tar.open()) {
_errorString = "Error reading tar file"; _errorString = "Error reading tar file";
return; return;
} }
QString tbaFileName = fi.completeBaseName() + ".tba"; QString tbaFileName = fi.completeBaseName() + ".tba";
ba = tar.file(tbaFileName); ba = tar.file(tbaFileName);
} else if (suffix == "tba") { } else {
QFile tbaFile(fileName); QFile tbaFile(fileName);
if (!tbaFile.open(QIODevice::ReadOnly)) { if (!tbaFile.open(QIODevice::ReadOnly)) {
_errorString = QString("Error opening tba file: %1") _errorString = QString("Error opening tba file: %1")
@ -293,10 +291,18 @@ void Atlas::unload()
_maps.at(i)->unload(); _maps.at(i)->unload();
} }
Map *Atlas::create(const QString &path, const Projection &, bool *isDir) Map *Atlas::createTAR(const QString &path, const Projection &, bool *isDir)
{ {
if (isDir) if (isDir)
*isDir = true; *isDir = true;
return new Atlas(path); return new Atlas(path, true);
}
Map *Atlas::createTBA(const QString &path, const Projection &, bool *isDir)
{
if (isDir)
*isDir = true;
return new Atlas(path, false);
} }

View File

@ -11,7 +11,7 @@ class Atlas : public Map
Q_OBJECT Q_OBJECT
public: public:
Atlas(const QString &fileName, QObject *parent = 0); Atlas(const QString &fileName, bool TAR, QObject *parent = 0);
QString name() const {return _name;} QString name() const {return _name;}
@ -34,7 +34,8 @@ public:
bool isValid() const {return _valid;} bool isValid() const {return _valid;}
QString errorString() const {return _errorString;} QString errorString() const {return _errorString;}
static Map *create(const QString &path, const Projection &, bool *isDir); static Map *createTAR(const QString &path, const Projection &, bool *isDir);
static Map *createTBA(const QString &path, const Projection &, bool *isDir);
private: private:
struct Zoom { struct Zoom {

View File

@ -40,11 +40,11 @@ static QList<MapData*> overlays(const QString &fileName)
return list; return list;
} }
IMGMap::IMGMap(const QString &fileName, QObject *parent) IMGMap::IMGMap(const QString &fileName, bool GMAP, QObject *parent)
: Map(fileName, parent), _projection(PCS::pcs(3857)), _tileRatio(1.0), : Map(fileName, parent), _projection(PCS::pcs(3857)), _tileRatio(1.0),
_valid(false) _valid(false)
{ {
if (GMAPData::isGMAP(fileName)) if (GMAP)
_data.append(new GMAPData(fileName)); _data.append(new GMAPData(fileName));
else { else {
_data.append(new IMGData(fileName)); _data.append(new IMGData(fileName));
@ -291,10 +291,18 @@ void IMGMap::setOutputProjection(const Projection &projection)
QPixmapCache::clear(); QPixmapCache::clear();
} }
Map* IMGMap::create(const QString &path, const Projection &, bool *isDir) Map* IMGMap::createIMG(const QString &path, const Projection &, bool *isDir)
{ {
if (isDir) if (isDir)
*isDir = GMAPData::isGMAP(path); *isDir = false;
return new IMGMap(path); return new IMGMap(path, false);
}
Map* IMGMap::createGMAP(const QString &path, const Projection &, bool *isDir)
{
if (isDir)
*isDir = true;
return new IMGMap(path, true);
} }

View File

@ -49,7 +49,7 @@ class IMGMap : public Map
Q_OBJECT Q_OBJECT
public: public:
IMGMap(const QString &fileName, QObject *parent = 0); IMGMap(const QString &fileName, bool GMAP, QObject *parent = 0);
~IMGMap() {qDeleteAll(_data);} ~IMGMap() {qDeleteAll(_data);}
QString name() const {return _data.first()->name();} QString name() const {return _data.first()->name();}
@ -79,7 +79,8 @@ public:
bool isValid() const {return _valid;} bool isValid() const {return _valid;}
QString errorString() const {return _errorString;} QString errorString() const {return _errorString;}
static Map* create(const QString &path, const Projection &, bool *isDir); static Map* createIMG(const QString &path, const Projection &, bool *isDir);
static Map* createGMAP(const QString &path, const Projection &, bool *isDir);
private slots: private slots:
void jobFinished(IMGMapJob *job); void jobFinished(IMGMapJob *job);

View File

@ -24,12 +24,12 @@ MapList::ParserMap MapList::parsers()
{ {
MapList::ParserMap map; MapList::ParserMap map;
map.insert("tar", &Atlas::create); map.insert("tar", &Atlas::createTAR);
map.insert("tar", &OziMap::create); map.insert("tar", &OziMap::create);
map.insert("tba", &Atlas::create); map.insert("tba", &Atlas::createTBA);
map.insert("xml", &MapSource::create); map.insert("xml", &MapSource::create);
map.insert("xml", &IMGMap::create); map.insert("xml", &IMGMap::createGMAP);
map.insert("img", &IMGMap::create); map.insert("img", &IMGMap::createIMG);
map.insert("jnx", &JNXMap::create); map.insert("jnx", &JNXMap::create);
map.insert("tif", &GeoTIFFMap::create); map.insert("tif", &GeoTIFFMap::create);
map.insert("tiff", &GeoTIFFMap::create); map.insert("tiff", &GeoTIFFMap::create);