summaryrefslogtreecommitdiff
path: root/src/plugins/geoservices/nokia/qgeoroutexmlparser.h
diff options
context:
space:
mode:
authorAaron McCarthy <aaron.mccarthy@jollamobile.com>2014-02-19 14:52:07 +1000
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-14 12:30:09 +0100
commitd2628aeb6ed1ab30d1a825122dc80cfebb5093d2 (patch)
tree00cec128c5d264346c871ba9bfcdc9a920dfa52b /src/plugins/geoservices/nokia/qgeoroutexmlparser.h
parent3f4a3acab163fa6675a1513ab1fccdbda7723dd6 (diff)
downloadqtlocation-d2628aeb6ed1ab30d1a825122dc80cfebb5093d2.tar.gz
Parse Nokia route response in helper thread.
Complex and really long routes can take multiple seconds to parse. Use a helper thread to parse route responses to prevent blocking the main thread. Change-Id: I4130510ff15752427f31b429e53d2ab87fa1b84a Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'src/plugins/geoservices/nokia/qgeoroutexmlparser.h')
-rw-r--r--src/plugins/geoservices/nokia/qgeoroutexmlparser.h34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/plugins/geoservices/nokia/qgeoroutexmlparser.h b/src/plugins/geoservices/nokia/qgeoroutexmlparser.h
index 466bca5e..7e6307e7 100644
--- a/src/plugins/geoservices/nokia/qgeoroutexmlparser.h
+++ b/src/plugins/geoservices/nokia/qgeoroutexmlparser.h
@@ -49,16 +49,17 @@
#ifndef QROUTEXMLPARSER_H
#define QROUTEXMLPARSER_H
-#include <QList>
-#include <QString>
-#include <QScopedPointer>
+#include <QtCore/QObject>
+#include <QtCore/QRunnable>
+#include <QtCore/QString>
+#include <QtCore/QList>
-#include <qgeoroutesegment.h>
-#include <qgeorouterequest.h>
-#include <qgeomaneuver.h>
+#include <QtLocation/QGeoRouteRequest>
+#include <QtLocation/QGeoRouteSegment>
+#include <QtLocation/QGeoManeuver>
QT_BEGIN_NAMESPACE
-class QIODevice;
+
class QXmlStreamReader;
class QGeoRoute;
class QGeoCoordinate;
@@ -92,15 +93,20 @@ public:
int baseTime;
};
-class QGeoRouteXmlParser
+class QGeoRouteXmlParser : public QObject, public QRunnable
{
+ Q_OBJECT
+
public:
QGeoRouteXmlParser(const QGeoRouteRequest &request);
~QGeoRouteXmlParser();
- bool parse(QIODevice *source);
- QList<QGeoRoute> results() const;
- QString errorString() const;
+ void parse(const QByteArray &data);
+ void run();
+
+signals:
+ void results(const QList<QGeoRoute> &routes);
+ void error(const QString &errorString);
private:
bool parseRootElement();
@@ -119,12 +125,14 @@ private:
bool parseDynamicSpeedInfo(QGeoDynamicSpeedInfoContainer &speedInfo);
QGeoRouteRequest m_request;
- QScopedPointer<QXmlStreamReader> m_reader;
+ QByteArray m_data;
+ QXmlStreamReader *m_reader;
+
QList<QGeoRoute> m_results;
- QString m_errorString;
QList<QGeoManeuverContainer> m_maneuvers;
QList<QGeoRouteSegmentContainer> m_segments;
};
QT_END_NAMESPACE
+
#endif