86 lines
2.4 KiB
C++
86 lines
2.4 KiB
C++
|
/******************************************************************************
|
||
|
* QSkinny - Copyright (C) The authors
|
||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#include "QskQmlClassInfo.h"
|
||
|
#include "QskQmlModule.h"
|
||
|
#include <cstring>
|
||
|
|
||
|
using namespace QskQml;
|
||
|
|
||
|
ClassInfo::ClassInfo( const char* qmlName, const QMetaObject* metaObject )
|
||
|
{
|
||
|
m_info.structVersion = QSK_STRUCT_VERSION;
|
||
|
|
||
|
m_info.objectSize = 0;
|
||
|
m_info.create = nullptr;
|
||
|
m_info.userdata = nullptr; // unused
|
||
|
|
||
|
/*
|
||
|
This one was introdued with Qt 6.x, but never worked
|
||
|
as expected. With Qt 6.5 it has been replaced by adding
|
||
|
the creationMethod that is triggering to look for
|
||
|
invokable constructors.
|
||
|
Let's check if it makes any sense to initialize it below
|
||
|
at all. TODO ...
|
||
|
*/
|
||
|
m_info.createValueType = nullptr;
|
||
|
|
||
|
m_info.uri = QskQmlModule::name;
|
||
|
m_info.version = QTypeRevision::fromVersion( QskQmlModule::name[0], QskQmlModule::name[1] );
|
||
|
|
||
|
m_info.elementName = qmlName;
|
||
|
m_info.metaObject = metaObject;
|
||
|
|
||
|
/*
|
||
|
We do not use attached properties as it always comes with
|
||
|
creating extra QObjects.
|
||
|
*/
|
||
|
m_info.attachedPropertiesFunction = nullptr;
|
||
|
m_info.attachedPropertiesMetaObject = nullptr;
|
||
|
|
||
|
m_info.parserStatusCast = m_info.valueSourceCast = m_info.valueInterceptorCast = -1;
|
||
|
|
||
|
/*
|
||
|
We do not use extensions as it always comes with
|
||
|
creating extra QObjects.
|
||
|
*/
|
||
|
m_info.extensionObjectCreate = nullptr;
|
||
|
m_info.extensionMetaObject = nullptr;
|
||
|
|
||
|
m_info.customParser = nullptr; // QQmlCustomParser, unused
|
||
|
|
||
|
m_info.revision = QTypeRevision::zero();
|
||
|
m_info.finalizerCast = -1;
|
||
|
|
||
|
m_info.creationMethod = QQmlPrivate::ValueTypeCreationMethod::Structured;
|
||
|
}
|
||
|
|
||
|
QByteArray ClassInfo::normalizedListName(
|
||
|
const char* containerName, const QMetaObject& metaObject )
|
||
|
{
|
||
|
static QByteArray name;
|
||
|
name.reserve( 256 );
|
||
|
|
||
|
const int length1 = strlen( containerName );
|
||
|
const int length2 = strlen( metaObject.className() );
|
||
|
|
||
|
name.resize( length1 + length2 + 3 );
|
||
|
|
||
|
auto p = name.data();
|
||
|
|
||
|
memcpy( p, containerName, size_t( length1 ) );
|
||
|
p += length1;
|
||
|
|
||
|
*p++ = '<';
|
||
|
|
||
|
memcpy( p, metaObject.className(), size_t( length2 ) );
|
||
|
p += length2;
|
||
|
|
||
|
*p++ = '>';
|
||
|
*p++ = '\0';
|
||
|
|
||
|
return name;
|
||
|
}
|