File indexing completed on 2024-04-14 05:46:50

0001 /**
0002  * SPDX-FileCopyrightText: 2015 by Kåre Särs <kare.sars@iki .fi>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #include <QApplication>
0008 #include <QQmlApplicationEngine>
0009 #include <QQmlContext>
0010 #include <QCommandLineParser>
0011 #include <QIcon>
0012 #include <QImage>
0013 
0014 #include <KAboutData>
0015 #include <KCrash>
0016 #include <KLocalizedContext>
0017 #include <KLocalizedString>
0018 #include <KSaneCore/Option>
0019 
0020 #include "DevicesModel.h"
0021 #include "DocumentModel.h"
0022 #include "FormatModel.h"
0023 #include "FilteredOptionsModel.h"
0024 #include "OCRLanguageModel.h"
0025 #include "InProgressPainter.h"
0026 #include "Skanpage.h"
0027 #include "SkanpageUtils.h"
0028 #include "skanpage_version.h"
0029 #include "skanpage_config.h"
0030 #include "skanpage_state.h"
0031 
0032 int main(int argc, char *argv[])
0033 {
0034     QApplication app(argc, argv);
0035 
0036     qmlRegisterUncreatableType<DocumentModel>("org.kde.skanpage", 1, 0, "DocumentModel", QStringLiteral("Document model class uncreateable"));
0037     qmlRegisterUncreatableType<DevicesModel>("org.kde.skanpage", 1, 0, "DevicesModel", QStringLiteral("Device model class uncreateable"));
0038     qmlRegisterUncreatableType<FormatModel>("org.kde.skanpage", 1, 0, "FormatModel", QStringLiteral("Format model class uncreateable"));
0039     qmlRegisterUncreatableType<FilteredOptionsModel>("org.kde.skanpage", 1, 0, "FilteredOptionsModel", QStringLiteral("Filtered options model class uncreateable"));
0040     qmlRegisterUncreatableType<OCRLanguageModel>("org.kde.skanpage", 1, 0, "OCRLanguageModel", QStringLiteral("OCR language model class uncreateable"));;
0041     qmlRegisterUncreatableType<KSaneCore::Option>("org.kde.skanpage", 1, 0, "KSaneOption", QStringLiteral("KSaneOption class uncreateable"));
0042     qmlRegisterUncreatableType<Skanpage>("org.kde.skanpage", 1, 0, "Skanpage", QStringLiteral("Skanpage application class uncreateable"));
0043     qmlRegisterUncreatableType<SkanpageConfiguration>("org.kde.skanpage", 1, 0, "Configuration", QStringLiteral("Confguration class uncreatable"));
0044     qmlRegisterUncreatableType<SkanpageState>("org.kde.skanpage", 1, 0, "StateConfiguration", QStringLiteral("State class uncreatable"));
0045     qmlRegisterUncreatableMetaObject(SkanpageUtils::staticMetaObject, "org.kde.skanpage", 1, 0, "SkanpageUtils", QStringLiteral("Error: only enums"));
0046     qmlRegisterType<InProgressPainter>("org.kde.skanpage", 1, 0, "InProgressPainter");
0047     qRegisterMetaType<SkanpageUtils::MessageLevel>();
0048     qRegisterMetaType<SkanpageUtils::FileType>();
0049     qRegisterMetaType<SkanpageUtils::PageProperties>();
0050     qRegisterMetaType<SkanpageUtils::DocumentPages>();
0051     qRegisterMetaType<QImage>();
0052 
0053     KLocalizedString::setApplicationDomain(QByteArrayLiteral("skanpage"));
0054 
0055     KAboutData aboutData(QLatin1String("skanpage"),
0056                          i18n("Skanpage"),
0057                          QLatin1String(SKANPAGE_VERSION_STRING),
0058                          i18n("Multi-page scanning application by KDE."),
0059                          KAboutLicense::GPL,
0060                          i18n("© 2015-2022 Kåre Särs, Alexander Stippich")
0061     );
0062 
0063     aboutData.addAuthor(QStringLiteral("Kåre Särs"), i18n("developer"), QLatin1String("kare.sars@iki.fi"));
0064     aboutData.addAuthor(QStringLiteral("Alexander Stippich"), i18n("developer"), QLatin1String("a.stippich@gmx.net"));
0065     aboutData.setBugAddress("https://bugs.kde.org/enter_bug.cgi?product=skanpage");
0066 
0067     app.setWindowIcon(QIcon::fromTheme(QLatin1String("skanpage")));
0068 
0069     KAboutData::setApplicationData(aboutData);
0070     KCrash::initialize();
0071 
0072     QCommandLineParser parser;
0073     aboutData.setupCommandLine(&parser);
0074     QCommandLineOption deviceOption(
0075         QStringList({QLatin1String("d"), QLatin1String("device")}), i18n("Sane scanner device name. Use 'test' for test device."), i18n("device"));
0076     parser.addOption(deviceOption);
0077     parser.process(app);
0078     // the --author and --license is shown anyway but they work only with the following line
0079     aboutData.processCommandLine(&parser);
0080 
0081     const QString deviceName = parser.value(deviceOption);
0082 
0083     Skanpage skanpageApp = Skanpage(deviceName);
0084 
0085     QQmlApplicationEngine engine;
0086 
0087     engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
0088     engine.rootContext()->setContextProperty(QStringLiteral("skanpage"), &skanpageApp);
0089     engine.rootContext()->setContextProperty(QStringLiteral("_aboutData"), QVariant::fromValue(aboutData));
0090     engine.load(QUrl(QStringLiteral("qrc:/qml/MainWindow.qml")));
0091 
0092     return app.exec();
0093 }