1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the QtLocation module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL3$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or later as published by the Free
28 ** Software Foundation and appearing in the file LICENSE.GPL included in
29 ** the packaging of this file. Please review the following information to
30 ** ensure the GNU General Public License version 2.0 requirements will be
31 ** met: http://www.gnu.org/licenses/gpl-2.0.html.
32 **
33 ** $QT_END_LICENSE$
34 **
35 ****************************************************************************/
36 
37 #include "qgeoroute.h"
38 #include "qgeoroute_p.h"
39 
40 #include "qgeorectangle.h"
41 #include "qgeoroutesegment.h"
42 
43 #include <QDateTime>
44 #include <QVariantMap>
45 
46 QT_BEGIN_NAMESPACE
47 
48 template<>
clone()49 QGeoRoutePrivate *QExplicitlySharedDataPointer<QGeoRoutePrivate>::clone()
50 {
51     return d->clone();
52 }
53 
54 /*!
55     \class QGeoRoute
56     \inmodule QtLocation
57     \ingroup QtLocation-routing
58     \since 5.6
59 
60     \brief The QGeoRoute class represents a route between two points.
61 
62     A QGeoRoute object contains high level information about a route, such
63     as the length the route, the estimated travel time for the route,
64     and enough information to render a basic image of the route on a map.
65 
66     The QGeoRoute object also contains a list of QGeoRouteSegment objecs which
67     describe subsections of the route in greater detail.
68 
69     Routing information is normally requested using
70     QGeoRoutingManager::calculateRoute(), which returns a QGeoRouteReply
71     instance. If the operation is completed successfully the routing
72     information can be accessed with QGeoRouteReply::routes()
73 
74     \sa QGeoRoutingManager
75 */
76 
77 /*!
78     Constructs a route object.
79 */
QGeoRoute()80 QGeoRoute::QGeoRoute()
81     : d_ptr(new QGeoRoutePrivateDefault()) {}
82 
83 /*!
84     Constructs a route object using \a dd as private implementation.
85 */
QGeoRoute(const QExplicitlySharedDataPointer<QGeoRoutePrivate> & dd)86 QGeoRoute::QGeoRoute(const QExplicitlySharedDataPointer<QGeoRoutePrivate> &dd): d_ptr(dd)
87 {
88 }
89 
90 /*!
91     Returns the private implementation.
92 */
d()93 QExplicitlySharedDataPointer<QGeoRoutePrivate> &QGeoRoute::d()
94 {
95     return d_ptr;
96 }
97 
const_d() const98 const QExplicitlySharedDataPointer<QGeoRoutePrivate> &QGeoRoute::const_d() const
99 {
100     return d_ptr;
101 }
102 
103 /*!
104     Constructs a route object from the contents of \a other.
105 */
QGeoRoute(const QGeoRoute & other)106 QGeoRoute::QGeoRoute(const QGeoRoute &other)
107     : d_ptr(other.d_ptr) {}
108 
109 /*!
110     Destroys this route object.
111 */
~QGeoRoute()112 QGeoRoute::~QGeoRoute()
113 {
114 }
115 
116 /*!
117     Assigns the contents of \a other to this route and returns a reference to
118     this route.
119 */
operator =(const QGeoRoute & other)120 QGeoRoute &QGeoRoute::operator= (const QGeoRoute & other)
121 {
122     if (this == &other)
123         return *this;
124 
125     d_ptr = other.d_ptr;
126     return *this;
127 }
128 
129 /*!
130     Returns whether this route and \a other are equal.
131 */
operator ==(const QGeoRoute & other) const132 bool QGeoRoute::operator ==(const QGeoRoute &other) const
133 {
134     return ( (d_ptr.constData() == other.d_ptr.constData())
135             || (*d_ptr) == (*other.d_ptr));
136 }
137 
138 /*!
139     Returns whether this route and \a other are not equal.
140 */
operator !=(const QGeoRoute & other) const141 bool QGeoRoute::operator !=(const QGeoRoute &other) const
142 {
143     return !(operator==(other));
144 }
145 
146 /*!
147     Sets the identifier of this route to \a id.
148 
149     Service providers which support the updating of routes commonly assign
150     identifiers to routes.  If this route came from such a service provider changing
151     the identifier will probably cause route updates to stop working.
152 */
setRouteId(const QString & id)153 void QGeoRoute::setRouteId(const QString &id)
154 {
155     d_ptr->setId(id);
156 }
157 
158 /*!
159     Returns the identifier of this route.
160 
161     Service providers which support the updating of routes commonly assign
162     identifiers to routes.  If this route did not come from such a service provider
163     the function will return an empty string.
164 */
routeId() const165 QString QGeoRoute::routeId() const
166 {
167     return d_ptr->id();
168 }
169 
170 /*!
171     Sets the route request which describes the criteria used in the
172     calculcation of this route to \a request.
173 */
setRequest(const QGeoRouteRequest & request)174 void QGeoRoute::setRequest(const QGeoRouteRequest &request)
175 {
176     d_ptr->setRequest(request);
177 }
178 
179 /*!
180     Returns the route request which describes the criteria used in
181     the calculation of this route.
182 */
request() const183 QGeoRouteRequest QGeoRoute::request() const
184 {
185     return d_ptr->request();
186 }
187 
188 /*!
189     Sets the bounding box which encompasses the entire route to \a bounds.
190 */
setBounds(const QGeoRectangle & bounds)191 void QGeoRoute::setBounds(const QGeoRectangle &bounds)
192 {
193     d_ptr->setBounds(bounds);
194 }
195 
196 /*!
197     Returns a bounding box which encompasses the entire route.
198 */
bounds() const199 QGeoRectangle QGeoRoute::bounds() const
200 {
201     return d_ptr->bounds();
202 }
203 
204 /*!
205     Sets the first route segment in the route to \a routeSegment.
206 */
setFirstRouteSegment(const QGeoRouteSegment & routeSegment)207 void QGeoRoute::setFirstRouteSegment(const QGeoRouteSegment &routeSegment)
208 {
209     d_ptr->setFirstSegment(routeSegment);
210 }
211 
212 /*!
213     Returns the first route segment in the route.
214 
215     Will return an invalid route segment if there are no route segments
216     associated with the route.
217 
218     The remaining route segments can be accessed sequentially with
219     QGeoRouteSegment::nextRouteSegment.
220 */
firstRouteSegment() const221 QGeoRouteSegment QGeoRoute::firstRouteSegment() const
222 {
223     return d_ptr->firstSegment();
224 }
225 
226 /*!
227     Sets the estimated amount of time it will take to traverse this route,
228     in seconds, to \a secs.
229 */
setTravelTime(int secs)230 void QGeoRoute::setTravelTime(int secs)
231 {
232     d_ptr->setTravelTime(secs);
233 }
234 
235 /*!
236     Returns the estimated amount of time it will take to traverse this route,
237     in seconds.
238 */
travelTime() const239 int QGeoRoute::travelTime() const
240 {
241     return d_ptr->travelTime();
242 }
243 
244 /*!
245     Sets the distance covered by this route, in meters, to \a distance.
246 */
setDistance(qreal distance)247 void QGeoRoute::setDistance(qreal distance)
248 {
249     d_ptr->setDistance(distance);
250 }
251 
252 /*!
253     Returns the distance covered by this route, in meters.
254 */
distance() const255 qreal QGeoRoute::distance() const
256 {
257     return d_ptr->distance();
258 }
259 
260 /*!
261     Sets the travel mode for this route to \a mode.
262 
263     This should be one of the travel modes returned by request().travelModes().
264 */
setTravelMode(QGeoRouteRequest::TravelMode mode)265 void QGeoRoute::setTravelMode(QGeoRouteRequest::TravelMode mode)
266 {
267     d_ptr->setTravelMode(mode);
268 }
269 
270 /*!
271     Returns the travel mode for the this route.
272 
273     This should be one of the travel modes returned by request().travelModes().
274 */
travelMode() const275 QGeoRouteRequest::TravelMode QGeoRoute::travelMode() const
276 {
277     return d_ptr->travelMode();
278 }
279 
280 /*!
281     Sets the geometric shape of the route to \a path.
282 
283     The coordinates in \a path should be listed in the order in which they
284     would be traversed by someone traveling along this segment of the route.
285 */
setPath(const QList<QGeoCoordinate> & path)286 void QGeoRoute::setPath(const QList<QGeoCoordinate> &path)
287 {
288     d_ptr->setPath(path);
289 }
290 
291 /*!
292     Returns the geometric shape of the route.
293 
294     The coordinates should be listed in the order in which they
295     would be traversed by someone traveling along this segment of the route.
296 */
path() const297 QList<QGeoCoordinate> QGeoRoute::path() const
298 {
299     return d_ptr->path();
300 }
301 
302 /*!
303     Sets the route \a legs for a multi-waypoint route.
304 
305     \sa QGeoRouteLeg
306     \since 5.12
307 */
setRouteLegs(const QList<QGeoRouteLeg> & legs)308 void QGeoRoute::setRouteLegs(const QList<QGeoRouteLeg> &legs)
309 {
310     d_ptr->setRouteLegs(legs);
311 }
312 
313 /*!
314     Returns the legs for the route.
315 
316     \sa QGeoRouteLeg
317     \since 5.12
318 */
routeLegs() const319 QList<QGeoRouteLeg> QGeoRoute::routeLegs() const
320 {
321     return d_ptr->routeLegs();
322 }
323 
324 /*!
325     Sets the extended attributes \a extendedAttributes associated with this route.
326 
327     \since 5.13
328 */
setExtendedAttributes(const QVariantMap & extendedAttributes)329 void QGeoRoute::setExtendedAttributes(const QVariantMap &extendedAttributes)
330 {
331     d_ptr->setExtendedAttributes(extendedAttributes);
332 }
333 
334 /*!
335     Returns the extended attributes associated with this route.
336 
337     \since 5.13
338 */
extendedAttributes() const339 QVariantMap QGeoRoute::extendedAttributes() const
340 {
341     return d_ptr->extendedAttributes();
342 }
343 
344 /*******************************************************************************
345 *******************************************************************************/
346 
QGeoRoutePrivate()347 QGeoRoutePrivate::QGeoRoutePrivate()
348 {
349 
350 }
351 
QGeoRoutePrivate(const QGeoRoutePrivate & other)352 QGeoRoutePrivate::QGeoRoutePrivate(const QGeoRoutePrivate &other) : QSharedData(other)
353 {
354 
355 }
356 
~QGeoRoutePrivate()357 QGeoRoutePrivate::~QGeoRoutePrivate() {}
358 
operator ==(const QGeoRoutePrivate & other) const359 bool QGeoRoutePrivate::operator ==(const QGeoRoutePrivate &other) const
360 {
361     return equals(other);
362 }
363 
equals(const QGeoRoutePrivate & other) const364 bool QGeoRoutePrivate::equals(const QGeoRoutePrivate &other) const
365 {
366     if (!other.engineName().isEmpty()) // only way to know if other comes from an engine without dynamic_cast
367         return false;
368 
369     // here both routes are of type QGeoRoutePrivateDefault
370     QGeoRouteSegment s1 = firstSegment();
371     QGeoRouteSegment s2 = other.firstSegment();
372 
373     while (true) {
374         if (s1.isValid() != s2.isValid())
375             return false;
376         if (!s1.isValid())
377             break;
378         if (s1 != s2)
379             return false;
380         s1 = s1.nextRouteSegment();
381         s2 = s2.nextRouteSegment();
382     }
383 
384     return (   (id() == other.id())
385             && (request() == other.request())
386             && (bounds() == other.bounds())
387             && (travelTime() == other.travelTime())
388             && (distance() == other.distance())
389             && (travelMode() == other.travelMode())
390             && (path() == other.path())
391             && (metadata() == other.metadata())
392             && (routeLegs() == other.routeLegs())
393             && (extendedAttributes() == other.extendedAttributes()) );
394 }
395 
setId(const QString & id)396 void QGeoRoutePrivate::setId(const QString &id)
397 {
398     Q_UNUSED(id);
399 }
400 
id() const401 QString QGeoRoutePrivate::id() const
402 {
403     return QString();
404 }
405 
setRequest(const QGeoRouteRequest & request)406 void QGeoRoutePrivate::setRequest(const QGeoRouteRequest &request)
407 {
408     Q_UNUSED(request);
409 }
410 
request() const411 QGeoRouteRequest QGeoRoutePrivate::request() const
412 {
413     return QGeoRouteRequest();
414 }
415 
setBounds(const QGeoRectangle & bounds)416 void QGeoRoutePrivate::setBounds(const QGeoRectangle &bounds)
417 {
418     Q_UNUSED(bounds);
419 }
420 
bounds() const421 QGeoRectangle QGeoRoutePrivate::bounds() const
422 {
423     return QGeoRectangle();
424 }
425 
setTravelTime(int travelTime)426 void QGeoRoutePrivate::setTravelTime(int travelTime)
427 {
428     Q_UNUSED(travelTime);
429 }
430 
travelTime() const431 int QGeoRoutePrivate::travelTime() const
432 {
433     return 0;
434 }
435 
setDistance(qreal distance)436 void QGeoRoutePrivate::setDistance(qreal distance)
437 {
438     Q_UNUSED(distance);
439 }
440 
distance() const441 qreal QGeoRoutePrivate::distance() const
442 {
443     return 0;
444 }
445 
setTravelMode(QGeoRouteRequest::TravelMode mode)446 void QGeoRoutePrivate::setTravelMode(QGeoRouteRequest::TravelMode mode)
447 {
448     Q_UNUSED(mode);
449 }
450 
travelMode() const451 QGeoRouteRequest::TravelMode QGeoRoutePrivate::travelMode() const
452 {
453     return QGeoRouteRequest::CarTravel;
454 }
455 
setPath(const QList<QGeoCoordinate> & path)456 void QGeoRoutePrivate::setPath(const QList<QGeoCoordinate> &path)
457 {
458     Q_UNUSED(path);
459 }
460 
path() const461 QList<QGeoCoordinate> QGeoRoutePrivate::path() const
462 {
463     return QList<QGeoCoordinate>();
464 }
465 
setFirstSegment(const QGeoRouteSegment & firstSegment)466 void QGeoRoutePrivate::setFirstSegment(const QGeoRouteSegment &firstSegment)
467 {
468     Q_UNUSED(firstSegment);
469 }
470 
firstSegment() const471 QGeoRouteSegment QGeoRoutePrivate::firstSegment() const
472 {
473     return QGeoRouteSegment();
474 }
475 
routePrivateData(const QGeoRoute & route)476 const QGeoRoutePrivate *QGeoRoutePrivate::routePrivateData(const QGeoRoute &route)
477 {
478     return route.d_ptr.data();
479 }
480 
metadata() const481 QVariantMap QGeoRoutePrivate::metadata() const
482 {
483     return QVariantMap();
484 }
485 
setRouteLegs(const QList<QGeoRouteLeg> &)486 void QGeoRoutePrivate::setRouteLegs(const QList<QGeoRouteLeg> &/*legs*/)
487 {
488 
489 }
490 
routeLegs() const491 QList<QGeoRouteLeg> QGeoRoutePrivate::routeLegs() const
492 {
493     return QList<QGeoRouteLeg>();
494 }
495 
setExtendedAttributes(const QVariantMap &)496 void QGeoRoutePrivate::setExtendedAttributes(const QVariantMap &/*extendedAttributes*/)
497 {
498 
499 }
500 
extendedAttributes() const501 QVariantMap QGeoRoutePrivate::extendedAttributes() const
502 {
503     return QVariantMap();
504 }
505 
setLegIndex(int)506 void QGeoRoutePrivate::setLegIndex(int /*idx*/)
507 {
508 
509 }
510 
legIndex() const511 int QGeoRoutePrivate::legIndex() const
512 {
513     return 0;
514 }
515 
setContainingRoute(const QGeoRoute &)516 void QGeoRoutePrivate::setContainingRoute(const QGeoRoute &/*route*/)
517 {
518 
519 }
520 
containingRoute() const521 QGeoRoute QGeoRoutePrivate::containingRoute() const
522 {
523     return QGeoRoute();
524 }
525 
526 /*******************************************************************************
527 *******************************************************************************/
528 
529 
QGeoRoutePrivateDefault()530 QGeoRoutePrivateDefault::QGeoRoutePrivateDefault()
531     : m_travelTime(0),
532       m_distance(0.0),
533       m_travelMode(QGeoRouteRequest::CarTravel),
534       m_numSegments(-1) {}
535 
QGeoRoutePrivateDefault(const QGeoRoutePrivateDefault & other)536 QGeoRoutePrivateDefault::QGeoRoutePrivateDefault(const QGeoRoutePrivateDefault &other)
537     : QGeoRoutePrivate(other),
538       m_id(other.m_id),
539       m_request(other.m_request),
540       m_bounds(other.m_bounds),
541       m_routeSegments(other.m_routeSegments),
542       m_travelTime(other.m_travelTime),
543       m_distance(other.m_distance),
544       m_travelMode(other.m_travelMode),
545       m_path(other.m_path),
546       m_legs(other.m_legs),
547       m_firstSegment(other.m_firstSegment),
548       m_numSegments(other.m_numSegments),
549       m_extendedAttributes(other.m_extendedAttributes) {} // Purposedly ignoring legIndex and parentRoute
550 
551 
~QGeoRoutePrivateDefault()552 QGeoRoutePrivateDefault::~QGeoRoutePrivateDefault() {}
553 
clone()554 QGeoRoutePrivate *QGeoRoutePrivateDefault::clone()
555 {
556     return new QGeoRoutePrivateDefault(*this);
557 }
558 
setId(const QString & id)559 void QGeoRoutePrivateDefault::setId(const QString &id)
560 {
561     m_id = id;
562 }
563 
id() const564 QString QGeoRoutePrivateDefault::id() const
565 {
566     return m_id;
567 }
568 
setRequest(const QGeoRouteRequest & request)569 void QGeoRoutePrivateDefault::setRequest(const QGeoRouteRequest &request)
570 {
571     m_request = request;
572 }
573 
request() const574 QGeoRouteRequest QGeoRoutePrivateDefault::request() const
575 {
576     return m_request;
577 }
578 
setBounds(const QGeoRectangle & bounds)579 void QGeoRoutePrivateDefault::setBounds(const QGeoRectangle &bounds)
580 {
581     m_bounds = bounds;
582 }
583 
bounds() const584 QGeoRectangle QGeoRoutePrivateDefault::bounds() const
585 {
586     return m_bounds;
587 }
588 
setTravelTime(int travelTime)589 void QGeoRoutePrivateDefault::setTravelTime(int travelTime)
590 {
591     m_travelTime = travelTime;
592 }
593 
travelTime() const594 int QGeoRoutePrivateDefault::travelTime() const
595 {
596     return m_travelTime;
597 }
598 
setDistance(qreal distance)599 void QGeoRoutePrivateDefault::setDistance(qreal distance)
600 {
601     m_distance = distance;
602 }
603 
distance() const604 qreal QGeoRoutePrivateDefault::distance() const
605 {
606     return m_distance;
607 }
608 
setTravelMode(QGeoRouteRequest::TravelMode mode)609 void QGeoRoutePrivateDefault::setTravelMode(QGeoRouteRequest::TravelMode mode)
610 {
611     m_travelMode = mode;
612 }
613 
travelMode() const614 QGeoRouteRequest::TravelMode QGeoRoutePrivateDefault::travelMode() const
615 {
616     return m_travelMode;
617 }
618 
setPath(const QList<QGeoCoordinate> & path)619 void QGeoRoutePrivateDefault::setPath(const QList<QGeoCoordinate> &path)
620 {
621     m_path = path;
622 }
623 
path() const624 QList<QGeoCoordinate> QGeoRoutePrivateDefault::path() const
625 {
626     return m_path;
627 }
628 
setFirstSegment(const QGeoRouteSegment & firstSegment)629 void QGeoRoutePrivateDefault::setFirstSegment(const QGeoRouteSegment &firstSegment)
630 {
631     m_firstSegment = firstSegment;
632 }
633 
firstSegment() const634 QGeoRouteSegment QGeoRoutePrivateDefault::firstSegment() const
635 {
636     return m_firstSegment;
637 }
638 
engineName() const639 QString QGeoRoutePrivateDefault::engineName() const
640 {
641     return QString();
642 }
643 
segmentsCount() const644 int QGeoRoutePrivateDefault::segmentsCount() const
645 {
646     if (m_numSegments >= 0)
647         return m_numSegments;
648 
649     int count = 0;
650     QGeoRouteSegment segment = m_firstSegment;
651     while (segment.isValid()) {
652         ++count;
653         if (segment.isLegLastSegment() && m_containingRoute.data()) // if containing route, this is a leg
654             break;
655         segment = segment.nextRouteSegment();
656     }
657     m_numSegments = count;
658     return count;
659 }
660 
setRouteLegs(const QList<QGeoRouteLeg> & legs)661 void QGeoRoutePrivateDefault::setRouteLegs(const QList<QGeoRouteLeg> &legs)
662 {
663     m_legs = legs;
664 }
665 
routeLegs() const666 QList<QGeoRouteLeg> QGeoRoutePrivateDefault::routeLegs() const
667 {
668     return m_legs;
669 }
670 
setExtendedAttributes(const QVariantMap & extendedAttributes)671 void QGeoRoutePrivateDefault::setExtendedAttributes(const QVariantMap &extendedAttributes)
672 {
673     m_extendedAttributes = extendedAttributes;
674 }
675 
extendedAttributes() const676 QVariantMap QGeoRoutePrivateDefault::extendedAttributes() const
677 {
678     return m_extendedAttributes;
679 }
680 
setLegIndex(int idx)681 void QGeoRoutePrivateDefault::setLegIndex(int idx)
682 {
683     if (idx >= 0)
684         m_legIndex = idx;
685 }
686 
legIndex() const687 int QGeoRoutePrivateDefault::legIndex() const
688 {
689     return m_legIndex;
690 }
691 
setContainingRoute(const QGeoRoute & route)692 void QGeoRoutePrivateDefault::setContainingRoute(const QGeoRoute &route)
693 {
694     QScopedPointer<QGeoRoute> containingRoute(new QGeoRoute(route));
695     m_containingRoute.swap(containingRoute);
696 }
697 
containingRoute() const698 QGeoRoute QGeoRoutePrivateDefault::containingRoute() const
699 {
700     if (m_containingRoute)
701         return *m_containingRoute;
702     return QGeoRoute();
703 }
704 
705 /*!
706     \class QGeoRouteLeg
707     \inmodule QtLocation
708     \ingroup QtLocation-routing
709     \since 5.12
710 
711     \brief The QGeoRouteLeg class represents a leg of a route, that is the portion
712     of a route between one waypoint and the next.
713     This is a subclass of QGeoRoute, exposing route leg specific API.
714 
715     \note QGeoRoute::routeLegs will return an empty list if called on a route leg.
716 
717     \sa QGeoRoute
718 */
719 
720 /*!
721     Constructs a route leg object.
722 */
723 
QGeoRouteLeg()724 QGeoRouteLeg::QGeoRouteLeg() : QGeoRoute()
725 {
726 
727 }
728 
729 /*!
730     Constructs a route leg object from the contents of \a other.
731 */
QGeoRouteLeg(const QGeoRouteLeg & other)732 QGeoRouteLeg::QGeoRouteLeg(const QGeoRouteLeg &other) : QGeoRoute(other)
733 {
734 
735 }
736 
737 /*!
738     Destroys this route object.
739 */
~QGeoRouteLeg()740 QGeoRouteLeg::~QGeoRouteLeg()
741 {
742 
743 }
744 
745 /*!
746     Sets the route leg index to \a idx.
747 */
setLegIndex(int idx)748 void QGeoRouteLeg::setLegIndex(int idx)
749 {
750     d()->setLegIndex(idx);
751 }
752 
753 /*!
754     Returns the index of this route leg inside the containing QGeoRoute::routeLegs list.
755     Can be used to find the next legs.
756 */
legIndex() const757 int QGeoRouteLeg::legIndex() const
758 {
759     return const_d()->legIndex();
760 }
761 
762 /*!
763     Sets the \a route that contains this route leg.
764 */
setOverallRoute(const QGeoRoute & route)765 void QGeoRouteLeg::setOverallRoute(const QGeoRoute &route)
766 {
767     d()->setContainingRoute(route);
768 }
769 
770 /*!
771     Returns the route that contains this route leg.
772 */
overallRoute() const773 QGeoRoute QGeoRouteLeg::overallRoute() const
774 {
775     return const_d()->containingRoute();
776 }
777 
QGeoRouteLeg(const QExplicitlySharedDataPointer<QGeoRoutePrivate> & dd)778 QGeoRouteLeg::QGeoRouteLeg(const QExplicitlySharedDataPointer<QGeoRoutePrivate> &dd) : QGeoRoute(dd)
779 {
780 
781 }
782 
783 QT_END_NAMESPACE
784