diff --git a/gpxsee.pro b/gpxsee.pro index 42819309..cad64309 100644 --- a/gpxsee.pro +++ b/gpxsee.pro @@ -279,6 +279,7 @@ SOURCES += src/main.cpp \ src/GUI/gearratiographitem.cpp \ src/GUI/mapview.cpp \ src/GUI/areaitem.cpp \ + src/data/address.cpp \ src/data/itnparser.cpp \ src/data/ov2parser.cpp \ src/data/waypoint.cpp \ diff --git a/src/GUI/waypointitem.cpp b/src/GUI/waypointitem.cpp index fd05793e..d0669a48 100644 --- a/src/GUI/waypointitem.cpp +++ b/src/GUI/waypointitem.cpp @@ -45,19 +45,14 @@ QString WaypointItem::info() const && _waypoint.comment() != _waypoint.description()) tt.insert(qApp->translate("WaypointItem", "Comment"), _waypoint.comment()); - if (_waypoint.address().isValid()) { - QString addr("
"); - addr += _waypoint.address().street(); - addr += "
" + _waypoint.address().city(); - if (!_waypoint.address().postalCode().isEmpty()) - addr += "
" + _waypoint.address().postalCode(); - if (!_waypoint.address().state().isEmpty()) - addr += "
" + _waypoint.address().state(); - if (!_waypoint.address().country().isEmpty()) - addr += "
" + _waypoint.address().country(); - addr += "
"; + if (!_waypoint.address().isEmpty()) { + QString addr(_waypoint.address()); + addr.replace('\n', "
"); + addr = "
" + addr + "
"; tt.insert(qApp->translate("WaypointItem", "Address"), addr); } + if (!_waypoint.phone().isEmpty()) + tt.insert(qApp->translate("WaypointItem", "Phone"), _waypoint.phone()); if (!_waypoint.links().isEmpty()) { QString links; for (int i = 0; i < _waypoint.links().size(); i++) { diff --git a/src/data/address.cpp b/src/data/address.cpp new file mode 100644 index 00000000..e0f00d90 --- /dev/null +++ b/src/data/address.cpp @@ -0,0 +1,19 @@ +#include "address.h" + +QString Address::address() const +{ + QString addr(_street); + + if (addr.isEmpty()) + addr = _city; + else + addr += "\n" + _city; + if (!_postalCode.isEmpty()) + addr += "\n" + _postalCode; + if (!_state.isEmpty()) + addr += "\n" + _state; + if (!_country.isEmpty()) + addr += "\n" + _country; + + return addr; +} diff --git a/src/data/address.h b/src/data/address.h index b10e9304..f4dfac09 100644 --- a/src/data/address.h +++ b/src/data/address.h @@ -10,11 +10,7 @@ public: Address(const QString &street, const QString &city) : _street(street), _city(city) {} - const QString &street() const {return _street;} - const QString &city() const {return _city;} - const QString &state() const {return _state;} - const QString &country() const {return _country;} - const QString &postalCode() const {return _postalCode;} + QString address() const; void setStreet(const QString &street) {_street = street;} void setCity(const QString &city) {_city = city;} @@ -22,7 +18,7 @@ public: void setCountry(const QString &country) {_country = country;} void setPostalCode(const QString &postalCode) {_postalCode = postalCode;} - bool isValid() const {return !(_street.isEmpty() || _city.isEmpty());} + bool isValid() const {return !_city.isEmpty();} private: QString _street; diff --git a/src/data/gpiparser.cpp b/src/data/gpiparser.cpp index 385c9da4..7442ab88 100644 --- a/src/data/gpiparser.cpp +++ b/src/data/gpiparser.cpp @@ -10,6 +10,7 @@ #include #include "common/garmin.h" #include "common/textcodec.h" +#include "address.h" #include "gpiparser.h" @@ -324,15 +325,19 @@ static quint32 readContact(DataStream &stream, Waypoint &waypoint) rs = stream.readRecordHeader(rh); stream >> flags; - if (flags & 0x1) // phone + if (flags & 0x1) { ds += stream.readString(str); + waypoint.setPhone(str); + } if (flags & 0x2) // phone2 ds += stream.readString(str); if (flags & 0x4) // fax ds += stream.readString(str); - if (flags & 0x8) // mail + if (flags & 0x8) { ds += stream.readString(str); - if (flags & 0x10) { // web + waypoint.addLink(Link("mailto:" + str, str)); + } + if (flags & 0x10) { ds += stream.readString(str); QUrl url(str); waypoint.addLink(Link(url.scheme().isEmpty() @@ -387,7 +392,8 @@ static quint32 readAddress(DataStream &stream, Waypoint &waypoint) if (flags & 0x20) // unknown ds += stream.readString(str); - waypoint.setAddress(addr); + if (addr.isValid()) + waypoint.setAddress(addr.address()); if (ds != rh.size) stream.setStatus(QDataStream::ReadCorruptData); diff --git a/src/data/gpxparser.cpp b/src/data/gpxparser.cpp index 30a9c645..3187f604 100644 --- a/src/data/gpxparser.cpp +++ b/src/data/gpxparser.cpp @@ -1,3 +1,4 @@ +#include "address.h" #include "gpxparser.h" @@ -103,7 +104,8 @@ void GPXParser::address(Waypoint &waypoint) _reader.skipCurrentElement(); } - waypoint.setAddress(addr); + if (addr.isValid()) + waypoint.setAddress(addr.address()); } void GPXParser::wpExtension(Waypoint &waypoint) @@ -111,6 +113,8 @@ void GPXParser::wpExtension(Waypoint &waypoint) while (_reader.readNextStartElement()) { if (_reader.name() == QLatin1String("Address")) address(waypoint); + else if (_reader.name() == QLatin1String("PhoneNumber")) + waypoint.setPhone(_reader.readElementText()); else _reader.skipCurrentElement(); } diff --git a/src/data/kmlparser.cpp b/src/data/kmlparser.cpp index 66cc4139..cbc2dc52 100644 --- a/src/data/kmlparser.cpp +++ b/src/data/kmlparser.cpp @@ -492,7 +492,7 @@ void KMLParser::multiGeometry(QList &tracks, QList &areas, void KMLParser::placemark(QList &tracks, QList &areas, QVector &waypoints) { - QString name, desc; + QString name, desc, phone, address; QDateTime timestamp; while (_reader.readNextStartElement()) { @@ -500,6 +500,10 @@ void KMLParser::placemark(QList &tracks, QList &areas, name = _reader.readElementText(); else if (_reader.name() == QLatin1String("description")) desc = _reader.readElementText(); + else if (_reader.name() == QLatin1String("phoneNumber")) + phone = _reader.readElementText(); + else if (_reader.name() == QLatin1String("address")) + address = _reader.readElementText(); else if (_reader.name() == QLatin1String("TimeStamp")) timestamp = timeStamp(); else if (_reader.name() == QLatin1String("MultiGeometry")) @@ -510,6 +514,8 @@ void KMLParser::placemark(QList &tracks, QList &areas, w.setName(name); w.setDescription(desc); w.setTimestamp(timestamp); + w.setAddress(address); + w.setPhone(phone); point(w); } else if (_reader.name() == QLatin1String("LineString") || _reader.name() == QLatin1String("LinearRing")) { diff --git a/src/data/ov2parser.cpp b/src/data/ov2parser.cpp index 0ad57ff7..f106a5bd 100644 --- a/src/data/ov2parser.cpp +++ b/src/data/ov2parser.cpp @@ -53,7 +53,12 @@ bool OV2Parser::parse(QFile *file, QList &tracks, } Waypoint wp(Coordinates(lon/1e5, lat/1e5)); QList parts(ba.split('\0')); - wp.setName(codec.toString(parts.first())); + int pp = parts.first().indexOf('>'); + if (pp >= 0) { + wp.setName(codec.toString(parts.first().left(pp))); + wp.setPhone(parts.first().mid(pp+1)); + } else + wp.setName(codec.toString(parts.first())); waypoints.append(wp);} break; default: diff --git a/src/data/waypoint.h b/src/data/waypoint.h index 40420c7f..cc89fd5b 100644 --- a/src/data/waypoint.h +++ b/src/data/waypoint.h @@ -10,7 +10,6 @@ #include "common/coordinates.h" #include "imageinfo.h" #include "link.h" -#include "address.h" class Waypoint { @@ -24,7 +23,8 @@ public: const QString &name() const {return _name;} const QString &description() const {return _description;} const QString &comment() const {return _comment;} - const Address &address() const {return _address;} + const QString &address() const {return _address;} + const QString &phone() const {return _phone;} const QVector &images() const {return _images;} const QVector &links() const {return _links;} const QDateTime ×tamp() const {return _timestamp;} @@ -38,7 +38,8 @@ public: void setDescription(const QString &description) {_description = description;} void setComment(const QString &comment) {_comment = comment;} - void setAddress(const Address &address) {_address = address;} + void setAddress(const QString &address) {_address = address;} + void setPhone(const QString &phone) {_phone = phone;} void setTimestamp(const QDateTime ×tamp) {_timestamp = timestamp;} void setElevation(qreal elevation) {_elevation = elevation;} void addImage(const ImageInfo &image) {_images.append(image);} @@ -59,7 +60,8 @@ private: QString _name; QString _description; QString _comment; - Address _address; + QString _address; + QString _phone; QVector _images; QVector _links; QDateTime _timestamp;