File indexing completed on 2024-05-12 17:24:21

0001 // SPDX-FileCopyrightText: 2022 Felipe Kinoshita <kinofhek@gmail.com>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003 
0004 #include <QtGlobal>
0005 #ifdef Q_OS_ANDROID
0006 #include <QGuiApplication>
0007 #else
0008 #include <QApplication>
0009 #endif
0010 #include <QIcon>
0011 #include <QQmlApplicationEngine>
0012 #include <QUrl>
0013 #include <QtQml>
0014 #include <QQuickWindow>
0015 #include <QQuickStyle>
0016 
0017 #include <KAboutData>
0018 #include <KLocalizedContext>
0019 #include <KLocalizedString>
0020 #ifdef HAVE_KDBUSADDONS
0021 #include <KDBusService>
0022 #endif
0023 
0024 constexpr auto APPLICATION_ID = "org.kde.vail";
0025 
0026 #include "version-vail.h"
0027 #include "app.h"
0028 #include "translator.h"
0029 
0030 #ifdef Q_OS_ANDROID
0031 Q_DECL_EXPORT
0032 #endif
0033 int main(int argc, char *argv[])
0034 {
0035 #ifdef Q_OS_ANDROID
0036     QGuiApplication app(argc, argv);
0037     QQuickStyle::setStyle(QStringLiteral("org.kde.breeze"));
0038 #else
0039     QApplication app(argc, argv);
0040     // Default to org.kde.desktop style unless the user forces another style
0041     if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")) {
0042         QQuickStyle::setStyle(QStringLiteral("org.kde.desktop"));
0043     }
0044 #endif
0045 
0046 #ifdef Q_OS_WINDOWS
0047     if (AttachConsole(ATTACH_PARENT_PROCESS)) {
0048         freopen("CONOUT$", "w", stdout);
0049         freopen("CONOUT$", "w", stderr);
0050     }
0051 
0052     QApplication::setStyle(QStringLiteral("breeze"));
0053     auto font = app.font();
0054     font.setPointSize(10);
0055     app.setFont(font);
0056 #endif
0057 
0058     KLocalizedString::setApplicationDomain("vail");
0059 
0060     QCoreApplication::setOrganizationName(QStringLiteral("KDE"));
0061 
0062     KAboutData aboutData(QStringLiteral("vail"),
0063                          i18nc("@title", "Vail"),
0064                          QStringLiteral(VAIL_VERSION_STRING),
0065                          i18n("Communicate using Morse"),
0066                          KAboutLicense::GPL,
0067                          i18n("© 2022"));
0068     aboutData.addAuthor(i18nc("@info:credit", "Felipe Kinoshita"), i18nc("@info:credit", "Author"), QStringLiteral("kinofhek@gmail.com"), QStringLiteral("https://fhek.gitlab.io"));
0069     aboutData.setTranslator(i18nc("NAME OF TRANSLATORS", "Your names"), i18nc("EMAIL OF TRANSLATORS", "Your emails"));
0070     aboutData.setBugAddress("https://invent.kde.org/fhek/vail/-/issues/new");
0071     KAboutData::setApplicationData(aboutData);
0072     QGuiApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("org.kde.vail")));
0073 
0074     QQmlApplicationEngine engine;
0075 
0076     qmlRegisterSingletonType(APPLICATION_ID, 1, 0, "About", [](QQmlEngine *engine, QJSEngine *) -> QJSValue {
0077         return engine->toScriptValue(KAboutData::applicationData());
0078     });
0079 
0080     App application;
0081     qmlRegisterSingletonInstance(APPLICATION_ID, 1, 0, "App", &application);
0082 
0083     Translator translator;
0084     qmlRegisterSingletonInstance(APPLICATION_ID, 1, 0, "Translator", &translator);
0085 
0086     engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
0087     engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
0088 
0089     if (engine.rootObjects().isEmpty()) {
0090         return -1;
0091     }
0092 
0093 #ifdef HAVE_KDBUSADDONS
0094     KDBusService service(KDBusService::Unique);
0095 #endif
0096 
0097     // Restore window size and position
0098     const auto rootObjects = engine.rootObjects();
0099     for (auto obj : rootObjects) {
0100         auto view = qobject_cast<QQuickWindow *>(obj);
0101         if (view) {
0102             if (view->isVisible()) {
0103                 application.restoreWindowGeometry(view);
0104             }
0105             break;
0106         }
0107     }
0108 
0109     return app.exec();
0110 }