summaryrefslogtreecommitdiffstats
path: root/src/location/maps/qgeoroute.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/location/maps/qgeoroute.cpp')
-rw-r--r--src/location/maps/qgeoroute.cpp325
1 files changed, 283 insertions, 42 deletions
diff --git a/src/location/maps/qgeoroute.cpp b/src/location/maps/qgeoroute.cpp
index facf1949..237d9b68 100644
--- a/src/location/maps/qgeoroute.cpp
+++ b/src/location/maps/qgeoroute.cpp
@@ -44,6 +44,12 @@
QT_BEGIN_NAMESPACE
+template<>
+QGeoRoutePrivate *QExplicitlySharedDataPointer<QGeoRoutePrivate>::clone()
+{
+ return d->clone();
+}
+
/*!
\class QGeoRoute
\inmodule QtLocation
@@ -71,7 +77,22 @@ QT_BEGIN_NAMESPACE
Constructs a route object.
*/
QGeoRoute::QGeoRoute()
- : d_ptr(new QGeoRoutePrivate()) {}
+ : d_ptr(new QGeoRoutePrivateDefault()) {}
+
+/*!
+ Constructs a route object using dd as private implementation.
+*/
+QGeoRoute::QGeoRoute(const QExplicitlySharedDataPointer<QGeoRoutePrivate> &dd): d_ptr(dd)
+{
+}
+
+/*!
+ Returns the private implementation.
+*/
+QExplicitlySharedDataPointer<QGeoRoutePrivate> &QGeoRoute::d()
+{
+ return d_ptr;
+}
/*!
Constructs a route object from the contents of \a other.
@@ -104,7 +125,8 @@ QGeoRoute &QGeoRoute::operator= (const QGeoRoute & other)
*/
bool QGeoRoute::operator ==(const QGeoRoute &other) const
{
- return (*d_ptr.constData() == *other.d_ptr.constData());
+ return ( (d_ptr.constData() == other.d_ptr.constData())
+ || (*d_ptr) == (*other.d_ptr));
}
/*!
@@ -112,7 +134,7 @@ bool QGeoRoute::operator ==(const QGeoRoute &other) const
*/
bool QGeoRoute::operator !=(const QGeoRoute &other) const
{
- return !(*d_ptr.constData() == *other.d_ptr.constData());
+ return !(operator==(other));
}
/*!
@@ -124,7 +146,7 @@ bool QGeoRoute::operator !=(const QGeoRoute &other) const
*/
void QGeoRoute::setRouteId(const QString &id)
{
- d_ptr->id = id;
+ d_ptr->setId(id);
}
/*!
@@ -136,7 +158,7 @@ void QGeoRoute::setRouteId(const QString &id)
*/
QString QGeoRoute::routeId() const
{
- return d_ptr->id;
+ return d_ptr->id();
}
/*!
@@ -145,7 +167,7 @@ QString QGeoRoute::routeId() const
*/
void QGeoRoute::setRequest(const QGeoRouteRequest &request)
{
- d_ptr->request = request;
+ d_ptr->setRequest(request);
}
/*!
@@ -154,7 +176,7 @@ void QGeoRoute::setRequest(const QGeoRouteRequest &request)
*/
QGeoRouteRequest QGeoRoute::request() const
{
- return d_ptr->request;
+ return d_ptr->request();
}
/*!
@@ -162,7 +184,7 @@ QGeoRouteRequest QGeoRoute::request() const
*/
void QGeoRoute::setBounds(const QGeoRectangle &bounds)
{
- d_ptr->bounds = bounds;
+ d_ptr->setBounds(bounds);
}
/*!
@@ -170,7 +192,7 @@ void QGeoRoute::setBounds(const QGeoRectangle &bounds)
*/
QGeoRectangle QGeoRoute::bounds() const
{
- return d_ptr->bounds;
+ return d_ptr->bounds();
}
/*!
@@ -178,7 +200,7 @@ QGeoRectangle QGeoRoute::bounds() const
*/
void QGeoRoute::setFirstRouteSegment(const QGeoRouteSegment &routeSegment)
{
- d_ptr->firstSegment = routeSegment;
+ d_ptr->setFirstSegment(routeSegment);
}
/*!
@@ -192,7 +214,7 @@ void QGeoRoute::setFirstRouteSegment(const QGeoRouteSegment &routeSegment)
*/
QGeoRouteSegment QGeoRoute::firstRouteSegment() const
{
- return d_ptr->firstSegment;
+ return d_ptr->firstSegment();
}
/*!
@@ -201,7 +223,7 @@ QGeoRouteSegment QGeoRoute::firstRouteSegment() const
*/
void QGeoRoute::setTravelTime(int secs)
{
- d_ptr->travelTime = secs;
+ d_ptr->setTravelTime(secs);
}
/*!
@@ -210,7 +232,7 @@ void QGeoRoute::setTravelTime(int secs)
*/
int QGeoRoute::travelTime() const
{
- return d_ptr->travelTime;
+ return d_ptr->travelTime();
}
/*!
@@ -218,7 +240,7 @@ int QGeoRoute::travelTime() const
*/
void QGeoRoute::setDistance(qreal distance)
{
- d_ptr->distance = distance;
+ d_ptr->setDistance(distance);
}
/*!
@@ -226,7 +248,7 @@ void QGeoRoute::setDistance(qreal distance)
*/
qreal QGeoRoute::distance() const
{
- return d_ptr->distance;
+ return d_ptr->distance();
}
/*!
@@ -236,7 +258,7 @@ qreal QGeoRoute::distance() const
*/
void QGeoRoute::setTravelMode(QGeoRouteRequest::TravelMode mode)
{
- d_ptr->travelMode = mode;
+ d_ptr->setTravelMode(mode);
}
/*!
@@ -246,7 +268,7 @@ void QGeoRoute::setTravelMode(QGeoRouteRequest::TravelMode mode)
*/
QGeoRouteRequest::TravelMode QGeoRoute::travelMode() const
{
- return d_ptr->travelMode;
+ return d_ptr->travelMode();
}
/*!
@@ -257,7 +279,7 @@ QGeoRouteRequest::TravelMode QGeoRoute::travelMode() const
*/
void QGeoRoute::setPath(const QList<QGeoCoordinate> &path)
{
- d_ptr->path = path;
+ d_ptr->setPath(path);
}
/*!
@@ -268,34 +290,37 @@ void QGeoRoute::setPath(const QList<QGeoCoordinate> &path)
*/
QList<QGeoCoordinate> QGeoRoute::path() const
{
- return d_ptr->path;
+ return d_ptr->path();
}
/*******************************************************************************
*******************************************************************************/
QGeoRoutePrivate::QGeoRoutePrivate()
- : travelTime(0),
- distance(0.0),
- travelMode(QGeoRouteRequest::CarTravel) {}
-
-QGeoRoutePrivate::QGeoRoutePrivate(const QGeoRoutePrivate &other)
- : QSharedData(other),
- id(other.id),
- request(other.request),
- bounds(other.bounds),
- travelTime(other.travelTime),
- distance(other.distance),
- travelMode(other.travelMode),
- path(other.path),
- firstSegment(other.firstSegment) {}
+{
+
+}
+
+QGeoRoutePrivate::QGeoRoutePrivate(const QGeoRoutePrivate &other) : QSharedData(other)
+{
+
+}
QGeoRoutePrivate::~QGeoRoutePrivate() {}
bool QGeoRoutePrivate::operator ==(const QGeoRoutePrivate &other) const
{
- QGeoRouteSegment s1 = firstSegment;
- QGeoRouteSegment s2 = other.firstSegment;
+ return equals(other);
+}
+
+bool QGeoRoutePrivate::equals(const QGeoRoutePrivate &other) const
+{
+ if (!other.engineName().isEmpty()) // only way to know if other comes from an engine without dynamic_cast
+ return false;
+
+ // here both routes are of type QGeoRoutePrivateDefault
+ QGeoRouteSegment s1 = firstSegment();
+ QGeoRouteSegment s2 = other.firstSegment();
while (true) {
if (s1.isValid() != s2.isValid())
@@ -308,13 +333,229 @@ bool QGeoRoutePrivate::operator ==(const QGeoRoutePrivate &other) const
s2 = s2.nextRouteSegment();
}
- return ((id == other.id)
- && (request == other.request)
- && (bounds == other.bounds)
- && (travelTime == other.travelTime)
- && (distance == other.distance)
- && (travelMode == other.travelMode)
- && (path == other.path));
+ return ((id() == other.id())
+ && (request() == other.request())
+ && (bounds() == other.bounds())
+ && (travelTime() == other.travelTime())
+ && (distance() == other.distance())
+ && (travelMode() == other.travelMode())
+ && (path() == other.path()));
+}
+
+void QGeoRoutePrivate::setId(const QString &id)
+{
+ Q_UNUSED(id)
+}
+
+QString QGeoRoutePrivate::id() const
+{
+ return QString();
+}
+
+void QGeoRoutePrivate::setRequest(const QGeoRouteRequest &request)
+{
+ Q_UNUSED(request)
+}
+
+QGeoRouteRequest QGeoRoutePrivate::request() const
+{
+ return QGeoRouteRequest();
+}
+
+void QGeoRoutePrivate::setBounds(const QGeoRectangle &bounds)
+{
+ Q_UNUSED(bounds)
+}
+
+QGeoRectangle QGeoRoutePrivate::bounds() const
+{
+ return QGeoRectangle();
+}
+
+void QGeoRoutePrivate::setTravelTime(int travelTime)
+{
+ Q_UNUSED(travelTime)
+}
+
+int QGeoRoutePrivate::travelTime() const
+{
+ return 0;
+}
+
+void QGeoRoutePrivate::setDistance(qreal distance)
+{
+ Q_UNUSED(distance)
+}
+
+qreal QGeoRoutePrivate::distance() const
+{
+ return 0;
+}
+
+void QGeoRoutePrivate::setTravelMode(QGeoRouteRequest::TravelMode mode)
+{
+ Q_UNUSED(mode)
+}
+
+QGeoRouteRequest::TravelMode QGeoRoutePrivate::travelMode() const
+{
+ return QGeoRouteRequest::CarTravel;
+}
+
+void QGeoRoutePrivate::setPath(const QList<QGeoCoordinate> &path)
+{
+ Q_UNUSED(path)
+}
+
+QList<QGeoCoordinate> QGeoRoutePrivate::path() const
+{
+ return QList<QGeoCoordinate>();
+}
+
+void QGeoRoutePrivate::setFirstSegment(const QGeoRouteSegment &firstSegment)
+{
+ Q_UNUSED(firstSegment)
+}
+
+QGeoRouteSegment QGeoRoutePrivate::firstSegment() const
+{
+ return QGeoRouteSegment();
+}
+
+const QGeoRoutePrivate *QGeoRoutePrivate::routePrivateData(const QGeoRoute &route)
+{
+ return route.d_ptr.data();
+}
+
+/*******************************************************************************
+*******************************************************************************/
+
+
+QGeoRoutePrivateDefault::QGeoRoutePrivateDefault()
+ : m_travelTime(0),
+ m_distance(0.0),
+ m_travelMode(QGeoRouteRequest::CarTravel),
+ m_numSegments(-1) {}
+
+QGeoRoutePrivateDefault::QGeoRoutePrivateDefault(const QGeoRoutePrivateDefault &other)
+ : QGeoRoutePrivate(other),
+ m_id(other.m_id),
+ m_request(other.m_request),
+ m_bounds(other.m_bounds),
+ m_routeSegments(other.m_routeSegments),
+ m_travelTime(other.m_travelTime),
+ m_distance(other.m_distance),
+ m_travelMode(other.m_travelMode),
+ m_path(other.m_path),
+ m_firstSegment(other.m_firstSegment),
+ m_numSegments(other.m_numSegments){}
+
+
+QGeoRoutePrivateDefault::~QGeoRoutePrivateDefault() {}
+
+QGeoRoutePrivate *QGeoRoutePrivateDefault::clone()
+{
+ return new QGeoRoutePrivateDefault(*this);
+}
+
+void QGeoRoutePrivateDefault::setId(const QString &id)
+{
+ m_id = id;
+}
+
+QString QGeoRoutePrivateDefault::id() const
+{
+ return m_id;
+}
+
+void QGeoRoutePrivateDefault::setRequest(const QGeoRouteRequest &request)
+{
+ m_request = request;
+}
+
+QGeoRouteRequest QGeoRoutePrivateDefault::request() const
+{
+ return m_request;
+}
+
+void QGeoRoutePrivateDefault::setBounds(const QGeoRectangle &bounds)
+{
+ m_bounds = bounds;
+}
+
+QGeoRectangle QGeoRoutePrivateDefault::bounds() const
+{
+ return m_bounds;
+}
+
+void QGeoRoutePrivateDefault::setTravelTime(int travelTime)
+{
+ m_travelTime = travelTime;
+}
+
+int QGeoRoutePrivateDefault::travelTime() const
+{
+ return m_travelTime;
+}
+
+void QGeoRoutePrivateDefault::setDistance(qreal distance)
+{
+ m_distance = distance;
+}
+
+qreal QGeoRoutePrivateDefault::distance() const
+{
+ return m_distance;
+}
+
+void QGeoRoutePrivateDefault::setTravelMode(QGeoRouteRequest::TravelMode mode)
+{
+ m_travelMode = mode;
+}
+
+QGeoRouteRequest::TravelMode QGeoRoutePrivateDefault::travelMode() const
+{
+ return m_travelMode;
+}
+
+void QGeoRoutePrivateDefault::setPath(const QList<QGeoCoordinate> &path)
+{
+ m_path = path;
+}
+
+QList<QGeoCoordinate> QGeoRoutePrivateDefault::path() const
+{
+ return m_path;
+}
+
+void QGeoRoutePrivateDefault::setFirstSegment(const QGeoRouteSegment &firstSegment)
+{
+ m_firstSegment = firstSegment;
+}
+
+QGeoRouteSegment QGeoRoutePrivateDefault::firstSegment() const
+{
+ return m_firstSegment;
+}
+
+QString QGeoRoutePrivateDefault::engineName() const
+{
+ return QString();
+}
+
+int QGeoRoutePrivateDefault::segmentsCount() const
+{
+ if (m_numSegments >= 0)
+ return m_numSegments;
+
+ int count = 0;
+ QGeoRouteSegment segment = m_firstSegment;
+ while (segment.isValid()) {
+ ++count;
+ segment = segment.nextRouteSegment();
+ }
+ m_numSegments = count;
+ return count;
}
QT_END_NAMESPACE