diff options
Diffstat (limited to 'src/aglextras/hmi/aglapplication.cpp')
-rw-r--r-- | src/aglextras/hmi/aglapplication.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/aglextras/hmi/aglapplication.cpp b/src/aglextras/hmi/aglapplication.cpp new file mode 100644 index 0000000..295c017 --- /dev/null +++ b/src/aglextras/hmi/aglapplication.cpp @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2017 TOYOTA MOTOR CORPORATION + * Copyright (C) 2017 The Qt Company Ltd. + * Copyright (c) 2017 Panasonic Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "aglapplication.h" +#include "aglapplication_p.h" +#include "aglwindow.h" +#include "aglwindow_p.h" + +#include <QtCore/QCommandLineParser> +#include <QtCore/QUrlQuery> +#include <QtGui/QGuiApplication> +#include <QtQml/QQmlContext> +#include <QtQml/QQmlApplicationEngine> + +QT_BEGIN_NAMESPACE + +AGLApplicationPrivate::AGLApplicationPrivate (AGLApplication*) + : binding_address(new QUrl) +{ + ; +} + +AGLApplicationPrivate::~AGLApplicationPrivate (void) +{ + ; +} + +AGLApplication::AGLApplication (int& argc, char** argv) + : QGuiApplication(argc, argv), + d_ptr(new AGLApplicationPrivate(this)) +{ + setApplicationVersion(QStringLiteral("4.99.5")); + setOrganizationDomain(QStringLiteral("automotivelinux.org")); + setOrganizationName(QStringLiteral("AutomotiveGradeLinux")); + + QCommandLineParser parser; + parser.addPositionalArgument(QLatin1String("port"), + translate("main", "port for binding")); + parser.addPositionalArgument(QLatin1String("secret"), + translate("main", "secret for binding")); + parser.addHelpOption(); + parser.addVersionOption(); + parser.process(*this); + QStringList positionalArguments = parser.positionalArguments(); + + if (positionalArguments.length() < 2) { + return; + } + + d_ptr->port = positionalArguments.takeFirst().toInt(); + d_ptr->secret = positionalArguments.takeFirst(); + + d_ptr->binding_address->setScheme(QStringLiteral("ws")); + d_ptr->binding_address->setHost(QStringLiteral("localhost")); + d_ptr->binding_address->setPort(d_ptr->port); + d_ptr->binding_address->setPath(QStringLiteral("/api")); + + QUrlQuery query; + query.addQueryItem(QStringLiteral("token"), d_ptr->secret); + d_ptr->binding_address->setQuery(query); + + d_ptr->engine = new QQmlApplicationEngine(); + if (!d_ptr->engine) { + qDebug("Cannot initialize QML Engine"); + exit(EXIT_FAILURE); + } + + d_ptr->engine->rootContext()->setContextProperty(QStringLiteral("bindingAddress"), + *d_ptr->binding_address); +} + +void +AGLApplication::load (const QUrl &url) +{ + d_ptr->engine->load(url); +} + +void +AGLApplication::load (const QString &filePath) +{ + d_ptr->engine->load(filePath); +} + +int +AGLApplication::exec (void) +{ + if (d_ptr->window) { + d_ptr->window->attach(d_ptr->engine); + } + return QGuiApplication::exec(); +} + +void AGLApplication::setupApplicationRole (const QString &role) +{ + d_ptr->window = new AGLWindow(role, d_ptr->port, d_ptr->secret); +} + +QT_END_NAMESPACE |