diff options
author | Thomas Hartmann <Thomas.Hartmann@digia.com> | 2012-09-25 12:56:09 +0200 |
---|---|---|
committer | Thomas Hartmann <Thomas.Hartmann@digia.com> | 2012-09-27 09:50:12 +0200 |
commit | af20741cfe7b7929a6e364fa4a68c3595b2c5333 (patch) | |
tree | b4c35a8230616922ff6f218209df85ee054005dc | |
parent | e1a4216936a8997b7d34731e8c04fbba909978f8 (diff) | |
download | qt-creator-af20741cfe7b7929a6e364fa4a68c3595b2c5333.tar.gz |
QmlDesigner: removing dependency on private/qdeclarativestringconverters_p.h
PropertyParser takes care of the issue now.
Change-Id: Ib75c47f239fef05cdc3a9032d011d69483c381d5
Reviewed-by: Marco Bubke <marco.bubke@digia.com>
(cherry picked from commit 40714ca7a02a63b4cf3e9cfb01ebec1d4449d4f3)
-rw-r--r-- | src/plugins/qmldesigner/designercore/designercore.pri | 2 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designercore/include/propertyparser.h (renamed from src/plugins/qmldesigner/designercore/model/propertyparser.h) | 1 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designercore/metainfo/metainfoparser.cpp | 2 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp | 6 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designercore/model/propertyparser.cpp | 182 |
5 files changed, 179 insertions, 14 deletions
diff --git a/src/plugins/qmldesigner/designercore/designercore.pri b/src/plugins/qmldesigner/designercore/designercore.pri index 88bde4f9de..4cd9644a99 100644 --- a/src/plugins/qmldesigner/designercore/designercore.pri +++ b/src/plugins/qmldesigner/designercore/designercore.pri @@ -94,7 +94,7 @@ HEADERS += $$PWD/include/corelib_global.h \ $$PWD/model/internalnode_p.h \ $$PWD/model/model_p.h \ $$PWD/model/painteventfilter_p.h \ - $$PWD/model/propertyparser.h \ + $$PWD/include/propertyparser.h \ $$PWD/pluginmanager/widgetpluginmanager.h \ $$PWD/pluginmanager/widgetpluginpath.h \ $$PWD/include/exception.h \ diff --git a/src/plugins/qmldesigner/designercore/model/propertyparser.h b/src/plugins/qmldesigner/designercore/include/propertyparser.h index 1bd0d350ab..96578a93cd 100644 --- a/src/plugins/qmldesigner/designercore/model/propertyparser.h +++ b/src/plugins/qmldesigner/designercore/include/propertyparser.h @@ -43,6 +43,7 @@ QVariant read(const QString &typeStr, const QString &str, const MetaInfo &metaIn QVariant read(const QString &typeStr, const QString &str); QVariant read(int variantType, const QString &str); QString write(const QVariant &variant, const MetaInfo &metaInfo); +QVariant variantFromString(const QString &s); } // namespace PropertyParser } // namespace Internal diff --git a/src/plugins/qmldesigner/designercore/metainfo/metainfoparser.cpp b/src/plugins/qmldesigner/designercore/metainfo/metainfoparser.cpp index 01aaa87729..e64e164a39 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/metainfoparser.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/metainfoparser.cpp @@ -31,7 +31,7 @@ #include "metainfoparser.h" #include "metainfo.h" -#include "model/propertyparser.h" +#include <propertyparser.h> #include <QXmlStreamReader> #include <QString> #include <QFile> diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index acaf8c3f31..c64e25a1f5 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -36,6 +36,7 @@ #include "metainfo.h" #include <model.h> #include <rewriterview.h> +#include <propertyparser.h> #include <QSharedData> #include <QDebug> @@ -50,8 +51,6 @@ #include <qmljs/qmljsscopechain.h> #include <qmljs/parser/qmljsast_p.h> #include <languageutils/fakemetaobject.h> -#include <private/qdeclarativemetatype_p.h> -#include <private/qdeclarativestringconverters_p.h> namespace QmlDesigner { @@ -1004,8 +1003,7 @@ QVariant NodeMetaInfo::propertyCastedValue(const QString &propertyName, const QV return variant; } - return QDeclarativeStringConverters::variantFromString(variant.toString()); - + return Internal::PropertyParser::variantFromString(variant.toString()); } QList<NodeMetaInfo> NodeMetaInfo::superClasses() const diff --git a/src/plugins/qmldesigner/designercore/model/propertyparser.cpp b/src/plugins/qmldesigner/designercore/model/propertyparser.cpp index 36e5381434..7cff3c47e5 100644 --- a/src/plugins/qmldesigner/designercore/model/propertyparser.cpp +++ b/src/plugins/qmldesigner/designercore/model/propertyparser.cpp @@ -33,9 +33,153 @@ #include <metainfo.h> #include <QUrl> +#include <QVector3D> #include <QDebug> -#include <private/qdeclarativestringconverters_p.h> +namespace { + +static uchar fromHex(const uchar c, const uchar c2) +{ + uchar rv = 0; + if (c >= '0' && c <= '9') + rv += (c - '0') * 16; + else if (c >= 'A' && c <= 'F') + rv += (c - 'A' + 10) * 16; + else if (c >= 'a' && c <= 'f') + rv += (c - 'a' + 10) * 16; + + if (c2 >= '0' && c2 <= '9') + rv += (c2 - '0'); + else if (c2 >= 'A' && c2 <= 'F') + rv += (c2 - 'A' + 10); + else if (c2 >= 'a' && c2 <= 'f') + rv += (c2 - 'a' + 10); + + return rv; +} + +static uchar fromHex(const QString &s, int idx) +{ + uchar c = s.at(idx).toAscii(); + uchar c2 = s.at(idx + 1).toAscii(); + return fromHex(c, c2); +} + +QColor colorFromString(const QString &s, bool *ok) +{ + if (s.length() == 9 && s.startsWith(QLatin1Char('#'))) { + uchar a = fromHex(s, 1); + uchar r = fromHex(s, 3); + uchar g = fromHex(s, 5); + uchar b = fromHex(s, 7); + if (ok) *ok = true; + return QColor(r, g, b, a); + } else { + QColor rv(s); + if (ok) *ok = rv.isValid(); + return rv; + } +} + +QPointF pointFFromString(const QString &s, bool *ok) +{ + if (s.count(QLatin1Char(',')) != 1) { + if (ok) + *ok = false; + return QPointF(); + } + + bool xGood, yGood; + int index = s.indexOf(QLatin1Char(',')); + qreal xCoord = s.left(index).toDouble(&xGood); + qreal yCoord = s.mid(index+1).toDouble(&yGood); + if (!xGood || !yGood) { + if (ok) + *ok = false; + return QPointF(); + } + + if (ok) + *ok = true; + return QPointF(xCoord, yCoord); +} + +QRectF rectFFromString(const QString &s, bool *ok) +{ + if (s.count(QLatin1Char(',')) != 2 || s.count(QLatin1Char('x')) != 1) { + if (ok) + *ok = false; + return QRectF(); + } + + bool xGood, yGood, wGood, hGood; + int index = s.indexOf(QLatin1Char(',')); + qreal x = s.left(index).toDouble(&xGood); + int index2 = s.indexOf(QLatin1Char(','), index+1); + qreal y = s.mid(index+1, index2-index-1).toDouble(&yGood); + index = s.indexOf(QLatin1Char('x'), index2+1); + qreal width = s.mid(index2+1, index-index2-1).toDouble(&wGood); + qreal height = s.mid(index+1).toDouble(&hGood); + if (!xGood || !yGood || !wGood || !hGood) { + if (ok) + *ok = false; + return QRectF(); + } + + if (ok) + *ok = true; + return QRectF(x, y, width, height); +} + +QSizeF sizeFFromString(const QString &s, bool *ok) +{ + if (s.count(QLatin1Char('x')) != 1) { + if (ok) + *ok = false; + return QSizeF(); + } + + bool wGood, hGood; + int index = s.indexOf(QLatin1Char('x')); + qreal width = s.left(index).toDouble(&wGood); + qreal height = s.mid(index+1).toDouble(&hGood); + if (!wGood || !hGood) { + if (ok) + *ok = false; + return QSizeF(); + } + + if (ok) + *ok = true; + return QSizeF(width, height); +} + +QVector3D vector3DFromString(const QString &s, bool *ok) +{ + if (s.count(QLatin1Char(',')) != 2) { + if (ok) + *ok = false; + return QVector3D(); + } + + bool xGood, yGood, zGood; + int index = s.indexOf(QLatin1Char(',')); + int index2 = s.indexOf(QLatin1Char(','), index+1); + qreal xCoord = s.left(index).toDouble(&xGood); + qreal yCoord = s.mid(index+1, index2-index-1).toDouble(&yGood); + qreal zCoord = s.mid(index2+1).toDouble(&zGood); + if (!xGood || !yGood || !zGood) { + if (ok) + *ok = false; + return QVector3D(); + } + + if (ok) + *ok = true; + return QVector3D(xCoord, yCoord, zCoord); +} + +} //namespace namespace QmlDesigner { namespace Internal { @@ -66,29 +210,31 @@ QVariant read(int variantType, const QString &str) bool conversionOk = true; switch (variantType) { case QMetaType::QPoint: - value = QDeclarativeStringConverters::pointFFromString(str, &conversionOk).toPoint(); + value = pointFFromString(str, &conversionOk).toPoint(); break; case QMetaType::QPointF: - value = QDeclarativeStringConverters::pointFFromString(str, &conversionOk); + value = pointFFromString(str, &conversionOk); break; case QMetaType::QSize: - value = QDeclarativeStringConverters::sizeFFromString(str, &conversionOk).toSize(); + value = sizeFFromString(str, &conversionOk).toSize(); break; case QMetaType::QSizeF: - value = QDeclarativeStringConverters::sizeFFromString(str, &conversionOk); + value = sizeFFromString(str, &conversionOk); break; case QMetaType::QRect: - value = QDeclarativeStringConverters::rectFFromString(str, &conversionOk).toRect(); + value = rectFFromString(str, &conversionOk).toRect(); break; case QMetaType::QRectF: - value = QDeclarativeStringConverters::rectFFromString(str, &conversionOk); + value = rectFFromString(str, &conversionOk); break; case QMetaType::QUrl: value = QVariant(QUrl(str)); break; case QMetaType::QColor: - value = QDeclarativeStringConverters::colorFromString(str); + value = colorFromString(str, &conversionOk); break; + case QMetaType::QVector3D: + value = vector3DFromString(str, &conversionOk); default: { value = QVariant(str); value.convert(static_cast<QVariant::Type>(variantType)); @@ -103,6 +249,26 @@ QVariant read(int variantType, const QString &str) } return value; + return QVariant(); +} + +QVariant variantFromString(const QString &s) +{ + if (s.isEmpty()) + return QVariant(s); + bool ok = false; + QRectF r = rectFFromString(s, &ok); + if (ok) return QVariant(r); + QColor c = colorFromString(s, &ok); + if (ok) return QVariant(c); + QPointF p = pointFFromString(s, &ok); + if (ok) return QVariant(p); + QSizeF sz = sizeFFromString(s, &ok); + if (ok) return QVariant(sz); + QVector3D v = vector3DFromString(s, &ok); + if (ok) return QVariant::fromValue(v); + + return QVariant(s); } QString write(const QVariant &variant) |