4#ifndef QQMLCONTEXTDATA_P_H 
    5#define QQMLCONTEXTDATA_P_H 
   18#include <QtQml/private/qtqmlglobal_p.h> 
   19#include <QtQml/private/qqmlcontext_p.h> 
   20#include <QtQml/private/qqmlguard_p.h> 
   21#include <QtQml/private/qqmltypenamecache_p.h> 
   22#include <QtQml/private/qqmlnotifier_p.h> 
   23#include <QtQml/private/qv4identifierhash_p.h> 
   24#include <QtQml/private/qv4executablecompilationunit_p.h> 
   51    void addref()
 const { ++m_refCount; }
 
   52    void release()
 const { 
if (--m_refCount == 0) 
delete this; }
 
   53    int count()
 const { 
return m_refCount; }
 
   58        return m_typeCompilationUnit;
 
   61                                     int subComponentIndex);
 
   67    void emitDestruction();
 
   69    void clearContextRecursively();
 
   74        return m_engine && (!m_isInternal || !m_contextObject
 
   79    void setInternal(
bool isInternal) { m_isInternal = isInternal; }
 
   82    void setJSContext(
bool isJSContext) { m_isJSContext = isJSContext; }
 
   94        if (m_ownedByParent) {
 
   95            m_ownedByParent = 
false;
 
  100    void refreshExpressions();
 
  102    void addOwnedObject(
QQmlData *ownedObject);
 
  110    void installContext(
QQmlData *ddata, QmlObjectKind kind);
 
  118        if (!m_publicContext)
 
  120        return m_publicContext;
 
  137        if (!m_publicContext)
 
  140        m_publicContext = 
nullptr;
 
  141        if (m_ownedByPublicContext) {
 
  142            m_ownedByPublicContext = 
false;
 
  149        ensurePropertyNames();
 
  150        return m_propertyNameCache.value(
name);
 
  155        ensurePropertyNames();
 
  156        return m_propertyNameCache.value(
name);
 
  161        ensurePropertyNames();
 
  162        return m_propertyNameCache.findId(
index);
 
  167        Q_ASSERT(!m_propertyNameCache.isEmpty());
 
  175        m_expressions = 
nullptr;
 
  181        m_childContexts = childContexts.
data();
 
  187        m_childContexts = 
nullptr;
 
  188        return childContexts;
 
  213            if (!
data->m_baseUrlString.isEmpty())
 
  214                return data->m_baseUrlString;
 
  215            if (
data->m_typeCompilationUnit)
 
  216                return data->m_typeCompilationUnit->finalUrlString();
 
  225            if (!
data->m_baseUrl.isEmpty())
 
  226                return data->m_baseUrl;
 
  227            if (
data->m_typeCompilationUnit)
 
  228                return data->m_typeCompilationUnit->finalUrl();
 
  239        Q_ASSERT(!m_hasExtraObject || m_extraObject == 
nullptr);
 
  240        m_hasExtraObject = 
false;
 
  241        m_incubator = incubator;
 
  247        Q_ASSERT(m_hasExtraObject || m_incubator == 
nullptr);
 
  248        m_hasExtraObject = 
true;
 
  249        m_extraObject = extraObject;
 
  270        return m_typeCompilationUnit && m_typeCompilationUnit->valueTypesAreAddressable();
 
  284    struct ContextGuard : 
public QQmlGuard<QObject>
 
  294        inline bool wasSet() 
const;
 
  316          m_isInternal(
false), m_isJSContext(
false), m_isPragmaLibraryContext(
false),
 
  317          m_unresolvedNames(
false), m_hasEmittedDestruction(
false), m_isRootObjectInCreation(
false),
 
  318          m_ownedByParent(ownership == OwnedByParent),
 
  319          m_ownedByPublicContext(ownership == OwnedByPublicContext), m_hasExtraObject(
false),
 
  320          m_dummy(0), m_publicContext(publicContext), m_incubator(
nullptr)
 
  322        Q_ASSERT(!m_ownedByParent || !m_ownedByPublicContext);
 
  326        m_nextChild = m_parent->m_childContexts;
 
  328            m_nextChild->m_prevChild = &m_nextChild;
 
  329        m_prevChild = &m_parent->m_childContexts;
 
  330        m_parent->m_childContexts = 
this;
 
  335    bool hasExpressionsToRun(
bool isGlobalRefresh)
 const 
  337        return m_expressions && (!isGlobalRefresh || m_unresolvedNames);
 
  340    void refreshExpressionsRecursive(
bool isGlobal);
 
  342    void initPropertyNames() 
const;
 
  344    void ensurePropertyNames()
 const 
  346        if (m_propertyNameCache.isEmpty())
 
  348        Q_ASSERT(!m_propertyNameCache.isEmpty());
 
  355    mutable quint32 m_refCount = 1;
 
  358    quint32 m_isPragmaLibraryContext:1;
 
  360    quint32 m_hasEmittedDestruction:1;
 
  361    quint32 m_isRootObjectInCreation:1;
 
  363    quint32 m_ownedByPublicContext:1;
 
  367    [[maybe_unused]] 
quint32 m_dummy:23;
 
  382    int m_componentObjectIndex = -1;
 
  388    QObject *m_contextObject = 
nullptr;
 
  415    ContextGuard *m_idValues = 
nullptr;
 
  416    int m_idValueCount = 0;
 
  428    m_context.setTag(ObjectWasSet);
 
  433 void QQmlContextData::ContextGuard::objectDestroyedImpl(
QQmlGuardImpl *impl)
 
  435    auto This = 
static_cast<QQmlContextData::ContextGuard *
>(impl);
 
  436    if (
QObject *contextObject = This->m_context->contextObject()) {
 
  438            This->m_bindings.notify();
 
  442bool QQmlContextData::ContextGuard::wasSet()
 const 
  444    return m_context.tag() == ObjectWasSet;
 
static QObjectPrivate * get(QObject *o)
QObject * idValue(int index) const
void setContextObject(QObject *contextObject)
bool hasUnresolvedNames() const
void setRootObjectInCreation(bool rootInCreation)
int propertyIndex(const QString &name) const
void setOwnedObjects(QQmlData *ownedObjects)
QQmlContext * asQQmlContext()
void setInternal(bool isInternal)
QQmlRefPointer< QQmlTypeNameCache > imports() const
void setExtraObject(QObject *extraObject)
static QQmlRefPointer< QQmlContextData > get(QQmlContext *context)
bool valueTypesAreAddressable() const
QQmlData * ownedObjects() const
QV4::PersistentValue importedScripts() const
void setEngine(QQmlEngine *engine)
QObject * contextObject() const
QQmlRefPointer< QQmlContextData > nextChild() const
QQmlIncubatorPrivate * incubator() const
void setUnresolvedNames(bool hasUnresolvedNames)
QQmlRefPointer< QQmlContextData > takeChildContexts()
void clearPublicContext()
QQmlIncubatorPrivate * m_incubator
void setPragmaLibraryContext(bool library)
void setImportedScripts(const QV4::PersistentValue &scripts)
QString baseUrlString() const
QQmlNotifier * idValueBindings(int index) const
void setLinkedContext(const QQmlRefPointer< QQmlContextData > &context)
static QQmlRefPointer< QQmlContextData > createChild(const QQmlRefPointer< QQmlContextData > &parent)
void setBaseUrl(const QUrl &baseUrl)
QQmlComponentAttached * componentAttacheds() const
QObject * extraObject() const
void setImports(const QQmlRefPointer< QQmlTypeNameCache > &imports)
void setIncubator(QQmlIncubatorPrivate *incubator)
QQmlRefPointer< QQmlContextData > childContexts() const
void setExpressions(QQmlJavaScriptExpression *expressions)
void addPropertyNameAndIndex(const QString &name, int index)
void setBaseUrlString(const QString &baseUrlString)
static QQmlRefPointer< QQmlContextData > createRefCounted(const QQmlRefPointer< QQmlContextData > &parent)
int propertyIndex(QV4::String *name) const
bool isIdValueSet(int index) const
QQmlRefPointer< QV4::ExecutableCompilationUnit > typeCompilationUnit() const
QQmlRefPointer< QQmlContextData > linkedContext() const
QQmlContext * publicContext() const
QQmlJavaScriptExpression * takeExpressions()
bool isPragmaLibraryContext() const
QQmlRefPointer< QQmlContextData > parent() const
void setChildContexts(const QQmlRefPointer< QQmlContextData > &childContexts)
void setJSContext(bool isJSContext)
QQmlEngine * engine() const
QQmlContextPrivate * asQQmlContextPrivate()
bool isRootObjectInCreation() const
QString propertyName(int index) const
static QQmlContextPrivate * get(QQmlContext *context)
The QQmlContext class defines a context within a QML engine.
The QQmlEngine class provides an environment for instantiating QML components.
QQmlGuard< QObject > & operator=(const QQmlGuard< QObject > &o)
\macro QT_RESTRICTED_CAST_FROM_ASCII
Combined button and popup list for selecting options.
#define QT_WARNING_DISABLE_GCC(text)
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
static QUrl resolvedUrl(const QUrl &url, const QQmlRefPointer< QQmlContextData > &context)
QUrl url("example.com")
[constructor-url-reference]
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent