// Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include QT_BEGIN_NAMESPACE namespace Qt3DRender { namespace Render { namespace Quick { Quick3DTechniqueFilter::Quick3DTechniqueFilter(QObject *parent) : QObject(parent) { } QQmlListProperty Quick3DTechniqueFilter::matchList() { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) using qt_size_type = qsizetype; #else using qt_size_type = int; #endif using ListContentType = QFilterKey; auto appendFunction = [](QQmlListProperty *list, ListContentType *criterion) { Quick3DTechniqueFilter *filter = qobject_cast(list->object); if (filter) { criterion->setParent(filter->parentTechniqueFilter()); filter->parentTechniqueFilter()->addMatch(criterion); } }; auto countFunction = [](QQmlListProperty *list) -> qt_size_type { Quick3DTechniqueFilter *filter = qobject_cast(list->object); if (filter) return filter->parentTechniqueFilter()->matchAll().size(); return 0; }; auto atFunction = [](QQmlListProperty *list, qt_size_type index) -> ListContentType * { Quick3DTechniqueFilter *filter = qobject_cast(list->object); if (filter) return filter->parentTechniqueFilter()->matchAll().at(index); return nullptr; }; auto clearFunction = [](QQmlListProperty *list) { Quick3DTechniqueFilter *filter = qobject_cast(list->object); if (filter) { const auto criteria = filter->parentTechniqueFilter()->matchAll(); for (QFilterKey *criterion : criteria) filter->parentTechniqueFilter()->removeMatch(criterion); } }; return QQmlListProperty(this, nullptr, appendFunction, countFunction, atFunction, clearFunction); } QQmlListProperty Quick3DTechniqueFilter::parameterList() { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) using qt_size_type = qsizetype; #else using qt_size_type = int; #endif using ListContentType = QParameter; auto appendFunction = [](QQmlListProperty *list, ListContentType *param) { Quick3DTechniqueFilter *techniqueFilter = qobject_cast(list->object); techniqueFilter->parentTechniqueFilter()->addParameter(param); }; auto countFunction = [](QQmlListProperty *list) -> qt_size_type { Quick3DTechniqueFilter *techniqueFilter = qobject_cast(list->object); return techniqueFilter->parentTechniqueFilter()->parameters().size(); }; auto atFunction = [](QQmlListProperty *list, qt_size_type index) -> ListContentType * { Quick3DTechniqueFilter *techniqueFilter = qobject_cast(list->object); return techniqueFilter->parentTechniqueFilter()->parameters().at(index); }; auto clearFunction = [](QQmlListProperty *list) { Quick3DTechniqueFilter *techniqueFilter = qobject_cast(list->object); const auto parameters = techniqueFilter->parentTechniqueFilter()->parameters(); for (QParameter *p : parameters) techniqueFilter->parentTechniqueFilter()->removeParameter(p); }; return QQmlListProperty(this, nullptr, appendFunction, countFunction, atFunction, clearFunction); } } // namespace Quick } // namespace Render } // namespace Qt3DRender QT_END_NAMESPACE #include "moc_quick3dtechniquefilter_p.cpp"