2 * Copyright (C) 2016 The Qt Company Ltd.
\r
4 * Licensed under the Apache License, Version 2.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
17 #define USE_QTAGLEXTRAS 0
\r
18 #define USE_QLIBWINDOWMANAGER 1
\r
21 #include <QtAGLExtras/AGLApplication>
\r
22 #elif USE_QLIBWINDOWMANAGER
\r
23 #include <qlibwindowmanager.h>
\r
24 #include <qlibhomescreen.h>
\r
27 #include <QtCore/QDebug>
\r
28 #include <QtCore/QCommandLineParser>
\r
29 #include <QtCore/QUrlQuery>
\r
30 #include <QtCore/QSettings>
\r
31 #include <QtGui/QGuiApplication>
\r
32 #include <QtQml/QQmlApplicationEngine>
\r
33 #include <QtQml/QQmlContext>
\r
34 #include <QtQuickControls2/QQuickStyle>
\r
35 #include <QQuickWindow>
\r
36 #include <QtDBus/QDBusConnection>
\r
37 #include "markermodel.h"
\r
38 #include "dbus_server.h"
\r
39 #include "guidance_module.h"
\r
40 #include "file_operation.h"
\r
42 int main(int argc, char *argv[])
\r
46 QString pathBase = "org.agl.";
\r
47 QString objBase = "/org/agl/";
\r
48 QString serverName = "naviapi";
\r
50 if (!QDBusConnection::sessionBus().isConnected()) {
\r
51 qWarning("Cannot connect to the D-Bus session bus.\n"
\r
52 "Please check your system settings and try again.\n");
\r
57 AGLApplication app(argc, argv);
\r
58 app.setApplicationName("navigation");
\r
59 app.setupApplicationRole("navigation");
\r
60 app.load(QUrl(QStringLiteral("qrc:/navigation.qml")));
\r
62 #elif USE_QLIBWINDOWMANAGER
\r
63 QGuiApplication app(argc, argv);
\r
64 QString myname = QString("navigation");
\r
66 QString token = "hello";
\r
67 QCoreApplication::setOrganizationDomain("LinuxFoundation");
\r
68 QCoreApplication::setOrganizationName("AutomotiveGradeLinux");
\r
69 QCoreApplication::setApplicationName(myname);
\r
70 QCoreApplication::setApplicationVersion("0.1.0");
\r
71 QCommandLineParser parser;
\r
72 parser.addPositionalArgument("port", app.translate("main", "port for binding"));
\r
73 parser.addPositionalArgument("secret", app.translate("main", "secret for binding"));
\r
74 parser.addHelpOption();
\r
75 parser.addVersionOption();
\r
76 parser.process(app);
\r
77 QStringList positionalArguments = parser.positionalArguments();
\r
78 if (positionalArguments.length() == 2) {
\r
79 port = positionalArguments.takeFirst().toInt();
\r
80 token = positionalArguments.takeFirst();
\r
82 fprintf(stderr, "[navigation]app_name: %s, port: %d, token: %s.\n",
\r
83 myname.toStdString().c_str(),
\r
85 token.toStdString().c_str());
\r
87 QLibWindowmanager* qwmHandler = new QLibWindowmanager();
\r
89 if((res = qwmHandler->init(port,token)) != 0){
\r
90 fprintf(stderr, "[navigation]init qlibwm err(%d)\n", res);
\r
93 if((res = qwmHandler->requestSurface(myname)) != 0) {
\r
94 fprintf(stderr, "[navigation]request surface err(%d)\n", res);
\r
97 qwmHandler->set_event_handler(QLibWindowmanager::Event_SyncDraw, [qwmHandler, myname](json_object *object) {
\r
98 qwmHandler->endDraw(myname);
\r
100 qwmHandler->set_event_handler(QLibWindowmanager::Event_Visible, [qwmHandler, myname](json_object *object) {
\r
103 qwmHandler->set_event_handler(QLibWindowmanager::Event_Invisible, [qwmHandler, myname](json_object *object) {
\r
107 QLibHomeScreen* qhsHandler = new QLibHomeScreen();
\r
108 qhsHandler->init(port, token.toStdString().c_str());
\r
109 qhsHandler->set_event_handler(QLibHomeScreen::Event_TapShortcut, [qwmHandler, myname](json_object *object){
\r
110 json_object *appnameJ = nullptr;
\r
111 if(json_object_object_get_ex(object, "application_name", &appnameJ))
\r
113 const char *appname = json_object_get_string(appnameJ);
\r
114 if(QString::compare(myname, appname, Qt::CaseInsensitive) == 0)
\r
116 qDebug("Surface %s got tapShortcut\n", appname);
\r
117 json_object *para, *area;
\r
118 json_object_object_get_ex(object, "parameter", ¶);
\r
119 json_object_object_get_ex(para, "area", &area);
\r
120 const char *displayArea = json_object_get_string(area);
\r
121 qDebug("Surface %s got tapShortcut area\n", displayArea);
\r
122 qwmHandler->activateWindow(myname, QString(QLatin1String(displayArea)));
\r
127 QQmlApplicationEngine engine;
\r
130 engine.rootContext()->setContextProperty("markerModel", &model);
\r
132 Guidance_Module guidance;
\r
133 engine.rootContext()->setContextProperty("guidanceModule", &guidance);
\r
135 File_Operation file;
\r
136 engine.rootContext()->setContextProperty("fileOperation", &file);
\r
138 engine.load(QUrl(QStringLiteral("qrc:/navigation.qml")));
\r
139 QObject *root = engine.rootObjects().first();
\r
140 QQuickWindow *window = qobject_cast<QQuickWindow *>(root);
\r
141 QObject::connect(window, SIGNAL(frameSwapped()), qwmHandler, SLOT(slotActivateSurface()));
\r
142 QObject *map = engine.rootObjects().first()->findChild<QObject*>("map");
\r
143 DBus_Server dbus(pathBase,objBase,serverName,map);
\r
145 #else // for only libwindowmanager
\r
146 QGuiApplication app(argc, argv);
\r
147 app.setApplicationName("navigation");
\r
150 QQmlApplicationEngine engine;
\r
153 engine.rootContext()->setContextProperty("markerModel", &model);
\r
155 Guidance_Module guidance;
\r
156 engine.rootContext()->setContextProperty("guidanceModule", &guidance);
\r
158 File_Operation file;
\r
159 engine.rootContext()->setContextProperty("fileOperation", &file);
\r
161 engine.load(QUrl(QStringLiteral("qrc:/navigation.qml")));
\r
162 QObject *map = engine.rootObjects().first()->findChild<QObject*>("map");
\r
163 DBus_Server dbus(pathBase,objBase,serverName,map);
\r