File indexing completed on 2024-12-01 13:51:08

0001 /**
0002  * SPDX-FileCopyrightText: 2019 Nicolas Fella <nicolas.fella@gmx.de>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #include "androidutils.h"
0008 #include "controller.h"
0009 #include "formatter.h"
0010 #include "ktripsettings.h"
0011 #include "locationcachemodel.h"
0012 #include "version.h"
0013 
0014 #include <QCommandLineOption>
0015 #include <QCommandLineParser>
0016 #include <QIcon>
0017 #include <QImage>
0018 #include <QQmlApplicationEngine>
0019 #include <QQmlContext>
0020 #include <QQuickStyle>
0021 
0022 #ifdef Q_OS_ANDROID
0023 #include <QGuiApplication>
0024 #else
0025 #include <QApplication>
0026 #endif
0027 
0028 #include <KAboutData>
0029 #include <KLocalizedContext>
0030 #include <KLocalizedString>
0031 #include <KPublicTransport/LocationRequest>
0032 #include <KPublicTransport/Manager>
0033 
0034 #ifdef Q_OS_ANDROID
0035 Q_DECL_EXPORT
0036 #endif
0037 int main(int argc, char *argv[])
0038 {
0039     QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
0040     QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
0041 
0042     QCommandLineParser parser;
0043 #ifdef Q_OS_ANDROID
0044     QGuiApplication app(argc, argv);
0045     QQuickStyle::setStyle(QStringLiteral("org.kde.breeze"));
0046 #else
0047     QIcon::setFallbackThemeName(QStringLiteral("breeze"));
0048     QApplication app(argc, argv);
0049     // Default to org.kde.desktop style unless the user forces another style
0050     if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")) {
0051         QQuickStyle::setStyle(QStringLiteral("org.kde.desktop"));
0052     }
0053 #endif
0054 
0055 #ifdef Q_OS_WINDOWS
0056     QApplication::setStyle(QStringLiteral("breeze"));
0057 #endif
0058 
0059     QCoreApplication::setApplicationName(QStringLiteral("ktrip"));
0060     QCoreApplication::setOrganizationName(QStringLiteral("KDE"));
0061     QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
0062     QCoreApplication::setApplicationVersion(QStringLiteral(KTRIP_VERSION_STRING));
0063 
0064     QGuiApplication::setApplicationDisplayName(QStringLiteral("KTrip"));
0065     QGuiApplication::setDesktopFileName(QStringLiteral("org.kde.ktrip"));
0066 
0067     KLocalizedString::setApplicationDomain("ktrip");
0068     parser.addVersionOption();
0069     parser.process(app);
0070 
0071     QQmlApplicationEngine engine;
0072     engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
0073 
0074     qRegisterMetaType<KPublicTransport::LocationRequest>();
0075 
0076     qmlRegisterType<LocationCacheModel>("org.kde.ktrip", 1, 0, "LocationCacheModel");
0077 
0078     KPublicTransport::Manager manager;
0079     manager.setAllowInsecureBackends(true);
0080     manager.setBackendsEnabledByDefault(false);
0081 
0082     qmlRegisterSingletonInstance<KPublicTransport::Manager>("org.kde.ktrip", 1, 0, "Manager", &manager);
0083 
0084     KTripSettings settings;
0085     manager.setEnabledBackends(settings.enabledBackends());
0086 
0087     QObject::connect(&manager, &KPublicTransport::Manager::configurationChanged, &settings, [&settings, &manager] {
0088         settings.setEnabledBackends(manager.enabledBackends());
0089         settings.save();
0090     });
0091 
0092     qmlRegisterSingletonInstance<KTripSettings>("org.kde.ktrip", 1, 0, "Settings", &settings);
0093 
0094     KAboutData about(QStringLiteral("ktrip"),
0095                      i18n("KTrip"),
0096                      QStringLiteral(KTRIP_VERSION_STRING),
0097                      i18n("Public transport assistant"),
0098                      KAboutLicense::GPL,
0099                      i18n("© 2019 KDE Community"));
0100     about.addAuthor(i18n("Nicolas Fella"), QString(), QStringLiteral("nicolas.fella@gmx.de"));
0101     about.setBugAddress("https://invent.kde.org/utilities/ktrip/-/issues");
0102     KAboutData::setApplicationData(about);
0103 
0104     Formatter formatter;
0105     qmlRegisterSingletonInstance<Formatter>("org.kde.ktrip", 1, 0, "Formatter", &formatter);
0106 
0107 #ifdef Q_OS_ANDROID
0108     engine.rootContext()->setContextProperty(QStringLiteral("_isAndroid"), true);
0109     engine.rootContext()->setContextProperty(QStringLiteral("_androidUtils"), QVariant::fromValue(AndroidUtils::instance()));
0110 #else
0111     engine.rootContext()->setContextProperty(QStringLiteral("_isAndroid"), false);
0112 #endif
0113 
0114     Controller controller;
0115     qmlRegisterSingletonInstance<Controller>("org.kde.ktrip", 1, 0, "Controller", &controller);
0116 
0117     engine.loadFromModule("org.kde.ktrip", "Main");
0118 
0119     return app.exec();
0120 }