Marble

DgmlDownloadUrlTagHandler.cpp
1 /*
2  SPDX-FileCopyrightText: 2008 Jens-Michael Hoffmann <[email protected]>
3 
4  SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 // Own
8 #include "DgmlDownloadUrlTagHandler.h"
9 
10 // Qt
11 #include <QUrl>
12 #include <QUrlQuery>
13 
14 // Marble
15 #include "DgmlAttributeDictionary.h"
16 #include "DgmlElementDictionary.h"
17 #include "GeoParser.h"
18 #include "GeoSceneTileDataset.h"
19 
20 namespace Marble
21 {
22 namespace dgml
23 {
24 DGML_DEFINE_TAG_HANDLER(DownloadUrl)
25 
26 GeoNode* DgmlDownloadUrlTagHandler::parse( GeoParser& parser ) const
27 {
28  // Check whether the tag is valid
29  Q_ASSERT(parser.isStartElement() && parser.isValidElement(QLatin1String(dgmlTag_DownloadUrl)));
30 
31  // Checking for parent item
32  GeoStackItem parentItem = parser.parentElement();
33  if ( !parentItem.represents( dgmlTag_Texture ) && !parentItem.represents( dgmlTag_Vectortile ) )
34  return nullptr;
35 
36  QUrl url;
37 
38  // Attribute protocol, optional?
39  QString protocolStr = parser.attribute( dgmlAttr_protocol ).trimmed();
40  if ( !protocolStr.isEmpty() )
41  url.setScheme( protocolStr );
42 
43  // Attribute user, optional
44  const QString userStr = parser.attribute( dgmlAttr_user ).trimmed();
45  if ( !userStr.isEmpty() )
46  url.setUserName( userStr );
47 
48  // Attribute password, optional
49  const QString passwordStr = parser.attribute( dgmlAttr_password ).trimmed();
50  if ( !passwordStr.isEmpty() )
51  url.setPassword( passwordStr );
52 
53  // Attribute host, mandatory
54  const QString hostStr = parser.attribute( dgmlAttr_host ).trimmed();
55  if ( !hostStr.isEmpty() )
56  url.setHost( hostStr );
57 
58  // Attribute port, optional
59  const QString portStr = parser.attribute( dgmlAttr_port ).trimmed();
60  if ( !portStr.isEmpty() )
61  url.setPort( portStr.toInt() );
62 
63  // Attribute path, mandatory
64  const QString pathStr = parser.attribute( dgmlAttr_path ).trimmed();
65  if ( !pathStr.isEmpty() )
66  url.setPath( pathStr );
67 
68  // Attribute query, optional
69  const QString queryStr = parser.attribute( dgmlAttr_query ).trimmed();
70  if ( !queryStr.isEmpty() ) {
72  query.setQuery( queryStr.toLatin1() );
73  url.setQuery(query);
74  }
75 
76  parentItem.nodeAs<GeoSceneTileDataset>()->addDownloadUrl( url );
77  return nullptr;
78 }
79 
80 }
81 }
QString trimmed() const const
void setHost(const QString &host, QUrl::ParsingMode mode)
QByteArray toLatin1() const const
void setScheme(const QString &scheme)
KSERVICE_EXPORT KService::List query(FilterFunc filterFunc)
bool isEmpty() const const
void setPort(int port)
int toInt(bool *ok, int base) const const
Binds a QML item to a specific geodetic location in screen coordinates.
void setQuery(const QString &query, QUrl::ParsingMode mode)
void setPassword(const QString &password, QUrl::ParsingMode mode)
void setPath(const QString &path, QUrl::ParsingMode mode)
void setUserName(const QString &userName, QUrl::ParsingMode mode)
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Sep 25 2023 03:50:18 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.