summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@digia.com>2012-09-25 12:56:09 +0200
committerThomas Hartmann <Thomas.Hartmann@digia.com>2012-09-27 09:50:12 +0200
commitaf20741cfe7b7929a6e364fa4a68c3595b2c5333 (patch)
treeb4c35a8230616922ff6f218209df85ee054005dc
parente1a4216936a8997b7d34731e8c04fbba909978f8 (diff)
downloadqt-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.pri2
-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.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/model/propertyparser.cpp182
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)