From b8102d6bb77daa18aae5c0a825a87ebc914f5847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Tue, 9 Jan 2018 23:19:35 +0100 Subject: [PATCH] Do a propper cleanup on error --- src/map/datum.cpp | 22 ++++++++++++++-------- src/map/datum.h | 1 + src/map/ellipsoid.cpp | 16 +++++++++++----- src/map/ellipsoid.h | 2 ++ src/map/pcs.cpp | 16 +++++++++++----- src/map/pcs.h | 2 ++ 6 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/map/datum.cpp b/src/map/datum.cpp index c5a08c91..cd54582b 100644 --- a/src/map/datum.cpp +++ b/src/map/datum.cpp @@ -103,13 +103,19 @@ Datum::Datum(const QString &name) *this = Datum(); } +void Datum::error(const QString &str) +{ + _errorString = str; + _datums = WGS84(); +} + bool Datum::loadList(const QString &path) { QFile file(path); bool res; if (!file.open(QFile::ReadOnly)) { - _errorString = qPrintable(file.errorString()); + error(file.errorString()); return false; } @@ -120,7 +126,7 @@ bool Datum::loadList(const QString &path) QByteArray line = file.readLine(); QList list = line.split(','); if (list.size() != 6) { - _errorString = "Format error"; + error("Format error"); return false; } @@ -129,34 +135,34 @@ bool Datum::loadList(const QString &path) if (!f1.isEmpty()) { id = f1.toInt(&res); if (!res) { - _errorString = "Invalid datum id"; + error("Invalid datum id"); return false; } } int eid = list[2].trimmed().toInt(&res); if (!res) { - _errorString = "Invalid ellipsoid id"; + error("Invalid ellipsoid id"); return false; } double dx = list[3].trimmed().toDouble(&res); if (!res) { - _errorString = "Invalid dx"; + error("Invalid dx"); return false; } double dy = list[4].trimmed().toDouble(&res); if (!res) { - _errorString = "Invalid dy"; + error("Invalid dy"); return false; } double dz = list[5].trimmed().toDouble(&res); if (!res) { - _errorString = "Invalid dz"; + error("Invalid dz"); return false; } Ellipsoid e(eid); if (e.isNull()) { - _errorString = "Unknown ellipsoid ID"; + error("Unknown ellipsoid ID"); return false; } diff --git a/src/map/datum.h b/src/map/datum.h index 08a494e5..646674d8 100644 --- a/src/map/datum.h +++ b/src/map/datum.h @@ -36,6 +36,7 @@ private: class Entry; static QList WGS84(); + static void error(const QString &str); Ellipsoid _ellipsoid; double _dx, _dy, _dz; diff --git a/src/map/ellipsoid.cpp b/src/map/ellipsoid.cpp index 5ff094a9..d816ea43 100644 --- a/src/map/ellipsoid.cpp +++ b/src/map/ellipsoid.cpp @@ -16,6 +16,12 @@ Ellipsoid::Ellipsoid(int id) *this = it.value(); } +void Ellipsoid::error(const QString &str) +{ + _errorString = str; + _ellipsoids.clear(); +} + bool Ellipsoid::loadList(const QString &path) { QFile file(path); @@ -23,7 +29,7 @@ bool Ellipsoid::loadList(const QString &path) if (!file.open(QFile::ReadOnly)) { - _errorString = qPrintable(file.errorString()); + error(file.errorString()); return false; } @@ -34,23 +40,23 @@ bool Ellipsoid::loadList(const QString &path) QByteArray line = file.readLine(); QList list = line.split(','); if (list.size() != 4) { - _errorString = "Format error"; + error("Format error"); return false; } int id = list[1].trimmed().toInt(&res); if (!res) { - _errorString = "Invalid ellipsoid id"; + error("Invalid ellipsoid id"); return false; } double radius = list[2].trimmed().toDouble(&res); if (!res) { - _errorString = "Invalid ellipsoid radius"; + error("Invalid ellipsoid radius"); return false; } double flattening = list[3].trimmed().toDouble(&res); if (!res) { - _errorString = "Invalid ellipsoid flattening"; + error("Invalid ellipsoid flattening"); return false; } diff --git a/src/map/ellipsoid.h b/src/map/ellipsoid.h index 6db94f68..a630f014 100644 --- a/src/map/ellipsoid.h +++ b/src/map/ellipsoid.h @@ -25,6 +25,8 @@ public: static int errorLine() {return _errorLine;} private: + static void error(const QString &str); + double _radius; double _flattening; diff --git a/src/map/pcs.cpp b/src/map/pcs.cpp index a1bc5909..3a8f8801 100644 --- a/src/map/pcs.cpp +++ b/src/map/pcs.cpp @@ -58,6 +58,12 @@ PCS::PCS(int gcs, int proj) *this = PCS(); } +void PCS::error(const QString &str) +{ + _errorString = str; + _pcss.clear(); +} + bool PCS::loadList(const QString &path) { QFile file(path); @@ -66,7 +72,7 @@ bool PCS::loadList(const QString &path) if (!file.open(QFile::ReadOnly)) { - _errorString = qPrintable(file.errorString()); + error(file.errorString()); return false; } @@ -77,7 +83,7 @@ bool PCS::loadList(const QString &path) QByteArray line = file.readLine(); QList list = line.split(','); if (list.size() != 12) { - _errorString = "Format error"; + error("Format error"); return false; } @@ -94,19 +100,19 @@ bool PCS::loadList(const QString &path) for (int i = 1; i < 12; i++) { if (!res[i]) { - _errorString = "Parse error"; + error("Parse error"); return false; } } Datum datum(gcs); if (datum.isNull()) { - _errorString = "Unknown datum"; + error("Unknown datum"); return false; } Projection::Method method(transform); if (method.isNull()) { - _errorString = "Unknown coordinates transformation method"; + error("Unknown coordinates transformation method"); return false; } diff --git a/src/map/pcs.h b/src/map/pcs.h index ea448603..1c7b0fed 100644 --- a/src/map/pcs.h +++ b/src/map/pcs.h @@ -32,6 +32,8 @@ public: private: class Entry; + static void error(const QString &str); + Datum _datum; Projection::Method _method; Projection::Setup _setup;