aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsapi/qjsmanagedvalue.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsapi/qjsmanagedvalue.h')
-rw-r--r--src/qml/jsapi/qjsmanagedvalue.h130
1 files changed, 130 insertions, 0 deletions
diff --git a/src/qml/jsapi/qjsmanagedvalue.h b/src/qml/jsapi/qjsmanagedvalue.h
new file mode 100644
index 0000000000..a6f67b0cc0
--- /dev/null
+++ b/src/qml/jsapi/qjsmanagedvalue.h
@@ -0,0 +1,130 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QJSMANAGEDVALUE_H
+#define QJSMANAGEDVALUE_H
+
+#include <QtQml/qtqmlglobal.h>
+#include <QtQml/qjsprimitivevalue.h>
+#include <QtQml/qjsvalue.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace QV4 {
+struct Value;
+struct ExecutionEngine;
+}
+
+class QJSEngine;
+class Q_QML_EXPORT QJSManagedValue
+{
+ Q_DISABLE_COPY(QJSManagedValue)
+public:
+ enum Type {
+ Undefined,
+ Boolean,
+ Number,
+ String,
+ Object,
+ Symbol,
+ Function
+ };
+
+ QJSManagedValue() = default;
+ QJSManagedValue(QJSValue value, QJSEngine *engine);
+ QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine);
+ QJSManagedValue(const QVariant &variant, QJSEngine *engine);
+ QJSManagedValue(const QString &string, QJSEngine *engine);
+
+ ~QJSManagedValue();
+ QJSManagedValue(QJSManagedValue &&other);
+ QJSManagedValue &operator=(QJSManagedValue &&other);
+
+ bool equals(const QJSManagedValue &other) const;
+ bool strictlyEquals(const QJSManagedValue &other) const;
+
+ QJSEngine *engine() const;
+
+ QJSManagedValue prototype() const;
+ void setPrototype(const QJSManagedValue &prototype);
+
+ Type type() const;
+
+ // Compatibility with QJSValue
+ bool isUndefined() const { return type() == Undefined; }
+ bool isBoolean() const { return type() == Boolean; }
+ bool isNumber() const { return type() == Number; }
+ bool isString() const { return type() == String; }
+ bool isObject() const { return type() == Object; }
+ bool isSymbol() const { return type() == Symbol; }
+ bool isFunction() const { return type() == Function; }
+
+ // Special case of Number
+ bool isInteger() const;
+
+ // Selected special cases of Object
+ bool isNull() const;
+ bool isRegularExpression() const;
+ bool isArray() const;
+ bool isUrl() const;
+ bool isVariant() const;
+ bool isQObject() const;
+ bool isQMetaObject() const;
+ bool isDate() const;
+ bool isError() const;
+ bool isJsMetaType() const;
+
+ // Native type transformations
+ QString toString() const;
+ double toNumber() const;
+ bool toBoolean() const;
+
+ // Variant-like type transformations
+ QJSPrimitiveValue toPrimitive() const;
+ QJSValue toJSValue() const;
+ QVariant toVariant() const;
+
+ // Special cases
+ int toInteger() const;
+ QRegularExpression toRegularExpression() const;
+ QUrl toUrl() const;
+ QObject *toQObject() const;
+ const QMetaObject *toQMetaObject() const;
+ QDateTime toDateTime() const;
+
+ // Properties of objects
+ bool hasProperty(const QString &name) const;
+ bool hasOwnProperty(const QString &name) const;
+ QJSValue property(const QString &name) const;
+ void setProperty(const QString &name, const QJSValue &value);
+ bool deleteProperty(const QString &name);
+
+ // ### Qt 7 use qsizetype instead.
+ // Array indexing
+ bool hasProperty(quint32 arrayIndex) const;
+ bool hasOwnProperty(quint32 arrayIndex) const;
+ QJSValue property(quint32 arrayIndex) const;
+ void setProperty(quint32 arrayIndex, const QJSValue &value);
+ bool deleteProperty(quint32 arrayIndex);
+
+ // Calling functions
+ QJSValue call(const QJSValueList &arguments = {}) const;
+ QJSValue callWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const;
+ QJSValue callAsConstructor(const QJSValueList &arguments = {}) const;
+
+ // JavaScript metatypes
+ QJSManagedValue jsMetaType() const;
+ QStringList jsMetaMembers() const;
+ QJSManagedValue jsMetaInstantiate(const QJSValueList &values = {}) const;
+
+private:
+ friend class QJSValue;
+ friend class QJSEngine;
+
+ QJSManagedValue(QV4::ExecutionEngine *engine);
+ QV4::Value *d = nullptr;
+};
+
+QT_END_NAMESPACE
+
+#endif