// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only

/*!
    \example simpleruntimeloader
    \ingroup quick3d-examples
    \title Qt Quick 3D - Simple RuntimeLoader Example
    \examplecategory {3D}
    \brief Demonstrates loading a 3D asset at runtime and querying its scene objects.
    \image simpleruntimeloader.jpg
           {Side panel listing materials, cameras, and lights alongside a 3D scene}

    This example shows how to use \l RuntimeLoader to load a 3D asset at runtime and
    how to use \l {RuntimeLoader::queryAll}{query} functions to discover the materials,
    cameras, and lights contained in the loaded scene.

    \section1 Loading the Asset

    The \l RuntimeLoader item loads a glTF 2.0 asset and creates the corresponding
    Qt Quick 3D objects as its children. The \l {RuntimeLoader::source}{source} property
    points at the asset file:

    \snippet simpleruntimeloader/main.qml runtime-loader

    Once the \l {RuntimeLoader::status}{status} changes to \c RuntimeLoader.Success the
    scene is ready and the query functions can be called.

    \section1 Querying Scene Objects

    After a successful load, \l {RuntimeLoader::queryAll}{queryAll()} returns a list of
    all scene objects that match a given \l {RuntimeLoader::QueryFilter}{QueryFilter}.
    The example retrieves materials, cameras, and lights in one go:

    \snippet simpleruntimeloader/main.qml queryAll

    The returned lists are plain JavaScript arrays of \l QQuick3DObject references. They
    can be assigned directly to a \l {ListView::model}{ListView model} or used to set
    active scene properties such as \l {View3D::camera}{View3D.camera}.

    \section1 Interacting with Scene Objects

    \section2 Materials

    Each entry in the material list can be selected to apply one of the colour swatches
    to it. The helper function casts the returned object to the correct material type
    before writing to the colour property:

    \snippet simpleruntimeloader/main.qml query-function

    \section2 Cameras

    Clicking a camera entry in the side panel assigns it to \l {View3D::camera}{View3D.camera},
    switching the active viewpoint immediately.

    \section2 Lights

    Each light in the side panel has a toggle that sets the light's
    \l {Node::visible}{visible} property, enabling or disabling it without removing it
    from the scene:

    \badcode
    Switch {
        checked: modelData.visible
        onToggled: modelData.visible = checked
    }
    \endcode
*/
