1/****************************************************************************
2**
3** Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB).
4** Contact: http://www.qt-project.org/legal
5**
6** This file is part of the Qt3D module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL3$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see http://www.qt.io/terms-conditions. For further
15** information use the contact form at http://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or later as published by the Free
28** Software Foundation and appearing in the file LICENSE.GPL included in
29** the packaging of this file. Please review the following information to
30** ensure the GNU General Public License version 2.0 requirements will be
31** met: http://www.gnu.org/licenses/gpl-2.0.html.
32**
33** $QT_END_LICENSE$
34**
35****************************************************************************/
36
37#include "qchannelmapper.h"
38#include "qchannelmapper_p.h"
39#include <Qt3DCore/qscenechange.h>
40#include <Qt3DAnimation/qchannelmapping.h>
41
42QT_BEGIN_NAMESPACE
43
44namespace Qt3DAnimation {
45
46QChannelMapperPrivate::QChannelMapperPrivate()
47 : Qt3DCore::QNodePrivate()
48{
49}
50
51/*!
52 \class Qt3DAnimation::QChannelMapper
53 \inmodule Qt3DAnimation
54 \brief Allows to map the channels within the clip onto properties of
55 objects in the application.
56
57*/
58QChannelMapper::QChannelMapper(Qt3DCore::QNode *parent)
59 : Qt3DCore::QNode(*new QChannelMapperPrivate, parent)
60{
61}
62
63QChannelMapper::QChannelMapper(QChannelMapperPrivate &dd, Qt3DCore::QNode *parent)
64 : Qt3DCore::QNode(dd, parent)
65{
66}
67
68QChannelMapper::~QChannelMapper()
69{
70}
71
72void QChannelMapper::addMapping(QAbstractChannelMapping *mapping)
73{
74 Q_ASSERT(mapping);
75 Q_D(QChannelMapper);
76 if (!d->m_mappings.contains(t: mapping)) {
77 d->m_mappings.append(t: mapping);
78
79 // Ensures proper bookkeeping
80 d->registerDestructionHelper(node: mapping, func: &QChannelMapper::removeMapping, d->m_mappings);
81
82 // We need to add it as a child of the current node if it has been declared inline
83 // Or not previously added as a child of the current node so that
84 // 1) The backend gets notified about it's creation
85 // 2) When the current node is destroyed, it gets destroyed as well
86 if (!mapping->parent())
87 mapping->setParent(this);
88
89 d->updateNode(node: mapping, property: "mappings", change: Qt3DCore::PropertyValueAdded);
90 }
91}
92
93void QChannelMapper::removeMapping(QAbstractChannelMapping *mapping)
94{
95 Q_ASSERT(mapping);
96 Q_D(QChannelMapper);
97 if (!d->m_mappings.removeOne(t: mapping))
98 return;
99 d->updateNode(node: mapping, property: "mappings", change: Qt3DCore::PropertyValueRemoved);
100 // Remove bookkeeping connection
101 d->unregisterDestructionHelper(node: mapping);
102}
103
104QVector<QAbstractChannelMapping *> QChannelMapper::mappings() const
105{
106 Q_D(const QChannelMapper);
107 return d->m_mappings;
108}
109
110Qt3DCore::QNodeCreatedChangeBasePtr QChannelMapper::createNodeCreationChange() const
111{
112 auto creationChange = Qt3DCore::QNodeCreatedChangePtr<QChannelMapperData>::create(arguments: this);
113 auto &data = creationChange->data;
114 Q_D(const QChannelMapper);
115 data.mappingIds = Qt3DCore::qIdsForNodes(nodes: d->m_mappings);
116 return creationChange;
117}
118
119} // namespace Qt3DAnimation
120
121QT_END_NAMESPACE
122

source code of qt3d/src/animation/frontend/qchannelmapper.cpp