diff options
Diffstat (limited to 'src/api/studio3d/q3dsdataoutput.cpp')
-rw-r--r-- | src/api/studio3d/q3dsdataoutput.cpp | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/src/api/studio3d/q3dsdataoutput.cpp b/src/api/studio3d/q3dsdataoutput.cpp new file mode 100644 index 0000000..3cb13a0 --- /dev/null +++ b/src/api/studio3d/q3dsdataoutput.cpp @@ -0,0 +1,225 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt 3D Studio. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "q3dsdataoutput_p.h" +#include "q3dspresentation_p.h" +#include "q3dscommandqueue_p.h" + +/*! + \qmltype DataOutput + \instantiates Q3DSDataOutput + \inqmlmodule Qt3DStudio + \ingroup OpenGLRuntime + \brief Provides notifications from data output entries in Qt 3D Studio presentation. + This class is a convenience class for listening for changes in the Qt 3D Studio + presentation attributes. DataOutput provides a clean contract between the presentation + design and the code. It hides the presentation details from the code while providing a + contractual access point to code to be notified when aspects of the presentation change + (e.g. movement of an element in the presentation due to timeline animation). + + DataOutput can be attached to same attributes in the design as DataInput is, including + presentation timeline. Only exception is slide changes. Slide changes are already notified + through \c{Presentation::slideEntered} and \c{Presentation::slideExited} signals. + + \note There is a performance cost for each registered DataOutput, so try to avoid + creating unnecessary DataOutputs. + + \sa Presentation, DataInput, Presentation::slideExited, Presentation::slideEntered + \sa Presentation::customSignalEmitted +*/ + +/*! + \class Q3DSDataOutput + \inmodule OpenGLRuntime + \since Qt 3D Studio 2.4 + \brief Provides notifications from data output entries in Qt 3D Studio presentation. + This class is a convenience class for listening for changes in the Qt 3D Studio + presentation attributes. DataOutput provides a clean contract between the presentation + design and the code. It hides the presentation details from the code while providing a + contractual access point to code to be notified when aspects of the presentation change + (e.g. movement of an element in the presentation due to timeline animation). + + DataOutput can be attached to same attributes in the design as DataInput is, including + presentation timeline. Only excaption is slide changes Slide changes are already notified + through \c{Q3DSPresentation::slideEntered} and \c{Q3DSPresentation::slideExited} signals. + + \note There is a performance cost for each registered DataOutput, so try to avoid + creating unnecessary DataOutputs. + + For other integration points between code and presentation see: + \sa Q3DSPresentation::customSignalEmitted + \sa Q3DSPresentation::slideEntered + \sa Q3DSPresentation::slideExited + \sa Q3DSDataInput + + \sa Q3DSPresentation +*/ +Q3DSDataOutput::Q3DSDataOutput(QObject *parent) + : QObject(parent) + , d_ptr(new Q3DSDataOutputPrivate(this)) +{ + +} + +Q3DSDataOutput::Q3DSDataOutput(const QString &name, QObject *parent) + : QObject(parent) + , d_ptr(new Q3DSDataOutputPrivate(this)) +{ + d_ptr->m_name = name; +} + +Q3DSDataOutput::~Q3DSDataOutput() +{ + delete d_ptr; +} + +/*! + \qmlproperty string DataOutput::name + + Specifies the name of the observed data output element in the + presentation. The name must match a name of a data output defined + in the presentation. This property must be set before setting the value + property. + */ + +/*! + \property Q3DSDataOutput::name + + Specifies the name of the observed data output element in the + presentation. The name must match a name of a data output defined + in the presentation. + + This property must be set before setting the value property. + The initial value is provided via the constructor, but the name + can also be changed later on. + */ +QString Q3DSDataOutput::name() const +{ + return d_ptr->m_name; +} + +void Q3DSDataOutput::setName(const QString &name) +{ + if (d_ptr->m_name != name) { + d_ptr->m_name = name; + if (d_ptr->m_presentation) + d_ptr->m_presentation->registerDataOutput(this); + Q_EMIT nameChanged(name); + } +} + +/*! + \qmlproperty DataOutput::value + + Contains the read-only value of the controlled data output element in the + presentation. + + The value of this property accounts for actual value in the last processed + frame of the presentation. This includes animation timeline driven changes, + changes done via DataInput and changes done via Behavior scripts. +*/ + +/*! + \property Q3DSDataOutput::value + + Contains the read-only value of the controlled data output element in the + presentation. + + The value of this property accounts for actual value in the last processed + frame of the presentation. This includes animation timeline driven changes, + changes done via DataInput and changes done via Behavior scripts. +*/ +QVariant Q3DSDataOutput::value() const +{ + return d_ptr->m_value; +} + +/*! + * \qmlsignal DataOutput::valueChanged + Emitted when the value of the observed DataOutput has changed in the + presentation. + \param newValue The new value of the observed DataOutput. + */ + +/*! + \fn Q3DSDataOutput::valueChanged + Emitted when the value of the observed DataOutput has changed in the + presentation. + \param newValue The new value of the observed DataOutput. + */ + +/*! + * \internal + */ +void Q3DSDataOutput::setValue(const QVariant &value) +{ + if (d_ptr->m_value == value) + return; + + d_ptr->m_value = value; + Q_EMIT valueChanged(value); +} + +void Q3DSDataOutputPrivate::setPresentation(Q3DSPresentation *presentation) +{ + m_presentation = presentation; +} + +Q3DSDataOutputPrivate::Q3DSDataOutputPrivate(Q3DSDataOutput *parent) + : q_ptr(parent) +{ +} + +Q3DSDataOutputPrivate::~Q3DSDataOutputPrivate() +{ + if (m_presentation) + m_presentation->unregisterDataOutput(q_ptr); +} + +void Q3DSDataOutputPrivate::setValue(const QVariant &value) +{ + m_value = value; + Q_EMIT q_ptr->valueChanged(value); +} + +void Q3DSDataOutputPrivate::setViewerApp(Q3DSViewer::Q3DSViewerApp *app) +{ + m_viewerApp = app; + + if (m_viewerApp && m_value.isValid()) + setValue(m_value); +} + +void Q3DSDataOutputPrivate::setCommandQueue(CommandQueue *queue) +{ + m_commandQueue = queue; + + if (m_commandQueue && m_value.isValid()) + setValue(m_value); +} |