File indexing completed on 2024-05-19 05:57:13
0001 /* 0002 * SPDX-FileCopyrightText: 2019 Jonah Brüchert <jbb@kaidan.im> 0003 * SPDX-FileCopyrightText: 2019 Simon Schmeisser <s.schmeisser@gmx.net> 0004 * 0005 * SPDX-License-Identifier: GPL-3.0-or-later 0006 */ 0007 0008 #include <qglobal.h> 0009 #ifndef Q_OS_ANDROID 0010 #include <QApplication> 0011 #else 0012 #include <QGuiApplication> 0013 #endif 0014 #include <QCommandLineParser> 0015 #include <QIcon> 0016 #include <QQmlApplicationEngine> 0017 #include <QUrl> 0018 #include <QtQml> 0019 #include <QQuickStyle> 0020 0021 #include <KAboutData> 0022 #include <KLocalizedContext> 0023 #include <KLocalizedString> 0024 0025 #include "QrCodeContent.h" 0026 // #include "QrCodeScannerFilter.h" 0027 #include "Qrca.h" 0028 #include "notificationmanager.h" 0029 #include "clipboard.h" 0030 0031 Q_DECL_EXPORT int main(int argc, char *argv[]) 0032 { 0033 #ifndef Q_OS_ANDROID 0034 QApplication app(argc, argv); 0035 // Default to org.kde.desktop style unless the user forces another style 0036 if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")) { 0037 QQuickStyle::setStyle(QStringLiteral("org.kde.desktop")); 0038 } 0039 #else 0040 QGuiApplication app(argc, argv); 0041 QQuickStyle::setStyle(QStringLiteral("org.kde.breeze")); 0042 #endif 0043 QCoreApplication::setOrganizationName(QStringLiteral("KDE")); 0044 QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org")); 0045 QCoreApplication::setApplicationName(QStringLiteral("qrca")); 0046 0047 QCommandLineParser parser; 0048 parser.addHelpOption(); 0049 parser.addOption(QCommandLineOption(QStringLiteral("encode"), QStringLiteral("Text to encode into a QR-Code"), QStringLiteral("encode"), {})); 0050 parser.process(app); 0051 0052 // setup translation string domain for the i18n calls 0053 KLocalizedString::setApplicationDomain("qrca"); 0054 // create a KAboutData object to use for setting the application metadata 0055 KAboutData aboutData( 0056 QStringLiteral("qrca"), i18n("Qrca"), QStringLiteral("0.1"), i18n("A simple QR scanner"), KAboutLicense::GPL_V3, i18n("Copyright 2016-2019 Qrca and Kaidan authors"), QString(), QStringLiteral("https://www.plasma-mobile.org")); 0057 // overwrite default-generated values of organizationDomain & desktopFileName 0058 aboutData.addAuthor(i18n("Jonah Brüchert"), QString(), QStringLiteral("jbb@kaidan.im"), QStringLiteral("https://jbbgameich.github.io")); 0059 aboutData.addAuthor(i18n("Simon Schmeißer")); 0060 aboutData.setOrganizationDomain("kde.org"); 0061 aboutData.setDesktopFileName(QStringLiteral("org.kde.qrca")); 0062 // set the application metadata 0063 KAboutData::setApplicationData(aboutData); 0064 // in GUI apps set the window icon manually, not covered by KAboutData 0065 // needed for environments where the icon name is not extracted from 0066 // the information in the application's desktop file 0067 QGuiApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("org.kde.qrca"))); 0068 aboutData.setProgramLogo(app.windowIcon()); 0069 0070 qmlRegisterUncreatableType<QrCodeContent>("org.kde.qrca", 1, 0, "QrCodeContent", {}); 0071 qmlRegisterSingletonType<NotificationManager>("org.kde.qrca", 1, 0, "NotificationManager", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * { 0072 Q_UNUSED(engine) 0073 Q_UNUSED(scriptEngine) 0074 0075 return new NotificationManager(); 0076 }); 0077 qmlRegisterSingletonType<Clipboard>("org.kde.qrca", 1, 0, "Clipboard", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * { 0078 Q_UNUSED(engine) 0079 Q_UNUSED(scriptEngine) 0080 0081 return new Clipboard(); 0082 }); 0083 qRegisterMetaType<QrCodeContent>(); 0084 0085 Qrca qrca; 0086 qrca.setAboutData(aboutData); 0087 qrca.setEncodeText(parser.value(QStringLiteral("encode"))); 0088 qmlRegisterSingletonInstance<Qrca>("org.kde.qrca", 1, 0, "Qrca", &qrca); 0089 0090 QQmlApplicationEngine engine; 0091 engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); 0092 0093 engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); 0094 0095 if (engine.rootObjects().isEmpty()) { 0096 return -1; 0097 } 0098 0099 return app.exec(); 0100 }