Marble

KmlListStyleTagWriter.cpp
1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2012 Mayank Madan <[email protected]>
4 // SPDX-FileCopyrightText: 2013 Dennis Nienhüser <[email protected]>
5 //
6 
7 #include "KmlListStyleTagWriter.h"
8 
9 #include "GeoDataTypes.h"
10 #include "GeoWriter.h"
11 #include "KmlElementDictionary.h"
12 #include "KmlColorStyleTagWriter.h"
13 
14 namespace Marble
15 {
16 
17 static GeoTagWriterRegistrar s_writerListStyle( GeoTagWriter::QualifiedName(GeoDataTypes::GeoDataListStyleType,
18  kml::kmlTag_nameSpaceOgc22),
19  new KmlListStyleTagWriter() );
20 
21 bool KmlListStyleTagWriter::write( const GeoNode *node,
22  GeoWriter& writer ) const
23 {
24  const GeoDataListStyle *listStyle = static_cast<const GeoDataListStyle*>( node );
25  bool const isEmpty = listStyle->listItemType() == GeoDataListStyle::Check &&
26  listStyle->backgroundColor() == QColor( Qt::white ) &&
27  listStyle->itemIconList().isEmpty();
28  if ( isEmpty ) {
29  return true;
30  }
31  writer.writeStartElement( kml::kmlTag_ListStyle );
32 
33  QString const itemType = itemTypeToString( listStyle->listItemType() );
34  writer.writeOptionalElement( kml::kmlTag_listItemType, itemType, "check" );
35  QString const color = KmlColorStyleTagWriter::formatColor( listStyle->backgroundColor() );
36  writer.writeOptionalElement( kml::kmlTag_bgColor, color, "ffffffff" );
37 
38  for( GeoDataItemIcon* icon: listStyle->itemIconList() ) {
39  writer.writeStartElement(kml::kmlTag_ItemIcon);
40  QString const state = iconStateToString( icon->state() );
41  writer.writeOptionalElement( kml::kmlTag_state, state, "open" );
42  writer.writeOptionalElement( kml::kmlTag_href, icon->iconPath() );
43  writer.writeEndElement();
44  }
45 
46  writer.writeEndElement();
47  return true;
48 }
49 
50 QString KmlListStyleTagWriter::itemTypeToString( GeoDataListStyle::ListItemType itemType )
51 {
52  switch ( itemType )
53  {
54  case GeoDataListStyle::CheckOffOnly: return "checkOffOnly";
55  case GeoDataListStyle::CheckHideChildren: return "checkHideChildren";
56  case GeoDataListStyle::RadioFolder: return "radioFolder";
57  default: return "check";
58  }
59 }
60 
61 QString KmlListStyleTagWriter::iconStateToString( GeoDataItemIcon::ItemIconStates state )
62 {
63  QStringList stateList;
64  if ( state & GeoDataItemIcon::Open ) {
65  stateList << "open";
66  }
67  if ( state & GeoDataItemIcon::Closed ) {
68  stateList << "closed";
69  }
70  if ( state & GeoDataItemIcon::Error ) {
71  stateList << "error";
72  }
73  if ( state & GeoDataItemIcon::Fetching0 ) {
74  stateList << "fetching0";
75  }
76  if ( state & GeoDataItemIcon::Fetching1 ) {
77  stateList << "fetching1";
78  }
79  if ( state & GeoDataItemIcon::Fetching2 ) {
80  stateList << "fetching2";
81  }
82 
83  return stateList.join(QLatin1Char(' '));
84 }
85 
86 }
QPair< QString, QString > QualifiedName
Object Name and Namespace Pair This type is intended to be used in a similar way to.
Definition: GeoTagWriter.h:44
Binds a QML item to a specific geodetic location in screen coordinates.
QString join(const QString &separator) const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Thu Sep 21 2023 04:12:27 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.