File indexing completed on 2024-05-12 03:51:44

0001 /*
0002     SPDX-FileCopyrightText: 2007 Nikolas Zimmermann <zimmermann@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "GPXgpxTagHandler.h"
0008 
0009 #include "MarbleDebug.h"
0010 
0011 #include "GPXElementDictionary.h"
0012 #include "GeoDataParser.h"
0013 
0014 #include "GeoDataDocument.h"
0015 #include "GeoDataStyle.h"
0016 #include "GeoDataIconStyle.h"
0017 #include "GeoDataLabelStyle.h"
0018 #include "GeoDataLineStyle.h"
0019 #include "GeoDataStyleMap.h"
0020 #include "GeoDataHotSpot.h"
0021 #include "MarbleColors.h"
0022 #include "MarbleDirs.h"
0023 #include "MarbleGlobal.h"
0024 
0025 namespace Marble
0026 {
0027 namespace gpx
0028 {
0029 GPX_DEFINE_TAG_HANDLER(gpx)
0030 
0031 GeoNode* GPXgpxTagHandler::parse(GeoParser& parser) const
0032 {
0033     GeoDataDocument* doc = geoDataDoc( parser );
0034 
0035     GeoDataStyle::Ptr style(new GeoDataStyle);
0036     GeoDataLineStyle lineStyle;
0037     QColor transparentRed = Oxygen::brickRed6;
0038     transparentRed.setAlpha( 200 );
0039     lineStyle.setColor( transparentRed );
0040     lineStyle.setWidth( 4 );
0041     style->setLineStyle(lineStyle);
0042     style->setId(QStringLiteral("track"));
0043 
0044     GeoDataStyleMap styleMap;
0045     styleMap.setId(QStringLiteral("map-track"));
0046     styleMap.insert(QStringLiteral("normal"), QLatin1Char('#') + style->id());
0047     doc->addStyleMap(styleMap);
0048     doc->addStyle(style);
0049 
0050     // create a style for routes
0051     GeoDataStyle::Ptr routestyle(new GeoDataStyle);
0052     GeoDataLineStyle routeLineStyle;
0053     QColor skyBlue = Oxygen::skyBlue6;
0054     skyBlue.setAlpha( 200 );
0055     routeLineStyle.setColor( skyBlue );
0056     routeLineStyle.setWidth( 5 );
0057     routestyle->setLineStyle(routeLineStyle);
0058     routestyle->setId(QStringLiteral("route"));
0059 
0060     GeoDataStyleMap routeStyleMap;
0061     routeStyleMap.setId(QStringLiteral("map-route"));
0062     routeStyleMap.insert(QStringLiteral("normal"), QLatin1Char('#') + routestyle->id());
0063     doc->addStyleMap(routeStyleMap);
0064     doc->addStyle(routestyle);
0065 
0066     // create a default style for waypoint icons
0067     GeoDataStyle::Ptr waypointStyle(new GeoDataStyle);
0068     waypointStyle->setId(QStringLiteral("waypoint"));
0069     GeoDataIconStyle iconStyle;
0070     iconStyle.setIconPath(MarbleDirs::path(QStringLiteral("bitmaps/flag.png")));
0071     iconStyle.setHotSpot(QPointF(0.12,0.03), GeoDataHotSpot::Fraction, GeoDataHotSpot::Fraction);
0072     waypointStyle->setIconStyle(iconStyle);
0073 
0074     GeoDataLabelStyle waypointLabelStyle;
0075     waypointLabelStyle.setAlignment(GeoDataLabelStyle::Corner);
0076     waypointStyle->setLabelStyle(waypointLabelStyle);
0077 
0078     GeoDataStyleMap waypointStyleMap;
0079     waypointStyleMap.setId(QStringLiteral("map-waypoint"));
0080     waypointStyleMap.insert(QStringLiteral("normal"), QLatin1Char('#') + waypointStyle->id());
0081     doc->addStyleMap(waypointStyleMap);
0082     doc->addStyle(waypointStyle);
0083 
0084     return doc;
0085 }
0086 
0087 }
0088 }