File indexing completed on 2024-04-14 03:48:03

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2008 Henry de Valence <hdevalence@gmail.com>
0004 // SPDX-FileCopyrightText: 2010 Dennis Nienhüser <nienhueser@kde.org>
0005 // SPDX-FileCopyrightText: 2010-2013 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
0006 // SPDX-FileCopyrightText: 2011 Thibaut Gridel <tgridel@free.fr>
0007 
0008 #ifndef MARBLE_ROUTINGRUNNERMANAGER_H
0009 #define MARBLE_ROUTINGRUNNERMANAGER_H
0010 
0011 #include <QObject>
0012 #include <QVector>
0013 
0014 #include "marble_export.h"
0015 
0016 namespace Marble
0017 {
0018 
0019 class GeoDataDocument;
0020 class MarbleModel;
0021 class RouteRequest;
0022 class RoutingTask;
0023 
0024 class MARBLE_EXPORT RoutingRunnerManager : public QObject
0025 {
0026     Q_OBJECT
0027 
0028 public:
0029     /**
0030      * Constructor.
0031      * @param pluginManager The plugin manager that gives access to RunnerPlugins
0032      * @param parent Optional parent object
0033      */
0034     explicit RoutingRunnerManager( const MarbleModel *marbleModel, QObject *parent = nullptr );
0035 
0036     ~RoutingRunnerManager() override;
0037 
0038     /**
0039      * Download routes traversing the stopover points in the given route request
0040      * @see retrieveRoute is asynchronous with results returned using the
0041      * @see routeRetrieved signal.
0042      * @see searchRoute is blocking.
0043      * @see routingFinished signal indicates all runners are finished.
0044      */
0045     void retrieveRoute( const RouteRequest *request );
0046     QVector<GeoDataDocument *> searchRoute( const RouteRequest *request, int timeout = 30000 );
0047 
0048 Q_SIGNALS:
0049     /**
0050      * A route was retrieved
0051      */
0052     void routeRetrieved( GeoDataDocument *route );
0053 
0054     /**
0055      * Emitted whenever all runners are finished for the query
0056      */
0057     void routingFinished();
0058 
0059 private:
0060     Q_PRIVATE_SLOT( d, void addRoutingResult( GeoDataDocument *route ) )
0061     Q_PRIVATE_SLOT( d, void cleanupRoutingTask( RoutingTask *task ) )
0062 
0063     class Private;
0064     friend class Private;
0065     Private *const d;
0066 };
0067 
0068 }
0069 
0070 #endif