diff options
author | Alex <qt-info@nokia.com> | 2011-05-06 12:53:54 +1000 |
---|---|---|
committer | Alex <qt-info@nokia.com> | 2011-05-06 12:53:54 +1000 |
commit | 336c5619c03cd338142f827ffcdaca855e35096c (patch) | |
tree | fc4f2a13f0a686a7434dae134d4f6714a24f48a3 /src/location/maps/qgeoroutesegment.cpp | |
parent | b9758f161020136437fd728698d69a0f3ed970a1 (diff) | |
download | qtlocation-336c5619c03cd338142f827ffcdaca855e35096c.tar.gz |
first commit of QtLocation
Diffstat (limited to 'src/location/maps/qgeoroutesegment.cpp')
-rw-r--r-- | src/location/maps/qgeoroutesegment.cpp | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/src/location/maps/qgeoroutesegment.cpp b/src/location/maps/qgeoroutesegment.cpp new file mode 100644 index 00000000..d86e8dfe --- /dev/null +++ b/src/location/maps/qgeoroutesegment.cpp @@ -0,0 +1,277 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgeoroutesegment.h" +#include "qgeoroutesegment_p.h" + +#include "qgeocoordinate.h" +#include <QDateTime> + +QTM_BEGIN_NAMESPACE + +/*! + \class QGeoRouteSegment + \brief The QGeoRouteSegment class represents a segment of a route. + + \inmodule QtLocation + \since 1.1 + + \ingroup maps-routing + + A QGeoRouteSegment instance has information about the physcial layout + of the route segment, the length of the route and estimated time required + to traverse the route segment and an optional QGeoManeuver associated with + the end of the route segment. + + QGeoRouteSegment instances can be thought of as edges on a routing + graph, with QGeoManeuver instances as optional labels attached to the + vertices of the graph. +*/ + +/*! + Constructs an invalid route segment object. + + The route segment will remain invalid until one of setNextRouteSegment(), + setTravelTime(), setDistance(), setPath() or setManeuver() is called. +*/ +QGeoRouteSegment::QGeoRouteSegment() + : d_ptr(new QGeoRouteSegmentPrivate()) {} + +/*! + Constructs a route segment object from the contents of \a other. +*/ +QGeoRouteSegment::QGeoRouteSegment(const QGeoRouteSegment &other) + : d_ptr(other.d_ptr) {} + +/*! + \internal +*/ +QGeoRouteSegment::QGeoRouteSegment(QExplicitlySharedDataPointer<QGeoRouteSegmentPrivate> &d_ptr) + : d_ptr(d_ptr) {} + +/*! + Destroys this route segment object. +*/ +QGeoRouteSegment::~QGeoRouteSegment() {} + + +/*! + Assigns \a other to this route segment object and then returns a + reference to this route segment object. +*/ +QGeoRouteSegment& QGeoRouteSegment::operator= (const QGeoRouteSegment & other) +{ + d_ptr = other.d_ptr; + return *this; +} + +/*! + Returns whether this route segment and \a other are equal. + + The value of nextRouteSegment() is not considered in the comparison. +*/ +bool QGeoRouteSegment::operator ==(const QGeoRouteSegment &other) const +{ + return (d_ptr.constData() == other.d_ptr.constData()); +} + +/*! + Returns whether this route segment and \a other are not equal. + + The value of nextRouteSegment() is not considered in the comparison. +*/ +bool QGeoRouteSegment::operator !=(const QGeoRouteSegment &other) const +{ + return !(operator==(other)); +} + +/*! + Returns whether this route segment is valid or not. + + If nextRouteSegment() is called on the last route segment of a route, the + returned value will be an invalid route segment. +*/ +bool QGeoRouteSegment::isValid() const +{ + return d_ptr->valid; +} + +/*! + Sets the next route segment in the route to \a routeSegment. +*/ +void QGeoRouteSegment::setNextRouteSegment(const QGeoRouteSegment &routeSegment) +{ + d_ptr->valid = true; + d_ptr->nextSegment = routeSegment.d_ptr; +} + +/*! + Returns the next route segment in the route. + + Will return an invalid route segment if this is the last route + segment in the route. +*/ +QGeoRouteSegment QGeoRouteSegment::nextRouteSegment() const +{ + if (d_ptr->valid && d_ptr->nextSegment) + return QGeoRouteSegment(d_ptr->nextSegment); + + QGeoRouteSegment segment; + segment.d_ptr->valid = false; + return segment; +} + +/*! + Sets the estimated amount of time it will take to traverse this segment of + the route, in seconds, to \a secs. +*/ +void QGeoRouteSegment::setTravelTime(int secs) +{ + d_ptr->valid = true; + d_ptr->travelTime = secs; +} + +/*! + Returns the estimated amount of time it will take to traverse this segment + of the route, in seconds. +*/ +int QGeoRouteSegment::travelTime() const +{ + return d_ptr->travelTime; +} + +/*! + Sets the distance covered by this segment of the route, in metres, to \a distance. +*/ +void QGeoRouteSegment::setDistance(qreal distance) +{ + d_ptr->valid = true; + d_ptr->distance = distance; +} + +/*! + Returns the distance covered by this segment of the route, in metres. +*/ +qreal QGeoRouteSegment::distance() const +{ + return d_ptr->distance; +} + +/*! + Sets the geometric shape of this segment of the route to \a path. + + The coordinates in \a path should be listed in the order in which they + would be traversed by someone traveling along this segment of the route. +*/ +void QGeoRouteSegment::setPath(const QList<QGeoCoordinate> &path) +{ + d_ptr->valid = true; + d_ptr->path = path; +} + +/*! + Returns the geometric shape of this route segment of the route. + + The coordinates should be listed in the order in which they + would be traversed by someone traveling along this segment of the route. +*/ + +QList<QGeoCoordinate> QGeoRouteSegment::path() const +{ + return d_ptr->path; +} + +/*! + Sets the maneuver for this route segement to \a maneuver. +*/ +void QGeoRouteSegment::setManeuver(const QGeoManeuver &maneuver) +{ + d_ptr->valid = true; + d_ptr->maneuver = maneuver; +} + +/*! + Returns the manevuer for this route segment. + + Will return an invalid QGeoManeuver if no information has been attached + to the endpoint of this route segment. +*/ +QGeoManeuver QGeoRouteSegment::maneuver() const +{ + return d_ptr->maneuver; +} + +/******************************************************************************* +*******************************************************************************/ + +QGeoRouteSegmentPrivate::QGeoRouteSegmentPrivate() + : valid(false), + travelTime(0), + distance(0.0) {} + +QGeoRouteSegmentPrivate::QGeoRouteSegmentPrivate(const QGeoRouteSegmentPrivate &other) + : QSharedData(other), + valid(other.valid), + travelTime(other.travelTime), + distance(other.distance), + path(other.path), + maneuver(other.maneuver), + nextSegment(other.nextSegment) {} + +QGeoRouteSegmentPrivate::~QGeoRouteSegmentPrivate() +{ + nextSegment.reset(); +} + +bool QGeoRouteSegmentPrivate::operator ==(const QGeoRouteSegmentPrivate &other) const +{ + return ((valid == other.valid) + && (travelTime == other.travelTime) + && (distance == other.distance) + && (path == other.path) + && (maneuver == other.maneuver)); +} + +/******************************************************************************* +*******************************************************************************/ + +QTM_END_NAMESPACE + |