From: Ivailo Monev Date: Tue, 4 Feb 2020 17:42:29 +0000 (+0000) Subject: libkscreen: make use of JSON format support provided by Katie X-Git-Tag: 4.22.0~755 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=90638c0069ed9c3388fce458b1709bebb6aeb1a6;p=kde%2Fkde-extraapps.git libkscreen: make use of JSON format support provided by Katie Signed-off-by: Ivailo Monev --- diff --git a/libkscreen/backends/fake/fake.cpp b/libkscreen/backends/fake/fake.cpp index a1eb060b..2a4f9b4b 100644 --- a/libkscreen/backends/fake/fake.cpp +++ b/libkscreen/backends/fake/fake.cpp @@ -27,7 +27,11 @@ #include #include -#include +#ifndef QT_KATIE +# include +#else +# include +#endif Q_EXPORT_PLUGIN2(Fake, Fake) @@ -69,8 +73,12 @@ Edid *Fake::edid(int outputId) const QFile file(QString(qgetenv("TEST_DATA"))); file.open(QIODevice::ReadOnly); +#ifndef QT_KATIE QJson::Parser parser; QVariantMap json = parser.parse(file.readAll()).toMap(); +#else + QVariantMap json = QJsonDocument::fromJson(file.readAll()).toVariant().toMap(); +#endif QList outputs = json["outputs"].toList(); Q_FOREACH(const QVariant &value, outputs) { diff --git a/libkscreen/backends/fake/parser.cpp b/libkscreen/backends/fake/parser.cpp index 91042a80..085941f5 100644 --- a/libkscreen/backends/fake/parser.cpp +++ b/libkscreen/backends/fake/parser.cpp @@ -23,17 +23,52 @@ #include #include -#include -#include +#ifndef QT_KATIE +# include +# include +#else +# include +# include +#endif using namespace KScreen; +#ifdef QT_KATIE +static void qvariant2qobject(const QVariantMap &map, QObject *object) +{ + const QMetaObject *metaobject = object->metaObject(); + + for (QVariantMap::const_iterator iter = map.constBegin(), + end = map.constEnd(); iter != end; iter++) { + int pIdx = metaobject->indexOfProperty(iter.key().toLatin1()); + + if ( pIdx < 0 ) { + continue; + } + + QMetaProperty metaproperty = metaobject->property( pIdx ); + QVariant::Type type = metaproperty.type(); + QVariant v(iter.value()); + if (v.canConvert(type)) { + v.convert(type); + metaproperty.write(object, v); + } else if (metaproperty.typeName() == QLatin1String("QVariant")) { + metaproperty.write(object, v); + } + } +} +#endif + Config* Parser::fromJson(const QByteArray& data) { Config *config = new Config(); - QJson::Parser parser; +#ifndef QT_KATIE + QJson::Parser parser; QVariantMap json = parser.parse(data).toMap(); +#else + QVariantMap json = QJsonDocument::fromJson(data).toVariant().toMap(); +#endif Screen* screen = Parser::screenFromJson(json["screen"].toMap()); @@ -87,7 +122,11 @@ Output* Parser::outputFromJson(const QVariant& data) } output->setPreferredModes(preferredModes); +#ifndef QT_KATIE QJson::QObjectHelper::qvariant2qobject(map, output); +#else + qvariant2qobject(map, output); +#endif Mode *mode; ModeList modelist; @@ -151,7 +190,12 @@ Mode* Parser::modeFromJson(const QVariant& data) QVariantMap map = data.toMap(); Mode *mode = new Mode; mode->setId(map["id"].toString()); + +#ifndef QT_KATIE QJson::QObjectHelper::qvariant2qobject(map, mode); +#else + qvariant2qobject(map, mode); +#endif mode->setSize(Parser::sizeFromJson(map["size"].toMap()));