diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2011-07-01 16:30:06 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-07-01 08:32:09 +0200 |
commit | c4b0954b7de4f82e1d4ecc55bec59b3cef13c7f1 (patch) | |
tree | 28f6af46e9c90ec7fd4b5c028cb1f47d3e0d6a5b /src/declarative/qml/v8/qv8variantwrapper.cpp | |
parent | c2d11d0b6924f3b454efd8960e067e98d6a3f593 (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.cpp | 31 |
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 |