QmlJS: Add a UrlValue.

This will allow distinguishing mere strings from urls and allow
different completion.

Reviewed-by: Erik Verbruggen
This commit is contained in:
Christian Kamm
2010-11-11 16:04:55 +01:00
parent 402566626a
commit 83e7d7c350
2 changed files with 45 additions and 11 deletions

View File

@@ -868,19 +868,20 @@ const Value *QmlObjectValue::propertyValue(const FakeMetaProperty &prop) const
const Value *value = engine()->undefinedValue(); const Value *value = engine()->undefinedValue();
if (typeName == QLatin1String("QByteArray") if (typeName == QLatin1String("QByteArray")
|| typeName == QLatin1String("string") || typeName == QLatin1String("string")
|| typeName == QLatin1String("QString") || typeName == QLatin1String("QString")) {
|| typeName == QLatin1String("QUrl")) {
value = engine()->stringValue(); value = engine()->stringValue();
} else if (typeName == QLatin1String("QUrl")) {
value = engine()->urlValue();
} else if (typeName == QLatin1String("bool")) { } else if (typeName == QLatin1String("bool")) {
value = engine()->booleanValue(); value = engine()->booleanValue();
} else if (typeName == QLatin1String("int") } else if (typeName == QLatin1String("int")
|| typeName == QLatin1String("long")) { || typeName == QLatin1String("long")) {
value = engine()->intValue(); value = engine()->intValue();
} else if (typeName == QLatin1String("float") } else if (typeName == QLatin1String("float")
|| typeName == QLatin1String("double") || typeName == QLatin1String("double")
|| typeName == QLatin1String("qreal")) { || typeName == QLatin1String("qreal")) {
// ### Review: more types here? // ### Review: more types here?
value = engine()->realValue(); value = engine()->realValue();
} else if (typeName == QLatin1String("QFont")) { } else if (typeName == QLatin1String("QFont")) {
value = engine()->qmlFontObject(); value = engine()->qmlFontObject();
} else if (typeName == QLatin1String("QPoint") } else if (typeName == QLatin1String("QPoint")
@@ -1370,7 +1371,6 @@ const RealValue *Value::asRealValue() const
return 0; return 0;
} }
const BooleanValue *Value::asBooleanValue() const const BooleanValue *Value::asBooleanValue() const
{ {
return 0; return 0;
@@ -1381,6 +1381,11 @@ const StringValue *Value::asStringValue() const
return 0; return 0;
} }
const UrlValue *Value::asUrlValue() const
{
return 0;
}
const ObjectValue *Value::asObjectValue() const const ObjectValue *Value::asObjectValue() const
{ {
return 0; return 0;
@@ -1437,7 +1442,6 @@ const NumberValue *NumberValue::asNumberValue() const
const RealValue *RealValue::asRealValue() const const RealValue *RealValue::asRealValue() const
{ {
return this; return this;
} }
const IntValue *IntValue::asIntValue() const const IntValue *IntValue::asIntValue() const
@@ -1465,6 +1469,11 @@ const StringValue *StringValue::asStringValue() const
return this; return this;
} }
const UrlValue *UrlValue::asUrlValue() const
{
return this;
}
void StringValue::accept(ValueVisitor *visitor) const void StringValue::accept(ValueVisitor *visitor) const
{ {
visitor->visit(this); visitor->visit(this);
@@ -2597,6 +2606,7 @@ const RealValue *Engine::realValue() const
{ {
return &_realValue; return &_realValue;
} }
const IntValue *Engine::intValue() const const IntValue *Engine::intValue() const
{ {
return &_intValue; return &_intValue;
@@ -2612,6 +2622,11 @@ const StringValue *Engine::stringValue() const
return &_stringValue; return &_stringValue;
} }
const UrlValue *Engine::urlValue() const
{
return &_urlValue;
}
const ColorValue *Engine::colorValue() const const ColorValue *Engine::colorValue() const
{ {
return &_colorValue; return &_colorValue;
@@ -3147,12 +3162,16 @@ const ObjectValue *Engine::qmlVector3DObject()
const Value *Engine::defaultValueForBuiltinType(const QString &typeName) const const Value *Engine::defaultValueForBuiltinType(const QString &typeName) const
{ {
if (typeName == QLatin1String("string") || typeName == QLatin1String("url")) if (typeName == QLatin1String("string"))
return stringValue(); return stringValue();
else if (typeName == QLatin1String("url"))
return urlValue();
else if (typeName == QLatin1String("bool")) else if (typeName == QLatin1String("bool"))
return booleanValue(); return booleanValue();
else if (typeName == QLatin1String("int") || typeName == QLatin1String("real")) else if (typeName == QLatin1String("int"))
return numberValue(); return intValue();
else if (typeName == QLatin1String("real"))
return realValue();
else if (typeName == QLatin1String("color")) else if (typeName == QLatin1String("color"))
return colorValue(); return colorValue();
// ### more types... // ### more types...

View File

@@ -61,6 +61,7 @@ class IntValue;
class RealValue; class RealValue;
class BooleanValue; class BooleanValue;
class StringValue; class StringValue;
class UrlValue;
class ObjectValue; class ObjectValue;
class FunctionValue; class FunctionValue;
class Reference; class Reference;
@@ -115,6 +116,7 @@ public:
virtual const RealValue *asRealValue() const; virtual const RealValue *asRealValue() const;
virtual const BooleanValue *asBooleanValue() const; virtual const BooleanValue *asBooleanValue() const;
virtual const StringValue *asStringValue() const; virtual const StringValue *asStringValue() const;
virtual const UrlValue *asUrlValue() const;
virtual const ObjectValue *asObjectValue() const; virtual const ObjectValue *asObjectValue() const;
virtual const FunctionValue *asFunctionValue() const; virtual const FunctionValue *asFunctionValue() const;
virtual const Reference *asReference() const; virtual const Reference *asReference() const;
@@ -170,6 +172,12 @@ template <> Q_INLINE_TEMPLATE const StringValue *value_cast(const Value *v)
else return 0; else return 0;
} }
template <> Q_INLINE_TEMPLATE const UrlValue *value_cast(const Value *v)
{
if (v) return v->asUrlValue();
else return 0;
}
template <> Q_INLINE_TEMPLATE const ObjectValue *value_cast(const Value *v) template <> Q_INLINE_TEMPLATE const ObjectValue *value_cast(const Value *v)
{ {
if (v) return v->asObjectValue(); if (v) return v->asObjectValue();
@@ -236,7 +244,6 @@ public:
virtual const IntValue *asIntValue() const; virtual const IntValue *asIntValue() const;
}; };
class QMLJS_EXPORT BooleanValue: public Value class QMLJS_EXPORT BooleanValue: public Value
{ {
public: public:
@@ -251,6 +258,12 @@ public:
virtual void accept(ValueVisitor *visitor) const; virtual void accept(ValueVisitor *visitor) const;
}; };
class QMLJS_EXPORT UrlValue: public StringValue
{
public:
virtual const UrlValue *asUrlValue() const;
};
class QMLJS_EXPORT MemberProcessor class QMLJS_EXPORT MemberProcessor
{ {
MemberProcessor(const MemberProcessor &other); MemberProcessor(const MemberProcessor &other);
@@ -687,6 +700,7 @@ public:
const IntValue *intValue() const; const IntValue *intValue() const;
const BooleanValue *booleanValue() const; const BooleanValue *booleanValue() const;
const StringValue *stringValue() const; const StringValue *stringValue() const;
const UrlValue *urlValue() const;
const ColorValue *colorValue() const; const ColorValue *colorValue() const;
const AnchorLineValue *anchorLineValue() const; const AnchorLineValue *anchorLineValue() const;
@@ -787,6 +801,7 @@ private:
IntValue _intValue; IntValue _intValue;
BooleanValue _booleanValue; BooleanValue _booleanValue;
StringValue _stringValue; StringValue _stringValue;
UrlValue _urlValue;
ColorValue _colorValue; ColorValue _colorValue;
AnchorLineValue _anchorLineValue; AnchorLineValue _anchorLineValue;
QList<Value *> _registeredValues; QList<Value *> _registeredValues;