File indexing completed on 2024-05-12 17:22:45

0001 // SPDX-FileCopyrightText: 2023 Felipe Kinoshita <kinofhek@gmail.com>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003 
0004 #include <QApplication>
0005 #include <QIcon>
0006 #include <QQmlApplicationEngine>
0007 #include <QQuickStyle>
0008 #include <QQuickWindow>
0009 #include <QtQml>
0010 #include <QUrl>
0011 
0012 #include <KAboutData>
0013 #include <KDBusService>
0014 #include <KLocalizedContext>
0015 #include <KLocalizedString>
0016 
0017 constexpr auto APPLICATION_ID = "org.kde.notae";
0018 
0019 #include "about.h"
0020 #include "version-notae.h"
0021 #include "config.h"
0022 #include "app.h"
0023 #include "documenthandler.h"
0024 
0025 Q_DECL_EXPORT int main(int argc, char *argv[])
0026 {
0027     QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
0028     QApplication app(argc, argv);
0029     QQuickStyle::setStyle(QStringLiteral("org.kde.desktop"));
0030 
0031     KLocalizedString::setApplicationDomain("notae");
0032 
0033     QCoreApplication::setOrganizationName(QStringLiteral("KDE"));
0034     QCoreApplication::setApplicationName(QStringLiteral("notae"));
0035 
0036     KAboutData aboutData(
0037                          // The program name used internally.
0038                          QStringLiteral("notae"),
0039                          // A displayable program name string.
0040                          i18nc("@title", "Notae"),
0041                          // The program version string.
0042                          QStringLiteral(NOTAE_VERSION_STRING),
0043                          // Short description of what the app does.
0044                          i18n("Take notes easily"),
0045                          // The license this code is released under.
0046                          KAboutLicense::GPL,
0047                          // Copyright Statement.
0048                          i18n("© Felipe Kinoshita 2023"));
0049     aboutData.addAuthor(i18nc("@info:credit", "Felipe Kinoshita"), i18nc("@info:credit", "Author"), QStringLiteral("kinofhek@gmail.com"), QStringLiteral("https://fhek.gitlab.io"));
0050     aboutData.setBugAddress("https://invent.kde.org/fhek/notae/-/issues/new");
0051     KAboutData::setApplicationData(aboutData);
0052     QGuiApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("org.kde.notae")));
0053 
0054     QQmlApplicationEngine engine;
0055 
0056     auto config = Config::self();
0057     AboutType about;
0058     App application;
0059 
0060     qmlRegisterSingletonInstance(APPLICATION_ID, 1, 0, "Config", config);
0061     qmlRegisterSingletonInstance(APPLICATION_ID, 1, 0, "AboutType", &about);
0062     qmlRegisterSingletonInstance(APPLICATION_ID, 1, 0, "App", &application);
0063 
0064     qmlRegisterType<DocumentHandler>(APPLICATION_ID, 1, 0, "DocumentHandler");
0065 
0066     engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
0067     KLocalizedString::setApplicationDomain("notae");
0068     engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
0069 
0070     if (engine.rootObjects().isEmpty()) {
0071         return -1;
0072     }
0073 
0074     KDBusService service(KDBusService::Unique);
0075 
0076     // Restore window size and position
0077     const auto rootObjects = engine.rootObjects();
0078     for (auto obj : rootObjects) {
0079         auto view = qobject_cast<QQuickWindow *>(obj);
0080         if (view) {
0081             if (view->isVisible()) {
0082                 application.restoreWindowGeometry(view);
0083             }
0084             break;
0085         }
0086     }
0087 
0088     return app.exec();
0089 }