From 1f875de1d513c733550401ee40fa289fb2acb57e Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Wed, 24 Jul 2019 12:09:40 -0400 Subject: Initial import from github Import from http://github.com/YoshitoMomiyama/aglqtnavigation.git as of commit a6930c2, with the following minor changes: - .gitignore tweaked to remove itself - .gitreview updated Bug-AGL: SPEC-2667 Signed-off-by: Scott Murray Change-Id: I91fed0f6349bf1952e41132058929b70a2b0fe5b --- app/main.cpp | 168 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100755 app/main.cpp (limited to 'app/main.cpp') diff --git a/app/main.cpp b/app/main.cpp new file mode 100755 index 0000000..aca2f73 --- /dev/null +++ b/app/main.cpp @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2016 The Qt Company Ltd. + * + * 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. + */ + +#ifdef DESKTOP +#define USE_QTAGLEXTRAS 0 +#define USE_QLIBWINDOWMANAGER 0 +#else +#define USE_QTAGLEXTRAS 0 +#define USE_QLIBWINDOWMANAGER 1 +#endif + +#if USE_QTAGLEXTRAS +#include +#elif USE_QLIBWINDOWMANAGER +#include +#include +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "markermodel.h" +#include "dbus_server.h" +#include "dbus_server_navigationcore.h" +#include "guidance_module.h" +#include "file_operation.h" + +int main(int argc, char *argv[]) +{ + + // for dbusIF + if (!QDBusConnection::sessionBus().isConnected()) { + qWarning("Cannot connect to the D-Bus session bus.\n" + "Please check your system settings and try again.\n"); + return 1; + } + +#if USE_QTAGLEXTRAS + AGLApplication app(argc, argv); + app.setApplicationName("navigation"); + app.setupApplicationRole("navigation"); + app.load(QUrl(QStringLiteral("qrc:/navigation.qml"))); + +#elif USE_QLIBWINDOWMANAGER + QGuiApplication app(argc, argv); + QString myname = QString("navigation"); + int port = 1700; + QString token = "hello"; + QCoreApplication::setOrganizationDomain("LinuxFoundation"); + QCoreApplication::setOrganizationName("AutomotiveGradeLinux"); + QCoreApplication::setApplicationName(myname); + QCoreApplication::setApplicationVersion("0.1.0"); + QCommandLineParser parser; + parser.addPositionalArgument("port", app.translate("main", "port for binding")); + parser.addPositionalArgument("secret", app.translate("main", "secret for binding")); + parser.addHelpOption(); + parser.addVersionOption(); + parser.process(app); + QStringList positionalArguments = parser.positionalArguments(); + if (positionalArguments.length() == 2) { + port = positionalArguments.takeFirst().toInt(); + token = positionalArguments.takeFirst(); + } + fprintf(stderr, "[navigation]app_name: %s, port: %d, token: %s.\n", + myname.toStdString().c_str(), + port, + token.toStdString().c_str()); + // QLibWM + QLibWindowmanager* qwmHandler = new QLibWindowmanager(); + int res; + if((res = qwmHandler->init(port,token)) != 0){ + fprintf(stderr, "[navigation]init qlibwm err(%d)\n", res); + return -1; + } + if((res = qwmHandler->requestSurface(myname)) != 0) { + fprintf(stderr, "[navigation]request surface err(%d)\n", res); + return -1; + } + qwmHandler->set_event_handler(QLibWindowmanager::Event_SyncDraw, [qwmHandler, myname](json_object *object) { + qwmHandler->endDraw(myname); + }); + qwmHandler->set_event_handler(QLibWindowmanager::Event_Visible, [qwmHandler, myname](json_object *object) { + ; + }); + qwmHandler->set_event_handler(QLibWindowmanager::Event_Invisible, [qwmHandler, myname](json_object *object) { + ; + }); + // QLibHS + QLibHomeScreen* qhsHandler = new QLibHomeScreen(); + qhsHandler->init(port, token.toStdString().c_str()); + qhsHandler->set_event_handler(QLibHomeScreen::Event_TapShortcut, [qwmHandler, myname](json_object *object){ + json_object *appnameJ = nullptr; + if(json_object_object_get_ex(object, "application_name", &appnameJ)) + { + const char *appname = json_object_get_string(appnameJ); + if(QString::compare(myname, appname, Qt::CaseInsensitive) == 0) + { + qDebug("Surface %s got tapShortcut\n", appname); + qwmHandler->activateWindow(myname); + } + } + }); + // Load qml + QQmlApplicationEngine engine; + + MarkerModel model; + engine.rootContext()->setContextProperty("markerModel", &model); + + Guidance_Module guidance; + engine.rootContext()->setContextProperty("guidanceModule", &guidance); + + File_Operation file; + engine.rootContext()->setContextProperty("fileOperation", &file); + + engine.load(QUrl(QStringLiteral("qrc:/navigation.qml"))); + QObject *root = engine.rootObjects().first(); + QQuickWindow *window = qobject_cast(root); + QObject::connect(window, SIGNAL(frameSwapped()), qwmHandler, SLOT(slotActivateSurface())); + QObject *map = engine.rootObjects().first()->findChild("map"); + DBus_Server dbus(map); + dbus_server_navigationcore dbus_navigationcore(map); + +#else // for only libwindowmanager + QGuiApplication app(argc, argv); + app.setApplicationName("navigation"); + + // Load qml + QQmlApplicationEngine engine; + + MarkerModel model; + engine.rootContext()->setContextProperty("markerModel", &model); + + Guidance_Module guidance; + engine.rootContext()->setContextProperty("guidanceModule", &guidance); + + File_Operation file; + engine.rootContext()->setContextProperty("fileOperation", &file); + + engine.load(QUrl(QStringLiteral("qrc:/navigation.qml"))); + QObject *map = engine.rootObjects().first()->findChild("map"); + DBus_Server dbus(map); + dbus_server_navigationcore dbus_navigationcore(map); + +#endif + + return app.exec(); +} + -- cgit 1.2.3-korg