diff --git a/src/plugins/runner/yours/CMakeLists.txt b/src/plugins/runner/yours/CMakeLists.txt --- a/src/plugins/runner/yours/CMakeLists.txt +++ b/src/plugins/runner/yours/CMakeLists.txt @@ -7,4 +7,8 @@ set( yours_SRCS YoursRunner.cpp YoursPlugin.cpp ) +set( yours_UI YoursConfigWidget.ui ) + +qt_wrap_ui( yours_SRCS ${yours_UI} ) + marble_add_plugin( YoursPlugin ${yours_SRCS} ) diff --git a/src/plugins/runner/yours/YoursConfigWidget.ui b/src/plugins/runner/yours/YoursConfigWidget.ui new file mode 100644 --- /dev/null +++ b/src/plugins/runner/yours/YoursConfigWidget.ui @@ -0,0 +1,51 @@ + + + YoursConfigWidget + + + + 0 + 0 + 273 + 196 + + + + + + + Transport: + + + + + + + + + + Method + + + + + + Fastest + + + + + + + Shortest + + + + + + + + + + + diff --git a/src/plugins/runner/yours/YoursPlugin.h b/src/plugins/runner/yours/YoursPlugin.h --- a/src/plugins/runner/yours/YoursPlugin.h +++ b/src/plugins/runner/yours/YoursPlugin.h @@ -6,6 +6,7 @@ // the source code. // // Copyright 2010 Dennis Nienhüser +// Copyright 2016 Piotr Wójcik // @@ -42,7 +43,11 @@ virtual RoutingRunner *newRunner() const; + ConfigWidget* configWidget(); + virtual bool supportsTemplate(RoutingProfilesModel::ProfileTemplate profileTemplate) const; + + QHash< QString, QVariant > templateSettings(RoutingProfilesModel::ProfileTemplate profileTemplate) const; }; } diff --git a/src/plugins/runner/yours/YoursPlugin.cpp b/src/plugins/runner/yours/YoursPlugin.cpp --- a/src/plugins/runner/yours/YoursPlugin.cpp +++ b/src/plugins/runner/yours/YoursPlugin.cpp @@ -6,11 +6,14 @@ // the source code. // // Copyright 2010 Dennis Nienhüser +// Copyright 2016 Piotr Wójcik // #include "YoursPlugin.h" #include "YoursRunner.h" +#include "ui_YoursConfigWidget.h" + namespace Marble { @@ -39,7 +42,7 @@ QString YoursPlugin::version() const { - return QStringLiteral("1.0"); + return QStringLiteral("1.1"); } QString YoursPlugin::description() const @@ -49,23 +52,114 @@ QString YoursPlugin::copyrightYears() const { - return QStringLiteral("2010"); + return QStringLiteral("2010, 2016"); } QVector YoursPlugin::pluginAuthors() const { return QVector() - << PluginAuthor(QStringLiteral("Dennis Nienhüser"), QStringLiteral("nienhueser@kde.org")); + << PluginAuthor(QStringLiteral("Dennis Nienhüser"), QStringLiteral("nienhueser@kde.org")) + << PluginAuthor(QStringLiteral("Piotr Wójcik"), QStringLiteral("chocimier@tlen.pl")); } RoutingRunner *YoursPlugin::newRunner() const { return new YoursRunner; } +class YoursConfigWidget : public RoutingRunnerPlugin::ConfigWidget +{ +public: + YoursConfigWidget() + : RoutingRunnerPlugin::ConfigWidget() + { + ui_configWidget = new Ui::YoursConfigWidget; + ui_configWidget->setupUi( this ); + //TODO: read from profiles.xml + ui_configWidget->transport->addItem( tr( "Foot" ), "foot" ); + ui_configWidget->transport->addItem( tr( "Bicycle" ), "bicycle" ); + ui_configWidget->transport->addItem( tr( "Motorcar" ), "motorcar" ); + } + virtual ~YoursConfigWidget() + { + delete ui_configWidget; + } + virtual void loadSettings( const QHash &settings_ ) + { + QHash settings = settings_; + + // Check if all fields are filled and fill them with default values. + if (!settings.contains(QStringLiteral("transport"))) { + settings.insert(QStringLiteral("transport"), QStringLiteral("motorcar")); + } + ui_configWidget->transport->setCurrentIndex( + ui_configWidget->transport->findData(settings.value(QStringLiteral("transport")).toString())); + if (settings.value(QStringLiteral("method")).toString() == QLatin1String("shortest")) { + ui_configWidget->shortest->setChecked( true ); + } else { + ui_configWidget->fastest->setChecked( true ); + } + } + + virtual QHash settings() const + { + QHash settings; + settings.insert(QStringLiteral("transport"), + ui_configWidget->transport->itemData( ui_configWidget->transport->currentIndex() ) ); + + if ( ui_configWidget->shortest->isChecked() ) { + settings.insert(QStringLiteral("method"), QStringLiteral("shortest")); + } else { + settings.insert(QStringLiteral("method"), QStringLiteral("fastest")); + } + return settings; + } +private: + Ui::YoursConfigWidget *ui_configWidget; +}; + +RoutingRunnerPlugin::ConfigWidget *YoursPlugin::configWidget() +{ + return new YoursConfigWidget(); +} + bool YoursPlugin::supportsTemplate( RoutingProfilesModel::ProfileTemplate profileTemplate ) const { - return profileTemplate == RoutingProfilesModel::CarFastestTemplate; + QSet availableTemplates; + availableTemplates.insert( RoutingProfilesModel::CarFastestTemplate ); + availableTemplates.insert( RoutingProfilesModel::CarShortestTemplate ); + availableTemplates.insert( RoutingProfilesModel::BicycleTemplate ); + availableTemplates.insert( RoutingProfilesModel::PedestrianTemplate ); + return availableTemplates.contains( profileTemplate ); +} + +QHash< QString, QVariant > YoursPlugin::templateSettings(RoutingProfilesModel::ProfileTemplate profileTemplate) const +{ + QHash result; + switch ( profileTemplate ) { + case RoutingProfilesModel::CarFastestTemplate: + result.insert(QStringLiteral("transport"), QStringLiteral("motorcar")); + result.insert(QStringLiteral("method"), QStringLiteral("fastest")); + break; + case RoutingProfilesModel::CarShortestTemplate: + result.insert(QStringLiteral("transport"), QStringLiteral("motorcar")); + result.insert(QStringLiteral("method"), QStringLiteral("shortest")); + break; + case RoutingProfilesModel::CarEcologicalTemplate: + break; + case RoutingProfilesModel::BicycleTemplate: + result.insert(QStringLiteral("transport"), QStringLiteral("bicycle")); + result.insert(QStringLiteral("method"), QStringLiteral("shortest")); + break; + case RoutingProfilesModel::PedestrianTemplate: + result.insert(QStringLiteral("transport"), QStringLiteral("foot")); + result.insert(QStringLiteral("method"), QStringLiteral("shortest")); + break; + case RoutingProfilesModel::LastTemplate: + Q_ASSERT( false ); + break; + } + return result; } } diff --git a/src/plugins/runner/yours/YoursRunner.h b/src/plugins/runner/yours/YoursRunner.h --- a/src/plugins/runner/yours/YoursRunner.h +++ b/src/plugins/runner/yours/YoursRunner.h @@ -6,6 +6,7 @@ // the source code. // // Copyright 2010 Dennis Nienhüser +// Copyright 2016 Piotr Wójcik // diff --git a/src/plugins/runner/yours/YoursRunner.cpp b/src/plugins/runner/yours/YoursRunner.cpp --- a/src/plugins/runner/yours/YoursRunner.cpp +++ b/src/plugins/runner/yours/YoursRunner.cpp @@ -6,6 +6,7 @@ // the source code. // // Copyright 2010 Dennis Nienhüser +// Copyright 2016 Piotr Wójcik // #include "YoursRunner.h" @@ -61,11 +62,24 @@ //QString base = "http://nroets.dev.openstreetmap.org/demo/gosmore.php"; QString args = "?flat=%1&flon=%2&tlat=%3&tlon=%4"; args = args.arg( fLat, 0, 'f', 6 ).arg( fLon, 0, 'f', 6 ).arg( tLat, 0, 'f', 6 ).arg( tLon, 0, 'f', 6 ); - QString preferences = "&v=motorcar&fast=1&layer=mapnik"; + + QHash settings = route->routingProfile().pluginSettings()[QStringLiteral("yours")]; + QString transport = settings[QStringLiteral("transport")].toString(); + QString fast; + + if (settings[QStringLiteral("method")] == QLatin1String("shortest")) { + fast = "0"; + } else { + fast = "1"; + } + + QString preferences = "&v=%1&fast=%2&layer=mapnik;"; + preferences = preferences.arg(transport).arg(fast); QString request = base + args + preferences; // mDebug() << "GET: " << request; m_request = QNetworkRequest( QUrl( request ) ); + m_request.setRawHeader( "X-Yours-client", "Marble" ); QEventLoop eventLoop;