aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/v8/qv8variantwrapper.cpp
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2011-07-01 16:30:06 +1000
committerQt by Nokia <qt-info@nokia.com>2011-07-01 08:32:09 +0200
commitc4b0954b7de4f82e1d4ecc55bec59b3cef13c7f1 (patch)
tree28f6af46e9c90ec7fd4b5c028cb1f47d3e0d6a5b /src/declarative/qml/v8/qv8variantwrapper.cpp
parentc2d11d0b6924f3b454efd8960e067e98d6a3f593 (diff)
Add toString for variants
Change-Id: Ia64adeb3640f7f7eedccd7015de729969232a07f Reviewed-on: http://codereview.qt.nokia.com/987 Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'src/declarative/qml/v8/qv8variantwrapper.cpp')
-rw-r--r--src/declarative/qml/v8/qv8variantwrapper.cpp31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/declarative/qml/v8/qv8variantwrapper.cpp b/src/declarative/qml/v8/qv8variantwrapper.cpp
index 37e998d988..9d486d05b7 100644
--- a/src/declarative/qml/v8/qv8variantwrapper.cpp
+++ b/src/declarative/qml/v8/qv8variantwrapper.cpp
@@ -70,10 +70,15 @@ QV8VariantWrapper::~QV8VariantWrapper()
void QV8VariantWrapper::init(QV8Engine *engine)
{
m_engine = engine;
+ m_toString = qPersistentNew<v8::Function>(v8::FunctionTemplate::New(ToString)->GetFunction());
+
{
v8::Local<v8::FunctionTemplate> ft = v8::FunctionTemplate::New();
- ft->InstanceTemplate()->SetNamedPropertyHandler(Getter, Setter);
+ ft->InstanceTemplate()->SetFallbackPropertyHandler(Getter, Setter);
ft->InstanceTemplate()->SetHasExternalResource(true);
+ ft->InstanceTemplate()->SetAccessor(v8::String::New("toString"), ToStringGetter, 0,
+ m_toString, v8::DEFAULT,
+ v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete));
m_constructor = qPersistentNew<v8::Function>(ft->GetFunction());
}
{
@@ -88,6 +93,9 @@ void QV8VariantWrapper::init(QV8Engine *engine)
ft->InstanceTemplate()->SetAccessor(v8::String::New("destroy"), DestroyGetter, 0,
m_destroy, v8::DEFAULT,
v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete));
+ ft->InstanceTemplate()->SetAccessor(v8::String::New("toString"), ToStringGetter, 0,
+ m_toString, v8::DEFAULT,
+ v8::PropertyAttribute(v8::ReadOnly | v8::DontDelete));
m_scarceConstructor = qPersistentNew<v8::Function>(ft->GetFunction());
}
@@ -95,6 +103,7 @@ void QV8VariantWrapper::init(QV8Engine *engine)
void QV8VariantWrapper::destroy()
{
+ qPersistentDispose(m_toString);
qPersistentDispose(m_destroy);
qPersistentDispose(m_preserve);
qPersistentDispose(m_scarceConstructor);
@@ -167,6 +176,13 @@ v8::Handle<v8::Value> QV8VariantWrapper::DestroyGetter(v8::Local<v8::String> pro
return info.Data();
}
+v8::Handle<v8::Value> QV8VariantWrapper::ToStringGetter(v8::Local<v8::String> property,
+ const v8::AccessorInfo &info)
+{
+ Q_UNUSED(property);
+ return info.Data();
+}
+
v8::Handle<v8::Value> QV8VariantWrapper::Preserve(const v8::Arguments &args)
{
QV8VariantResource *resource = v8_resource_cast<QV8VariantResource>(args.This());
@@ -186,4 +202,17 @@ v8::Handle<v8::Value> QV8VariantWrapper::Destroy(const v8::Arguments &args)
return v8::Undefined();
}
+v8::Handle<v8::Value> QV8VariantWrapper::ToString(const v8::Arguments &args)
+{
+ QV8VariantResource *resource = v8_resource_cast<QV8VariantResource>(args.This());
+ if (resource) {
+ QString result = resource->data.toString();
+ if (result.isEmpty() && !resource->data.canConvert(QVariant::String))
+ result = QString::fromLatin1("QVariant(%0)").arg(QString::fromLatin1(resource->data.typeName()));
+ return resource->engine->toString(result);
+ } else {
+ return v8::Undefined();
+ }
+}
+
QT_END_NAMESPACE