aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/qmljs/qmljsinterpreter.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <[email protected]>2010-02-19 15:10:39 +0100
committerErik Verbruggen <[email protected]>2010-02-19 15:11:03 +0100
commit78b31454778977c2fbdf2b98a0cbf188e852c3f1 (patch)
tree2ccf123549f32aa0e205e7de6d84f044aefa2dcf /src/libs/qmljs/qmljsinterpreter.cpp
parent5e449a80c448db05b49122f3a046e37056ee509d (diff)
Semantic checking for easing curve names.
Done-with: Christian Kamm
Diffstat (limited to 'src/libs/qmljs/qmljsinterpreter.cpp')
-rw-r--r--src/libs/qmljs/qmljsinterpreter.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 7caee728108..20b1f47dbe7 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -41,6 +41,7 @@
# include <QtDeclarative/private/qmlgraphicsanchors_p.h> // ### remove me
# include <QtDeclarative/private/qmlgraphicsrectangle_p.h> // ### remove me
# include <QtDeclarative/private/qmlvaluetype_p.h> // ### remove me
+# include <QtDeclarative/private/qmlanimation_p.h> // ### remove me
#endif
using namespace QmlJS::Interpreter;
@@ -329,8 +330,29 @@ const Value *QmlObjectValue::propertyValue(const QMetaProperty &prop) const
break;
} // end of switch
+ const QString typeName = prop.typeName();
+ if (typeName == QLatin1String("QmlGraphicsAnchorLine")) {
+ ObjectValue *object = engine()->newObject(/*prototype =*/ 0);
+ object->setClassName(QLatin1String("AnchorLine"));
+ value = object;
+ }
+ if (value->asStringValue() && prop.name() == QLatin1String("easing")
+ && isDerivedFrom(&QmlPropertyAnimation::staticMetaObject)) {
+ value = engine()->easingCurveNameValue();
+ }
+
return value;
}
+
+bool QmlObjectValue::isDerivedFrom(const QMetaObject *base) const
+{
+ for (const QMetaObject *iter = _metaObject; iter; iter = iter->superClass()) {
+ if (iter == base)
+ return true;
+ }
+ return false;
+}
+
#endif
namespace {
@@ -584,6 +606,10 @@ void ValueVisitor::visit(const Reference *)
{
}
+void ValueVisitor::visit(const EasingCurveNameValue *)
+{
+}
+
////////////////////////////////////////////////////////////////////////////////
// Value
////////////////////////////////////////////////////////////////////////////////
@@ -640,6 +666,11 @@ const Reference *Value::asReference() const
return 0;
}
+const EasingCurveNameValue *Value::asEasingCurveNameValue() const
+{
+ return 0;
+}
+
////////////////////////////////////////////////////////////////////////////////
// Values
////////////////////////////////////////////////////////////////////////////////
@@ -860,6 +891,67 @@ const Value *Reference::value(Context *) const
return _engine->undefinedValue();
}
+void EasingCurveNameValue::accept(ValueVisitor *visitor) const
+{
+ visitor->visit(this);
+}
+
+QSet<QString> EasingCurveNameValue::_curveNames;
+QSet<QString> EasingCurveNameValue::curveNames()
+{
+ if (_curveNames.isEmpty()) {
+ _curveNames = QSet<QString>()
+ << "easeLinear"
+ << "easeInQuad"
+ << "easeOutQuad"
+ << "easeInOutQuad"
+ << "easeOutInQuad"
+ << "easeInCubic"
+ << "easeOutCubic"
+ << "easeInOutCubic"
+ << "easeOutInCubic"
+ << "easeInQuart"
+ << "easeOutQuart"
+ << "easeInOutQuart"
+ << "easeOutInQuart"
+ << "easeInQuint"
+ << "easeOutQuint"
+ << "easeInOutQuint"
+ << "easeOutInQuint"
+ << "easeInSine"
+ << "easeOutSine"
+ << "easeInOutSine"
+ << "easeOutInSine"
+ << "easeInExpo"
+ << "easeOutExpo"
+ << "easeInOutExpo"
+ << "easeOutInExpo"
+ << "easeInCirc"
+ << "easeOutCirc"
+ << "easeInOutCirc"
+ << "easeOutInCirc"
+ << "easeInElastic"
+ << "easeOutElastic"
+ << "easeInOutElastic"
+ << "easeOutInElastic"
+ << "easeInBack"
+ << "easeOutBack"
+ << "easeInOutBack"
+ << "easeOutInBack"
+ << "easeInBounce"
+ << "easeOutBounce"
+ << "easeInOutBounce"
+ << "easeOutInBounce";
+ }
+
+ return _curveNames;
+}
+
+const EasingCurveNameValue *EasingCurveNameValue::asEasingCurveNameValue() const
+{
+ return this;
+}
+
MemberProcessor::MemberProcessor()
{
}
@@ -1499,6 +1591,11 @@ const StringValue *Engine::stringValue() const
return &_stringValue;
}
+const EasingCurveNameValue *Engine::easingCurveNameValue() const
+{
+ return &_easingCurveNameValue;
+}
+
const Value *Engine::newArray()
{
return arrayCtor()->construct();