File indexing completed on 2024-05-19 03:53:08

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2009 Anders Lund <anders@alweb.dk>
0004 //
0005 
0006 #include "GPXurlTagHandler.h"
0007 
0008 #include "MarbleDebug.h"
0009 
0010 #include "GPXElementDictionary.h"
0011 #include "GeoParser.h"
0012 #include "GeoDataPlacemark.h"
0013 #include "GeoDataData.h"
0014 #include "GeoDataExtendedData.h"
0015 
0016 namespace Marble
0017 {
0018 namespace gpx
0019 {
0020 GPX_DEFINE_TAG_HANDLER_10(url)
0021 
0022 // Gpx 1.0 url element provides a link related to a waypoint, and is
0023 // inserted into the waypoint description as this seems to be the
0024 // simplest means to make it available to the user.
0025 // In addition, url properties are saved to extendedData.
0026 // The insertion is done in the urlname element, which is the link text.
0027 GeoNode* GPXurlTagHandler::parse(GeoParser& parser) const
0028 {
0029     Q_ASSERT(parser.isStartElement() && parser.isValidElement(QLatin1String(gpxTag_url)));
0030 
0031     GeoStackItem parentItem = parser.parentElement();
0032     if (parentItem.represents(gpxTag_wpt))
0033     {
0034         GeoDataPlacemark* placemark = parentItem.nodeAs<GeoDataPlacemark>();
0035 
0036         QString url = parser.readElementText().trimmed();
0037 
0038         GeoDataExtendedData extendedData = placemark->extendedData();
0039         extendedData.addValue(GeoDataData(QStringLiteral("url"), url));
0040         placemark->setExtendedData(extendedData);
0041     }
0042 
0043     return nullptr;
0044 }
0045 
0046 } // namespace gpx
0047 
0048 } // namespace Marble