From d7d4c982e4d1e1e77dab0e7a02d13d78e710af60 Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@nokia.com>
Date: Fri, 7 May 2010 13:37:27 +0200
Subject: [PATCH] QmlDesigner.metaInfo: support for QEasingCurve

---
 .../designercore/include/enumeratormetainfo.h |  1 +
 .../metainfo/enumeratormetainfo.cpp           |  5 ++
 .../designercore/metainfo/gui.metainfo        | 49 +++++++++++++++++++
 .../designercore/metainfo/metainfo.cpp        | 16 ++++--
 .../designercore/model/abstractproperty.cpp   |  2 +-
 .../designercore/model/variantparser.cpp      |  7 ++-
 6 files changed, 74 insertions(+), 6 deletions(-)

diff --git a/src/plugins/qmldesigner/designercore/include/enumeratormetainfo.h b/src/plugins/qmldesigner/designercore/include/enumeratormetainfo.h
index c03f780a4ee..5d3ac3f3171 100644
--- a/src/plugins/qmldesigner/designercore/include/enumeratormetainfo.h
+++ b/src/plugins/qmldesigner/designercore/include/enumeratormetainfo.h
@@ -68,6 +68,7 @@ public:
     QString scopeAndName(const QString &combiner = QString("::")) const;
     QList<QString> elementNames() const;
     int elementValue(const QString &enumeratorName) const;
+    QString valueToString(int value) const;
 
 private:
     void setScope(const QString &scope);
diff --git a/src/plugins/qmldesigner/designercore/metainfo/enumeratormetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/enumeratormetainfo.cpp
index 157ad96c824..3288f2e2816 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/enumeratormetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/enumeratormetainfo.cpp
@@ -118,6 +118,11 @@ int EnumeratorMetaInfo::elementValue(const QString &enumeratorName) const
     return m_data->elements.value(unscoped, -1);
 }
 
+QString EnumeratorMetaInfo::valueToString(int value) const
+{
+    return m_data->elements.key(value);
+}
+
 void EnumeratorMetaInfo::setScope(const QString &scope)
 {
     Q_ASSERT(!scope.isEmpty());
diff --git a/src/plugins/qmldesigner/designercore/metainfo/gui.metainfo b/src/plugins/qmldesigner/designercore/metainfo/gui.metainfo
index f7c24d7ce61..b2affa6a8b2 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/gui.metainfo
+++ b/src/plugins/qmldesigner/designercore/metainfo/gui.metainfo
@@ -127,6 +127,55 @@
     <element name="NonModal" value="0" />
     <element name="ApplicationModal" value="2" />
   </enumerator>
+  <enumerator name="Type" scope="QEasingCurve">
+     <element name="Linear" value="0" />
+     <element name="InQuad" value="1" />
+     <element name="OutQuad" value="2" />
+     <element name="InOutQuad" value="3" />
+     <element name="OutInQuad" value="4" />
+     <element name="InCubic" value="5" />
+     <element name="OutCubic" value="6" />
+     <element name="InOutCubic" value="7" />
+     <element name="OutInCubic" value="8" />
+     <element name="InQuart" value="9" />
+     <element name="OutQuart" value="10" />
+     <element name="InOutQuart" value="11" />
+     <element name="OutInQuart" value="12" />
+     <element name="InQuint" value="13" />
+     <element name="OutQuint" value="14" />
+     <element name="InOutQuint" value="15" />
+     <element name="OutInQuint" value="16" />
+     <element name="InSine" value="17" />
+     <element name="OutSine" value="18" />
+     <element name="InOutSine" value="19" />
+     <element name="OutInSine" value="20" />
+     <element name="InExpo" value="21" />
+     <element name="OutExpo" value="22" />
+     <element name="InOutExpo" value="23" />
+     <element name="OutInExpo" value="24" />
+     <element name="InCirc" value="25" />
+     <element name="OutCirc" value="26" />
+     <element name="InOutCirc" value="27" />
+     <element name="OutInCirc" value="28" />
+     <element name="InElastic" value="29" />
+     <element name="OutElastic" value="30" />
+     <element name="InOutElastic" value="31" />
+     <element name="OutInElastic" value="32" />
+     <element name="InBack" value="33" />
+     <element name="OutBack" value="34" />
+     <element name="InOutBack" value="35" />
+     <element name="OutInBack" value="36" />
+     <element name="InBounce" value="37" />
+     <element name="OutBounce" value="38" />
+     <element name="InOutBounce" value="39" />
+     <element name="OutInBounce" value="40" />
+     <element name="InCurve" value="41" />
+     <element name="OutCurve" value="42" />
+     <element name="SineCurve" value="43" />
+     <element name="CosineCurve" value="44" />
+     <element name="Custom" value="45" />
+     <element name="NCurveTypes" value="46" />
+  </enumerator>
   <flag name="Alignment" scope="Qt">
     <element name="AlignLeft" value="1" />
     <element name="AlignTrailing" value="2" />
diff --git a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp
index b4ba27e2605..80a0be8b0f2 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp
@@ -115,8 +115,8 @@ void MetaInfoPrivate::initialize()
 
     parseQmlTypes();
     parseNonQmlTypes();
-    parseValueTypes();
     parseXmlFiles();
+    parseValueTypes();
 
     m_isInitialized = true;
 }
@@ -155,9 +155,9 @@ void MetaInfoPrivate::parseProperties(NodeMetaInfo &nodeMetaInfo, const QMetaObj
         propertyInfo.setFlagType(qProperty.isFlagType());
 
         if (propertyInfo.isEnumType()) {
-            EnumeratorMetaInfo enumerator;
-
             QMetaEnum qEnumerator = qProperty.enumerator();
+            EnumeratorMetaInfo enumerator = m_q->addEnumerator(qEnumerator.scope(), qEnumerator.name());
+
             enumerator.setValid(qEnumerator.isValid());
             enumerator.setIsFlagType(qEnumerator.isFlag());
             enumerator.setScope(qEnumerator.scope());
@@ -168,6 +168,7 @@ void MetaInfoPrivate::parseProperties(NodeMetaInfo &nodeMetaInfo, const QMetaObj
             }
 
             propertyInfo.setEnumerator(enumerator);
+            
         }
 
         nodeMetaInfo.addProperty(propertyInfo);
@@ -240,7 +241,8 @@ void MetaInfoPrivate::parseValueTypes()
                << "QRectF"
                << "QSize"
                << "QSizeF"
-               << "QVector3D";
+               << "QVector3D"
+               << "QEasingCurve";
 
     foreach (const QString &type, valueTypes) {
         NodeMetaInfo nodeMetaInfo(*m_q);
@@ -268,6 +270,12 @@ void MetaInfoPrivate::parseValueTypes()
                 propertyInfo.setType("int");
             } else if (type == ("QRect")) {
                 propertyInfo.setType("int");
+            } else if (type == ("QEasingCurve")) {
+                if (propertyName == "type") {
+                    propertyInfo.setEnumType("true");
+                    propertyInfo.setType("QEasingCurve::Type");
+                    propertyInfo.setEnumerator(m_q->enumerator("QEasingCurve::Type"));
+                }
             }
             propertyInfo.setValid(true);
             propertyInfo.setReadable(true);
diff --git a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
index 543cfc3c296..6fa866afc4e 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
@@ -230,7 +230,7 @@ QmlObjectNode AbstractProperty::parentQmlObjectNode() const
 */
 PropertyMetaInfo AbstractProperty::metaInfo() const
 {
-    return ModelNode(m_internalNode, m_model.data(), view()).metaInfo().property(m_propertyName);
+    return ModelNode(m_internalNode, m_model.data(), view()).metaInfo().property(m_propertyName, true);
 }
 
 /*!
diff --git a/src/plugins/qmldesigner/designercore/model/variantparser.cpp b/src/plugins/qmldesigner/designercore/model/variantparser.cpp
index 2405dbb5bf4..f4c4ef82182 100644
--- a/src/plugins/qmldesigner/designercore/model/variantparser.cpp
+++ b/src/plugins/qmldesigner/designercore/model/variantparser.cpp
@@ -38,6 +38,7 @@
 #include <QSize>
 #include <QSizeF>
 #include <QVector3D>
+#include <QEasingCurve>
 #include <QMetaProperty>
 
 namespace QmlDesigner {
@@ -114,6 +115,8 @@ VariantParser VariantParser::create(const QString &type)
         return VariantParser(QVariant(QRectF()));
     if (type == "QVector3D")
         return VariantParser(QVariant(QVector3D()));
+    if (type == "QEasingCurve")
+        return VariantParser(QVariant(QEasingCurve()));
 
     return VariantParser(QVariant());
 }
@@ -135,7 +138,9 @@ void VariantParser::init(const QString &type)
     if (type == "QRectF")
         m_valueType  = QDeclarativeValueTypeFactory::valueType(QVariant::RectF);
     if (type == "QVector3D")
-        m_valueType  = QDeclarativeValueTypeFactory::valueType(QVariant::Vector3D);
+        m_valueType  = QDeclarativeValueTypeFactory::valueType(QVariant::Vector3D);    
+    if (type == "QEasingCurve")
+        m_valueType  = QDeclarativeValueTypeFactory::valueType(QVariant::EasingCurve);
 }
 
 bool VariantParser::isValid()
-- 
GitLab