File indexing completed on 2024-04-21 04:40:45

0001 /*
0002     SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <KOpeningHours/Display>
0008 #include <KOpeningHours/Interval>
0009 #include <KOpeningHours/IntervalModel>
0010 #include <KOpeningHours/OpeningHours>
0011 
0012 #include <QCoreApplication>
0013 #include <QQmlEngine>
0014 #include <QQmlExtensionPlugin>
0015 
0016 class KOpeningHoursQmlPlugin : public QQmlExtensionPlugin
0017 {
0018     Q_OBJECT
0019     Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
0020 public:
0021     void registerTypes(const char* uri) override;
0022 };
0023 
0024 namespace KOpeningHours {
0025 class OpeningHoursFactory
0026 {
0027     Q_GADGET
0028 public:
0029     Q_INVOKABLE KOpeningHours::OpeningHours parse(const QString &expression, int modes = OpeningHours::IntervalMode) const;
0030 };
0031 
0032 OpeningHours OpeningHoursFactory::parse(const QString &expression, int modes) const
0033 {
0034     return OpeningHours(expression.toUtf8(), OpeningHours::Modes(modes));
0035 }
0036 
0037 }
0038 
0039 void KOpeningHoursQmlPlugin::registerTypes(const char*)
0040 {
0041     qRegisterMetaType<KOpeningHours::Interval>();
0042     qRegisterMetaType<KOpeningHours::OpeningHours>();
0043     qRegisterMetaType<KOpeningHours::OpeningHours::Modes>();
0044 
0045     qmlRegisterUncreatableMetaObject(KOpeningHours::Interval::staticMetaObject, "org.kde.kopeninghours", 1, 0, "Interval", {});
0046     qmlRegisterUncreatableMetaObject(KOpeningHours::OpeningHours::staticMetaObject, "org.kde.kopeninghours", 1, 0, "OpeningHours", {});
0047 
0048     qmlRegisterType<KOpeningHours::IntervalModel>("org.kde.kopeninghours", 1, 0, "IntervalModel");
0049 
0050     // HACK qmlplugindump chokes on gadget singletons, to the point of breaking ecm_find_qmlmodule()
0051     if (QCoreApplication::applicationName() != QLatin1String("qmlplugindump")) {
0052         qmlRegisterSingletonType("org.kde.kopeninghours", 1, 0, "OpeningHoursParser", [](QQmlEngine*, QJSEngine *engine) -> QJSValue {
0053             return engine->toScriptValue(KOpeningHours::OpeningHoursFactory());
0054         });
0055         qmlRegisterSingletonType("org.kde.kopeninghours", 1, 0, "Display", [](QQmlEngine*, QJSEngine *engine) -> QJSValue {
0056             return engine->toScriptValue(KOpeningHours::Display());
0057         });
0058     }
0059 }
0060 
0061 #include "kopeninghoursqmlplugin.moc"