5#include "GeoDataMultiTrack.h"
6#include "GeoDataMultiTrack_p.h"
8#include "GeoDataLineString.h"
9#include "GeoDataLinearRing.h"
10#include "GeoDataPoint.h"
11#include "GeoDataPolygon.h"
12#include "GeoDataTrack.h"
13#include "GeoDataTypes.h"
15#include "MarbleDebug.h"
23GeoDataMultiTrack::GeoDataMultiTrack()
24 : GeoDataGeometry( new GeoDataMultiTrackPrivate )
28GeoDataMultiTrack::GeoDataMultiTrack(
const GeoDataGeometry& other )
29 : GeoDataGeometry( other )
33GeoDataMultiTrack::~GeoDataMultiTrack()
37const char *GeoDataMultiTrack::nodeType()
const
39 return GeoDataTypes::GeoDataMultiTrackType;
42EnumGeometryId GeoDataMultiTrack::geometryId()
const
44 return GeoDataMultiTrackId;
47GeoDataGeometry *GeoDataMultiTrack::copy()
const
49 return new GeoDataMultiTrack(*
this);
52bool GeoDataMultiTrack::operator==(
const GeoDataMultiTrack& other )
const
54 if ( !
equals(other) )
return false;
56 Q_D(
const GeoDataMultiTrack);
57 const GeoDataMultiTrackPrivate *other_d = other.d_func();
65 for (; d_it != d_end && other_it != other_end; ++d_it, ++other_it) {
66 if ( **d_it != **other_it )
return false;
69 return d_it == d_end && other_it == other_end;
72bool GeoDataMultiTrack::operator!=(
const GeoDataMultiTrack& other )
const
77const GeoDataLatLonAltBox& GeoDataMultiTrack::latLonAltBox()
const
79 Q_D(
const GeoDataMultiTrack);
84 d->m_latLonAltBox.clear();
85 for (; it !=
end; ++it) {
86 if ( !(*it)->latLonAltBox().isEmpty() ) {
87 if (d->m_latLonAltBox.isEmpty() ) {
88 d->m_latLonAltBox = (*it)->latLonAltBox();
91 d->m_latLonAltBox |= (*it)->latLonAltBox();
95 return d->m_latLonAltBox;
98int GeoDataMultiTrack::size()
const
100 Q_D(
const GeoDataMultiTrack);
101 return d->m_vector.size();
106 Q_D(
const GeoDataMultiTrack);
109 results.
reserve(d->m_vector.size());
114 for (; it !=
end; ++it) {
115 const GeoDataTrack f(**it);
122GeoDataTrack& GeoDataMultiTrack::at(
int pos )
124 mDebug() <<
"detaching!";
127 Q_D(GeoDataMultiTrack);
128 return *(d->m_vector[pos]);
131const GeoDataTrack& GeoDataMultiTrack::at(
int pos )
const
133 Q_D(
const GeoDataMultiTrack);
134 return *(d->m_vector.at(pos));
137GeoDataTrack& GeoDataMultiTrack::operator[](
int pos )
141 Q_D(GeoDataMultiTrack);
142 return *(d->m_vector[pos]);
145const GeoDataTrack& GeoDataMultiTrack::operator[](
int pos )
const
147 Q_D(
const GeoDataMultiTrack);
148 return *(d->m_vector[pos]);
151GeoDataTrack& GeoDataMultiTrack::last()
155 Q_D(GeoDataMultiTrack);
156 return *(d->m_vector.last());
159GeoDataTrack& GeoDataMultiTrack::first()
163 Q_D(GeoDataMultiTrack);
164 return *(d->m_vector.first());
167const GeoDataTrack& GeoDataMultiTrack::last()
const
169 Q_D(
const GeoDataMultiTrack);
170 return *(d->m_vector.last());
173const GeoDataTrack& GeoDataMultiTrack::first()
const
175 Q_D(
const GeoDataMultiTrack);
176 return *(d->m_vector.first());
183 Q_D(GeoDataMultiTrack);
184 return d->m_vector.begin();
191 Q_D(GeoDataMultiTrack);
192 return d->m_vector.end();
197 Q_D(
const GeoDataMultiTrack);
198 return d->m_vector.constBegin();
203 Q_D(
const GeoDataMultiTrack);
204 return d->m_vector.constEnd();
210GeoDataTrack* GeoDataMultiTrack::child(
int i )
214 Q_D(
const GeoDataMultiTrack);
215 return d->m_vector.at(i);
218const GeoDataTrack* GeoDataMultiTrack::child(
int i )
const
220 Q_D(
const GeoDataMultiTrack);
221 return d->m_vector.at(i);
227int GeoDataMultiTrack::childPosition(
const GeoDataTrack *
object )
const
229 Q_D(
const GeoDataMultiTrack);
230 for (
int i = 0; i < d->m_vector.size(); ++i) {
231 if (d->m_vector.at(i) ==
object) {
241void GeoDataMultiTrack::append( GeoDataTrack *other )
245 Q_D(GeoDataMultiTrack);
246 other->setParent(
this );
247 d->m_vector.append(other);
251GeoDataMultiTrack& GeoDataMultiTrack::operator << (
const GeoDataTrack& value )
255 Q_D(GeoDataMultiTrack);
256 GeoDataTrack *g =
new GeoDataTrack( value );
257 g->setParent(
this );
258 d->m_vector.append(g);
262void GeoDataMultiTrack::clear()
266 Q_D(GeoDataMultiTrack);
267 qDeleteAll(d->m_vector);
271void GeoDataMultiTrack::pack(
QDataStream& stream )
const
273 Q_D(
const GeoDataMultiTrack);
275 GeoDataGeometry::pack( stream );
277 stream << d->m_vector.size();
280 = d->m_vector.constBegin();
281 iterator != d->m_vector.constEnd();
283 const GeoDataTrack *geometry = *iterator;
284 stream << geometry->geometryId();
285 geometry->pack( stream );
289void GeoDataMultiTrack::unpack(
QDataStream& stream )
293 Q_D(GeoDataMultiTrack);
294 GeoDataGeometry::unpack( stream );
300 for(
int i = 0; i < size; i++ ) {
302 stream >> geometryId;
303 switch( geometryId ) {
304 case InvalidGeometryId:
308 GeoDataTrack *track =
new GeoDataTrack;
309 track->unpack( stream );
310 d->m_vector.append( track );
const QList< QKeySequence > & end()
bool equals(const QVariant &lhs, const QVariant &rhs)
Binds a QML item to a specific geodetic location in screen coordinates.
void append(QList< T > &&value)
void reserve(qsizetype size)
bool operator==(const QGraphicsApiFilter &reference, const QGraphicsApiFilter &sample)