qskinny/qmlexport/QskQmlClassInfo.cpp
2024-09-11 18:10:18 +02:00

87 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::version[0], QskQmlModule::version[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;
}