summaryrefslogtreecommitdiffstats
path: root/src/dm/systems/cores/SlideCoreProducer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dm/systems/cores/SlideCoreProducer.h')
-rw-r--r--src/dm/systems/cores/SlideCoreProducer.h190
1 files changed, 190 insertions, 0 deletions
diff --git a/src/dm/systems/cores/SlideCoreProducer.h b/src/dm/systems/cores/SlideCoreProducer.h
new file mode 100644
index 0000000..dec0297
--- /dev/null
+++ b/src/dm/systems/cores/SlideCoreProducer.h
@@ -0,0 +1,190 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** 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 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** 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$
+**
+****************************************************************************/
+#pragma once
+#ifndef SLIDECOREPRODUCERH
+#define SLIDECOREPRODUCERH
+#include "Qt3DSDMTransactions.h"
+#include "SimpleSlideCore.h"
+#include "Qt3DSDMSignals.h"
+
+namespace qt3dsdm {
+struct SlideInstancePropertyKey
+{
+ int m_Slide;
+ int m_Instance;
+ int m_Property;
+ SlideInstancePropertyKey(int slide, int inst, int prop)
+ : m_Slide(slide)
+ , m_Instance(inst)
+ , m_Property(prop)
+ {
+ }
+ SlideInstancePropertyKey()
+ : m_Slide(0)
+ , m_Instance(0)
+ , m_Property(0)
+ {
+ }
+
+ bool operator==(const SlideInstancePropertyKey &inOther) const
+ {
+ return m_Slide == inOther.m_Slide && m_Instance == inOther.m_Instance
+ && m_Property == inOther.m_Property;
+ }
+};
+
+struct SlideInstancePropertyKeyHasher
+{
+ std::size_t operator()(const SlideInstancePropertyKey &inEntry) const
+ {
+ return std::hash<int>()(inEntry.m_Slide) ^ std::hash<int>()(inEntry.m_Instance)
+ ^ std::hash<int>()(inEntry.m_Property);
+ }
+};
+
+typedef std::shared_ptr<IMergeableTransaction<SInternValue>> TSlidePropertyMergeMapEntry;
+typedef std::unordered_map<SlideInstancePropertyKey, TSlidePropertyMergeMapEntry,
+ SlideInstancePropertyKeyHasher>
+ TSlidePropertyMergeMap;
+
+class CSlideCoreProducer : public ISlideCore,
+ public ITransactionProducer,
+ public ISlideCoreSignalProvider
+{
+ Q_DISABLE_COPY(CSlideCoreProducer)
+
+ TTransactionConsumerPtr m_Consumer;
+ TSimpleSlideCorePtr m_Data;
+ TSignalItemPtr m_SlideCoreSignaller;
+ TSlidePropertyMergeMap m_PropertyMergeMap;
+
+public:
+ CSlideCoreProducer(TStringTablePtr inStrTable)
+ : m_Data(new CSimpleSlideCore(inStrTable))
+ {
+ InitSignaller();
+ }
+
+ IStringTable &GetStringTable() const override { return m_Data->GetStringTable(); }
+ TStringTablePtr GetStringTablePtr() const override { return m_Data->GetStringTablePtr(); }
+
+ TSimpleSlideCorePtr GetTransactionlessSlideCore() { return m_Data; }
+ TSimpleSlideCorePtr GetTransactionlessSlideCore() const { return m_Data; }
+
+ Qt3DSDMSlideHandle CreateSlide(Qt3DSDMInstanceHandle inInstance) override;
+ Qt3DSDMInstanceHandle GetSlideInstance(Qt3DSDMSlideHandle inSlide) const override;
+ Qt3DSDMSlideHandle GetSlideByInstance(Qt3DSDMInstanceHandle inSlide) const override;
+ void DeleteSlide(Qt3DSDMSlideHandle inSlide, TInstanceHandleList &outInstances) override;
+ void GetSlides(TSlideHandleList &outSlides) const override;
+
+ float GetSlideTime(Qt3DSDMSlideHandle inSlide) const override;
+ void SetSlideTime(Qt3DSDMSlideHandle inSlide, float inNewTime) override;
+
+ void DeriveSlide(Qt3DSDMSlideHandle inSlide, Qt3DSDMSlideHandle inParent, int inIndex = -1) override;
+ Qt3DSDMSlideHandle GetParentSlide(Qt3DSDMSlideHandle inSlide) const override;
+ void GetChildSlides(Qt3DSDMSlideHandle inSlide, TSlideHandleList &outChildren) const override;
+ int GetChildIndex(Qt3DSDMSlideHandle inParent, Qt3DSDMSlideHandle inChild) const override;
+
+ bool GetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override;
+ void SetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+ void ForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+ void forceSetInstancePropertyValueOnAllSlides(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) override;
+ bool GetSpecificInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override;
+ void GetSpecificInstancePropertyValues(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleValuePairList &outValues) override
+ {
+ return m_Data->GetSpecificInstancePropertyValues(inSlide, inInstance, outValues);
+ }
+ bool ContainsProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) const override;
+ void GetSlidePropertyEntries(Qt3DSDMSlideHandle inSlide, TSlideEntryList &outEntries) const override;
+
+ void PushPropertyValueToChildren(Qt3DSDMSlideHandle inParent, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+ void ClearChildrenPropertyValues(Qt3DSDMSlideHandle inParent, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) override;
+ void DeleteAllInstanceEntries(Qt3DSDMInstanceHandle inHandle) override;
+ void DeleteAllPropertyEntries(Qt3DSDMPropertyHandle inHandle) override;
+ void DeleteAllInstancePropertyEntries(const TInstanceHandleList &inInstances,
+ const TPropertyHandleList &inProperties) override;
+
+ void GetIntersectingProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2,
+ TSlideEntryList &outEntries) const override;
+ void PushIntersectingProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2,
+ Qt3DSDMSlideHandle inDestination) override;
+ void CopyProperties(Qt3DSDMSlideHandle inSourceSlide, Qt3DSDMInstanceHandle inSourceInstance,
+ Qt3DSDMSlideHandle inDestSlide, Qt3DSDMInstanceHandle inDestInstance) override;
+
+ bool IsSlide(Qt3DSDMSlideHandle inSlide) const override;
+
+ bool HandleValid(int inHandle) const override;
+
+ void SetConsumer(TTransactionConsumerPtr inConsumer) override;
+
+ //===================================================================
+ // Signals
+ //===================================================================
+
+ virtual TSignalConnectionPtr
+ ConnectSlideCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectBeforeSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override;
+ TSignalConnectionPtr ConnectSlideDerived(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMSlideHandle, int)> &inCallback) override;
+ TSignalConnectionPtr ConnectInstancePropertyValueSet(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback) override;
+ TSignalConnectionPtr ConnectInstancePropertyValueRemoved(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectSlideTimeChanged(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override;
+
+private:
+ inline void DoForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue);
+ void InitSignaller();
+ ISlideCoreSignalProvider *GetSignalProvider();
+ ISlideCoreSignalSender *GetSignalSender();
+};
+}
+
+#endif