summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2017-09-26 15:21:50 +0100
committerSean Harmer <sean.harmer@kdab.com>2017-09-27 12:51:00 +0000
commit78175fa89bc95b88466ecf1ac8b42244762e62e2 (patch)
treeb5fe152b2e3288878a185cb95501da0fa1f4ecf8 /src
parenta286529cbe2ae51e6bf19aaea4203afd6b4884de (diff)
Add convenience function to ChannelMapper to return list of Mappings
Caches the resolution of node ids to ChannelMappings. Updated test to check this new feature. Change-Id: I0c2f539c2bd91e7918b98c5b60c9ca486b63ec08 Reviewed-by: Kevin Ottens <kevin.ottens@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/animation/backend/channelmapper.cpp20
-rw-r--r--src/animation/backend/channelmapper_p.h12
2 files changed, 32 insertions, 0 deletions
diff --git a/src/animation/backend/channelmapper.cpp b/src/animation/backend/channelmapper.cpp
index 0e5555096..48a1335fa 100644
--- a/src/animation/backend/channelmapper.cpp
+++ b/src/animation/backend/channelmapper.cpp
@@ -38,6 +38,7 @@
#include <Qt3DAnimation/qchannelmapper.h>
#include <Qt3DAnimation/private/qchannelmapper_p.h>
#include <Qt3DAnimation/private/animationlogging_p.h>
+#include <Qt3DAnimation/private/managers_p.h>
#include <Qt3DCore/qpropertyupdatedchange.h>
#include <Qt3DCore/qpropertynodeaddedchange.h>
#include <Qt3DCore/qpropertynoderemovedchange.h>
@@ -50,6 +51,7 @@ namespace Animation {
ChannelMapper::ChannelMapper()
: BackendNode(ReadOnly)
, m_mappingIds()
+ , m_isDirty(true)
{
}
@@ -58,12 +60,15 @@ void ChannelMapper::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr
const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QChannelMapperData>>(change);
const auto &data = typedChange->data;
m_mappingIds = data.mappingIds;
+ m_isDirty = true;
}
void ChannelMapper::cleanup()
{
setEnabled(false);
m_mappingIds.clear();
+ m_mappings.clear();
+ m_isDirty = true;
}
void ChannelMapper::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
@@ -74,6 +79,7 @@ void ChannelMapper::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
if (change->propertyName() == QByteArrayLiteral("mappings")) {
m_mappingIds.push_back(change->addedNodeId());
setDirty(Handler::ChannelMappingsDirty);
+ m_isDirty = true;
}
break;
}
@@ -83,6 +89,7 @@ void ChannelMapper::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
if (change->propertyName() == QByteArrayLiteral("mappings")) {
m_mappingIds.removeOne(change->removedNodeId());
setDirty(Handler::ChannelMappingsDirty);
+ m_isDirty = true;
}
break;
}
@@ -93,6 +100,19 @@ void ChannelMapper::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
QBackendNode::sceneChangeEvent(e);
}
+void ChannelMapper::updateMappings() const
+{
+ m_mappings.clear();
+ m_mappings.reserve(m_mappingIds.size());
+ const auto mappingManager = m_handler->channelMappingManager();
+ for (const auto &mappingId : m_mappingIds) {
+ const auto mapping = mappingManager->lookupResource(mappingId);
+ Q_ASSERT(mapping);
+ m_mappings.push_back(mapping);
+ }
+ m_isDirty = false;
+}
+
} // namespace Animation
} // namespace Qt3DAnimation
diff --git a/src/animation/backend/channelmapper_p.h b/src/animation/backend/channelmapper_p.h
index 710de01ab..8d8f03511 100644
--- a/src/animation/backend/channelmapper_p.h
+++ b/src/animation/backend/channelmapper_p.h
@@ -74,10 +74,22 @@ public:
void setMappingIds(const QVector<Qt3DCore::QNodeId> &mappingIds) { m_mappingIds = mappingIds; }
QVector<Qt3DCore::QNodeId> mappingIds() const { return m_mappingIds; }
+ QVector<ChannelMapping*> mappings() const
+ {
+ if (m_isDirty)
+ updateMappings();
+ return m_mappings;
+ }
+
private:
void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL;
+ void updateMappings() const;
QVector<Qt3DCore::QNodeId> m_mappingIds;
+
+ // Cached data
+ mutable QVector<ChannelMapping*> m_mappings;
+ mutable bool m_isDirty;
};
} // namespace Animation