Marble

RenderState.cpp
1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2014 Dennis Nienhüser <[email protected]>
4 //
5 
6 #include "RenderState.h"
7 
8 #include <QList>
9 
10 namespace Marble {
11 
12 class Q_DECL_HIDDEN RenderState::Private
13 {
14 public:
15  QString m_name;
16  QList<RenderState> m_children;
17  RenderStatus m_status;
18 
19  Private( const QString &name=QString(), RenderStatus status=Complete );
20  RenderStatus status() const;
21  static RenderStatus minimumStatus(RenderStatus a, RenderStatus b);
22  QString toString( const RenderState &state, int indent ) const;
23 };
24 
25 RenderState::RenderState( const QString &name, RenderStatus status ) :
26  d( new Private( name, status ) )
27 {
28  // nothing to do
29 }
30 
31 RenderState::RenderState( const RenderState &other ) :
32  d( new Private )
33 {
34  *d = *other.d;
35 }
36 
37 RenderState &RenderState::operator=( const RenderState &other )
38 {
39  *d = *other.d;
40  return *this;
41 }
42 
43 RenderState::~RenderState()
44 {
45  delete d;
46 }
47 
49 {
50  return d->status();
51 }
52 
53 QString RenderState::name() const
54 {
55  return d->m_name;
56 }
57 
58 int RenderState::children() const
59 {
60  return d->m_children.size();
61 }
62 
63 RenderState RenderState::childAt( int index ) const
64 {
65  return d->m_children.at( index );
66 }
67 
68 void RenderState::addChild(const RenderState &child)
69 {
70  d->m_children.push_back( child );
71 }
72 
73 RenderState::operator QString() const
74 {
75  return d->toString( *this, 0 );
76 }
77 
78 RenderState::Private::Private( const QString &name, RenderStatus status ) :
79  m_name( name ),
80  m_status( status )
81 {
82  // nothing to do
83 }
84 
86 {
88  for( const RenderState &child: m_children ) {
89  status = minimumStatus( status, child.status() );
90  }
91  return minimumStatus( status, m_status );
92 }
93 
94 RenderStatus RenderState::Private::minimumStatus(RenderStatus a, RenderStatus b)
95 {
96  if ( a == Incomplete || b == Incomplete ) {
97  return Incomplete;
98  }
99  if ( a == WaitingForData || b == WaitingForData ) {
100  return WaitingForData;
101  }
102  if ( a == WaitingForUpdate || b == WaitingForUpdate ) {
103  return WaitingForUpdate;
104  }
105 
106  Q_ASSERT( a == Complete || b == Complete );
107  return Complete;
108 }
109 
110 QString RenderState::Private::toString( const RenderState &state, int level ) const
111 {
112  QString const prefix = level > 0 ? "\n" : "";
113  QString const indent(level*2, QLatin1Char(' '));
114  QString status;
115  switch ( state.status() ) {
116  case Marble::Complete: status = "Complete"; break;
117  case Marble::WaitingForUpdate: status = "Waiting for update"; break;
118  case Marble::WaitingForData: status = "Waiting for data"; break;
119  case Marble::Incomplete: status = "Incomplete"; break;
120  }
121  QString const name = ( state.name().isEmpty() ? "Anonymous renderer" : state.name() );
122  QString result = QString("%1%2%3: %4").arg( prefix, indent, name, status );
123 
124  for( const RenderState &child: state.d->m_children ) {
125  result += toString( child, level+1 );
126  }
127  return result;
128 }
129 
130 }
int size() const const
QStringView level(QStringView ifopt)
Q_SCRIPTABLE CaptureState status()
Binds a QML item to a specific geodetic location in screen coordinates.
@ Incomplete
Data is missing and some error occurred when trying to retrieve it (e.g. network failure)
Definition: MarbleGlobal.h:184
@ WaitingForUpdate
Rendering is based on complete, but outdated data, data update was requested.
Definition: MarbleGlobal.h:182
@ Complete
All data is there and up to date.
Definition: MarbleGlobal.h:181
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
const char * name(StandardAction id)
@ WaitingForData
Rendering is based on no or partial data, more data was requested (e.g. pending network queries)
Definition: MarbleGlobal.h:183
char * toString(const EngineQuery &query)
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Thu Sep 21 2023 04:12:28 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.