File indexing completed on 2024-06-02 03:51:00

0001 /*
0002     SPDX-FileCopyrightText: 2008 Patrick Spendrin <ps_ml@gmx.de>
0003     SPDX-FileCopyrightText: 2009 Bastian Holst <bastianholst@gmx.de>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "KmlAltitudeModeTagHandler.h"
0009 
0010 #include "MarbleDebug.h"
0011 
0012 #include "KmlElementDictionary.h"
0013 
0014 #include "GeoDataGeometry.h"
0015 #include "GeoDataLatLonAltBox.h"
0016 #include "GeoDataGroundOverlay.h"
0017 #include "GeoDataPoint.h"
0018 #include "GeoDataPlacemark.h"
0019 #include "GeoDataTrack.h"
0020 #include "GeoDataAbstractView.h"
0021 #include "GeoDataModel.h"
0022 
0023 #include "GeoParser.h"
0024 
0025 namespace Marble
0026 {
0027 namespace kml
0028 {
0029 KML_DEFINE_TAG_HANDLER( altitudeMode )
0030 
0031 GeoNode* KmlaltitudeModeTagHandler::parse( GeoParser& parser ) const
0032 {
0033     Q_ASSERT(parser.isStartElement() && parser.isValidElement(QLatin1String(kmlTag_altitudeMode)));
0034 
0035     QString content = parser.readElementText().trimmed();
0036 
0037     AltitudeMode mode;
0038     if (content == QLatin1String("relativeToGround")) {
0039         mode = RelativeToGround;
0040     } else if (content == QLatin1String("absolute")) {
0041         mode = Absolute;
0042     } else { // clampToGround is Standard
0043         mode = ClampToGround;
0044     }
0045 
0046     GeoStackItem parentItem = parser.parentElement();
0047 
0048     if ( parentItem.is<GeoDataPlacemark>() ) {
0049          parentItem.nodeAs<GeoDataPlacemark>()->geometry()->setAltitudeMode( mode );
0050     } else if ( parentItem.is<GeoDataPoint>() ) {
0051         parentItem.nodeAs<GeoDataPoint>()->setAltitudeMode( mode );
0052     } else if ( parentItem.is<GeoDataLatLonAltBox>() ) {
0053         parentItem.nodeAs<GeoDataLatLonAltBox>()->setAltitudeMode( mode );
0054     } else if ( parentItem.is<GeoDataTrack>() ) {
0055         parentItem.nodeAs<GeoDataTrack>()->setAltitudeMode( mode );
0056     } else if ( parentItem.is<GeoDataGroundOverlay>() ) {
0057         parentItem.nodeAs<GeoDataGroundOverlay>()->setAltitudeMode( mode );
0058     } else if ( parentItem.is<GeoDataAbstractView>() ) {
0059         parentItem.nodeAs<GeoDataAbstractView>()->setAltitudeMode( mode );
0060     } else if ( parentItem.is<GeoDataModel>() ) {
0061         parentItem.nodeAs<GeoDataModel>()->setAltitudeMode( mode );
0062     }
0063 
0064     return nullptr;
0065 }
0066 
0067 }
0068 }