summaryrefslogtreecommitdiffstats
path: root/src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.cpp')
m---------src/Runtime/ogl-runtime0
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.cpp867
2 files changed, 0 insertions, 867 deletions
diff --git a/src/Runtime/ogl-runtime b/src/Runtime/ogl-runtime
new file mode 160000
+Subproject 2025912174c4cf99270b7439ec3b021e1d089ae
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.cpp b/src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.cpp
deleted file mode 100644
index d6d88932..00000000
--- a/src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.cpp
+++ /dev/null
@@ -1,867 +0,0 @@
-/****************************************************************************
-**
-** 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$
-**
-****************************************************************************/
-#include "Qt3DSDMPrefix.h"
-#ifdef WIN32
-#pragma warning(disable : 4503)
-#endif
-#include "SlideSystem.h"
-#include "SimpleSlideCore.h"
-
-using namespace std;
-
-namespace qt3dsdm {
-
-SSlideSystem::SSlideSystem(TDataCorePtr inDataCore, TSlideCorePtr inSlideCore,
- TSlideGraphCorePtr inSlideGraphCore, TAnimationCorePtr inAnimationCore,
- Qt3DSDMInstanceHandle inSlideInstance,
- Qt3DSDMPropertyHandle inComponentGuidProperty)
- : m_DataCore(inDataCore)
- , m_SlideCore(inSlideCore)
- , m_SlideGraphCore(inSlideGraphCore)
- , m_AnimationCore(inAnimationCore)
- , m_SlideInstance(inSlideInstance)
- , m_ComponentGuid(inComponentGuidProperty)
-{
- m_Signaller = CreateSlideSystemSignaller();
-}
-void SSlideSystem::SetPropertySystem(TPropertySystemPtr inPropertySystem)
-{
- m_PropertySystem = inPropertySystem;
-}
-
-Qt3DSDMSlideHandle SSlideSystem::CreateMasterSlide()
-{
- Qt3DSDMInstanceHandle theSlideInstance = m_DataCore->CreateInstance();
- m_DataCore->DeriveInstance(theSlideInstance, m_SlideInstance);
- Qt3DSDMSlideHandle retval = m_SlideCore->CreateSlide(theSlideInstance);
- m_SlideGraphCore->CreateSlideGraph(retval);
- GetSignalSender()->SendMasterCreated(retval);
- return retval;
-}
-
-inline bool PropertyHandlePairEquals(const TPropertyHandlePropertyInfoPair &inPair,
- Qt3DSDMPropertyHandle inProperty)
-{
- return (inProperty == inPair.first);
-}
-
-void AddReferencedInstance(const TSlideEntry &inEntry,
- const TPropertyHandlePropertyInfoPairList &inInfoPairList,
- Qt3DSDMSlideHandle inSourceSlide, Qt3DSDMSlideHandle inDestSlide,
- TInstanceHandleList &outInstances, TSlideEntryList &outReferencedEntries)
-{
- TPropertyHandlePropertyInfoPairList::const_iterator theFind =
- find_if<TPropertyHandlePropertyInfoPairList::const_iterator>(
- inInfoPairList, std::bind(PropertyHandlePairEquals,
- std::placeholders::_1, get<1>(inEntry)));
- if (theFind != inInfoPairList.end()) {
- TPropertyInstanceInfoPtr theInfo(theFind->second);
- Qt3DSDMInstanceHandle theReferenced(theInfo->GetInstanceForProperty(get<2>(inEntry)));
- if (theReferenced.Valid()
- && !exists(outInstances, std::bind(equal_to<int>(), theReferenced,
- std::placeholders::_1))) {
- insert_unique(outInstances, theReferenced);
- SValue theNewValue(
- theInfo->CreateInstanceForProperty(inSourceSlide, inDestSlide, theReferenced));
- outReferencedEntries.push_back(
- make_tuple(get<0>(inEntry), get<1>(inEntry), theNewValue));
- }
- }
-}
-
-void CopySpecificAnimation(Qt3DSDMSlideHandle inMaster, Qt3DSDMSlideHandle inTarget,
- TInstancePropertyPair inPropertyPair, TAnimationCorePtr inAnimationCore,
- size_t inIndex)
-{
- Qt3DSDMAnimationHandle theAnimation = inAnimationCore->GetAnimation(
- inMaster, inPropertyPair.first, inPropertyPair.second, inIndex);
- if (theAnimation.Valid())
- CopyAnimation(inAnimationCore, theAnimation, inTarget, inPropertyPair.first,
- inPropertyPair.second, inIndex);
-}
-
-void CopyAnimationIfExist(Qt3DSDMSlideHandle inMaster, Qt3DSDMSlideHandle inTarget,
- TInstancePropertyPair inPropertyPair, TPropertySystemPtr inPropertySystem,
- TAnimationCorePtr inAnimationCore)
-{
- DataModelDataType::Value thePropertyType = inPropertySystem->GetDataType(inPropertyPair.second);
- std::tuple<bool, size_t> theArity = GetDatatypeAnimatableAndArity(thePropertyType);
- if (std::get<0>(theArity))
- do_times(std::get<1>(theArity), std::bind(CopySpecificAnimation, inMaster, inTarget,
- inPropertyPair, inAnimationCore,
- std::placeholders::_1));
-}
-
-void SetEntryValueIfNotReferenced(const TSlideEntry &inEntry,
- const TInstanceHandleList &inReferencedInstances,
- const TSlideEntryList &inReferencedEntries,
- Qt3DSDMSlideHandle inSource, Qt3DSDMSlideHandle inDestSlide,
- TPropertySystemPtr inPropertySystem, TSlideCorePtr inDestCore,
- TAnimationCorePtr inAnimationCore)
-{
- // Don't copy referenced instance properties.
- if (exists(inReferencedInstances, std::bind(equal_to<int>(), get<0>(inEntry),
- std::placeholders::_1)))
- return;
- TSlideEntryList::const_iterator theFind = find_if<TSlideEntryList::const_iterator>(
- inReferencedEntries,
- std::bind(CSimpleSlideCore::PropertyFound, get<0>(inEntry), get<1>(inEntry),
- std::placeholders::_1));
- if (theFind != inReferencedEntries.end())
- inDestCore->ForceSetInstancePropertyValue(inDestSlide, get<0>(inEntry), get<1>(inEntry),
- get<2>(*theFind));
- else
- inDestCore->ForceSetInstancePropertyValue(inDestSlide, get<0>(inEntry), get<1>(inEntry),
- get<2>(inEntry));
- CopyAnimationIfExist(inSource, inDestSlide, make_pair(get<0>(inEntry), get<1>(inEntry)),
- inPropertySystem, inAnimationCore);
-}
-
-Qt3DSDMSlideHandle SSlideSystem::CreateSlide(Qt3DSDMSlideHandle inMaster, int inIndex)
-{
- return DuplicateSlide(inMaster, inIndex);
-}
-
-Qt3DSDMSlideHandle SSlideSystem::DuplicateSlide(Qt3DSDMSlideHandle inSourceSlide, int inIndex)
-{
- Qt3DSDMSlideHandle theMaster = GetMasterSlide(inSourceSlide);
- Qt3DSDMInstanceHandle theSlideInstance = m_DataCore->CreateInstance();
- m_DataCore->DeriveInstance(theSlideInstance, m_SlideInstance);
- Qt3DSDMSlideHandle retval = m_SlideCore->CreateSlide(theSlideInstance);
-
- TSlideHandleList theChildren;
- m_SlideCore->GetChildSlides(theMaster, theChildren);
- m_SlideCore->DeriveSlide(retval, theMaster, inIndex - 1);
- int finalIndex = m_SlideCore->GetChildIndex(theMaster, retval) + 1;
- if (!theChildren.empty()) {
- // If the master was passed in, we get the intersecting properties
- // of the master and first child.
- // if another slide was passed in, we again do the intersection but we
- // take the values from the source slide instead of the master.
- TSlideEntryList theIntersectingEntries;
- if (inSourceSlide == theMaster)
- m_SlideCore->GetIntersectingProperties(theMaster, theChildren.at(0),
- theIntersectingEntries);
- else
- m_SlideCore->GetIntersectingProperties(inSourceSlide, theMaster,
- theIntersectingEntries);
-
- // duplicates the instance properties, from source slide (could be master (a new slide
- // command) or another other slides (duplicate slide) to the newly created slide
- m_DataCore->CopyInstanceProperties(this->GetSlideInstance(inSourceSlide), theSlideInstance);
-
- TInstanceHandleList theReferencedInstances;
- TSlideEntryList theReferencedEntries;
- do_all(theIntersectingEntries,
- std::bind(AddReferencedInstance, std::placeholders::_1,
- std::cref(m_PropertyInfoPairList),
- inSourceSlide, retval, std::ref(theReferencedInstances),
- std::ref(theReferencedEntries)));
- do_all(theIntersectingEntries,
- std::bind(SetEntryValueIfNotReferenced, std::placeholders::_1,
- std::cref(theReferencedInstances),
- std::cref(theReferencedEntries), inSourceSlide, retval,
- m_PropertySystem, m_SlideCore, m_AnimationCore));
- }
- GetSignalSender()->SendSlideCreated(theMaster, finalIndex, retval);
- return retval;
-}
-
-Qt3DSDMSlideHandle SSlideSystem::GetMasterSlide(Qt3DSDMSlideHandle inSlide) const
-{
- if (inSlide.Valid() && m_SlideCore->IsSlide(inSlide)) {
- Qt3DSDMSlideHandle theParent = m_SlideCore->GetParentSlide(inSlide);
- if (theParent.Valid())
- return theParent;
- return inSlide;
- }
- return 0;
-}
-
-bool SSlideSystem::IsMasterSlide(Qt3DSDMSlideHandle inSlide) const
-{
- Qt3DSDMSlideHandle theParent = m_SlideCore->GetParentSlide(inSlide);
- if (!theParent.Valid())
- return true;
- else
- return false;
-}
-
-inline bool GraphGuidMatches(Qt3DSDMSlideGraphHandle inGraph, TSlideGraphCorePtr inSlideGraph,
- TSlideCorePtr inSlideCore, TDataCorePtr inDataCore,
- Qt3DSDMPropertyHandle inProperty, SValue inValue)
-{
- Qt3DSDMSlideHandle theMaster = inSlideGraph->GetGraphRoot(inGraph);
- Qt3DSDMInstanceHandle theInstance = inSlideCore->GetSlideInstance(theMaster);
- SValue theValue;
- if (inDataCore->GetInstancePropertyValue(theInstance, inProperty, theValue)
- && Equals(inValue, theValue.toOldSkool()))
- return true;
- return false;
-}
-
-Qt3DSDMSlideHandle SSlideSystem::GetMasterSlideByComponentGuid(SLong4 inGuid) const
-{
- TSlideGraphHandleList theGraphs;
- m_SlideGraphCore->GetSlideGraphs(theGraphs);
- TSlideGraphHandleList::iterator theFind = find_if<TSlideGraphHandleList::iterator>(
- theGraphs, std::bind(GraphGuidMatches,
- std::placeholders::_1, m_SlideGraphCore, m_SlideCore, m_DataCore,
- m_ComponentGuid, inGuid));
- if (theFind != theGraphs.end())
- return m_SlideGraphCore->GetGraphRoot(*theFind);
- return 0;
-}
-
-void InsertIfReferencedProperty(const TSlideEntry &inEntry,
- const TPropertyHandlePropertyInfoPairList &inRefProperties,
- TInstanceHandleList &inInstances)
-{
- TPropertyHandlePropertyInfoPairList::const_iterator theFind =
- find_if<TPropertyHandlePropertyInfoPairList::const_iterator>(
- inRefProperties, std::bind(PropertyHandlePairEquals, std::placeholders::_1, get<1>(inEntry)));
- if (theFind != inRefProperties.end()) {
- Qt3DSDMInstanceHandle theInstance(theFind->second->GetInstanceForProperty(get<2>(inEntry)));
- if (theInstance.Valid())
- inInstances.push_back(theInstance);
- }
-}
-
-void SSlideSystem::InsertEntryAndPropertyInstance(const TSlideEntry &inEntry,
- TInstanceHandleList &inInstances,
- Qt3DSDMSlideHandle inSlide)
-{
- Qt3DSDMInstanceHandle theEntryInstance = get<0>(inEntry);
- if (find(inInstances.begin(), inInstances.end(), theEntryInstance) == inInstances.end()) {
- TGraphSlidePair thePair = m_SlideGraphCore->GetAssociatedGraph(theEntryInstance);
- if (thePair.second == inSlide) // if this instance belongs to this slide
- {
- // get all references belong to this instance (ex: image instances that belong to this
- // material instance)
- qt3dsdm::SValue theValue;
- for (TPropertyHandlePropertyInfoPairList::iterator theIter =
- m_PropertyInfoPairList.begin();
- theIter != m_PropertyInfoPairList.end(); ++theIter) {
- if (m_DataCore->HasAggregateInstanceProperty(
- theEntryInstance,
- theIter->first) // check if the property exists before querying the value
- && m_DataCore->GetInstancePropertyValue(
- theEntryInstance, theIter->first,
- theValue)) // this function may throw error if the property doesn't exist
- {
- Qt3DSDMInstanceHandle theInstance(
- theIter->second->GetInstanceForProperty(theValue.toOldSkool()));
- if (theInstance.Valid())
- inInstances.push_back(theInstance);
- }
- }
- // get this instance as well
- inInstances.push_back(theEntryInstance);
- }
- }
-}
-
-// Delete the referenced instances of this slide
-// This function is very similar to GetReferencedInstances
-// You change one function, you need to change the other function
-void SSlideSystem::DeleteReferencedInstances(Qt3DSDMSlideHandle inSlide)
-{
- // Recursively delete the children of this slide
- // Usually the slide has children if it is a Master slide (for example when deleting a
- // Component)
- TSlideHandleList theChildren;
- m_SlideCore->GetChildSlides(inSlide, theChildren);
- do_all(theChildren, std::bind(&SSlideSystem::DeleteReferencedInstances, this,
- std::placeholders::_1));
-
- // Delete the referenced instances from this slide
- TSlideEntryList theEntries;
- m_SlideCore->GetSlidePropertyEntries(inSlide, theEntries);
-
- // Run through all entries, if you find a reference property delete the associated instance.
- // This is for properties that are set on this slide (because you can set property on slide or
- // on instance)
- TInstanceHandleList theReferencedInstances;
- do_all(theEntries,
- std::bind(InsertIfReferencedProperty, std::placeholders::_1,
- std::cref(m_PropertyInfoPairList),
- std::ref(theReferencedInstances)));
- do_all(theReferencedInstances, std::bind(&IDataCore::DeleteInstance, m_DataCore,
- std::placeholders::_1));
-
- // Run through all entries, delete all instances that belong to this slide and its reference
- // property instances
- // This is for properties that are set on instance
- theReferencedInstances.clear();
- do_all(theEntries, std::bind(&SSlideSystem::InsertEntryAndPropertyInstance, this,
- std::placeholders::_1,
- std::ref(theReferencedInstances), inSlide));
- do_all(theReferencedInstances, std::bind(&IDataCore::DeleteInstance, m_DataCore,
- std::placeholders::_1));
-}
-
-// Get the referenced instances of this slide
-// This function is very similar to DeleteReferencedInstances
-// You change one function, you need to change the other function
-void SSlideSystem::GetReferencedInstances(Qt3DSDMSlideHandle inSlide,
- TInstanceHandleList &outReferencedInstances)
-{
- // Recursively get the children of this slide
- // Usually the slide has children if it is a Master slide (for example Component)
- TSlideHandleList theChildren;
- m_SlideCore->GetChildSlides(inSlide, theChildren);
- do_all(theChildren, std::bind(&SSlideSystem::GetReferencedInstances, this,
- std::placeholders::_1,
- std::ref(outReferencedInstances)));
-
- // Get the referenced instances from this slide
- TSlideEntryList theEntries;
- m_SlideCore->GetSlidePropertyEntries(inSlide, theEntries);
-
- // Run through all entries, if you find a reference property get the associated instance.
- // This is for properties that are set on this slide (because you can set property on slide or
- // on instance)
- do_all(theEntries,
- std::bind(InsertIfReferencedProperty, std::placeholders::_1,
- std::cref(m_PropertyInfoPairList),
- std::ref(outReferencedInstances)));
-
- // Run through all entries, get all instances that belong to this slide and its reference
- // property instances
- // This is for properties that are set on instance
- do_all(theEntries, std::bind(&SSlideSystem::InsertEntryAndPropertyInstance, this,
- std::placeholders::_1,
- std::ref(outReferencedInstances), inSlide));
-}
-
-void SSlideSystem::DeleteSlideByIndex(Qt3DSDMSlideHandle inMaster, size_t inIndex)
-{
- Qt3DSDMSlideHandle theChild = GetSlideByIndex(inMaster, inIndex);
- TInstanceHandleList theInstances;
- if (theChild.Valid()) {
- DeleteReferencedInstances(theChild);
- m_SlideCore->DeleteSlide(theChild, theInstances);
- do_all(theInstances, std::bind(&IDataCore::DeleteInstance, m_DataCore,
- std::placeholders::_1));
- }
- if (inIndex == 0)
- GetSignalSender()->SendMasterDeleted(inMaster);
- else
- GetSignalSender()->SendSlideDeleted(inMaster, (int)inIndex, theChild);
-}
-
-void SSlideSystem::GetSlideReferencedInstances(Qt3DSDMSlideHandle inMaster, size_t inIndex,
- TInstanceHandleList &outReferencedInstances)
-{
- outReferencedInstances.clear();
- Qt3DSDMSlideHandle theChild = GetSlideByIndex(inMaster, inIndex);
- if (theChild.Valid()) {
- GetReferencedInstances(theChild, outReferencedInstances);
- }
-}
-
-Qt3DSDMSlideHandle SSlideSystem::GetSlideByIndex(Qt3DSDMSlideHandle inMaster, size_t inIndex) const
-{
- if (inIndex == 0)
- return inMaster;
- --inIndex;
- TSlideHandleList theChildren;
- m_SlideCore->GetChildSlides(inMaster, theChildren);
- if (inIndex < theChildren.size())
- return theChildren[inIndex];
- return Qt3DSDMSlideHandle();
-}
-
-void SSlideSystem::SetActiveSlide(Qt3DSDMSlideHandle inMaster, size_t inIndex)
-{
- Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(inMaster);
- Qt3DSDMSlideHandle theActiveSlide = inMaster;
- if (inIndex > 0)
- theActiveSlide = GetSlideByIndex(inMaster, inIndex);
- Qt3DSDMSlideHandle theOldSlide = m_SlideGraphCore->GetGraphActiveSlide(theGraph);
- m_SlideGraphCore->SetGraphActiveSlide(theGraph, theActiveSlide);
- GetSignalSender()->SendActiveSlide(inMaster, (int)inIndex, theOldSlide, theActiveSlide);
-}
-
-size_t SSlideSystem::GetSlideCount(Qt3DSDMSlideHandle inMaster) const
-{
- TSlideHandleList theChildren;
- m_SlideCore->GetChildSlides(inMaster, theChildren);
- return 1 + theChildren.size();
-}
-
-void SSlideSystem::RearrangeSlide(Qt3DSDMSlideHandle inMaster, size_t inOldIndex, size_t inNewIndex)
-{
- if (inOldIndex == 0)
- throw RearrangeSlideArgumentsMustNotBeZero(L"");
- TSlideHandleList theChildren;
- m_SlideCore->GetChildSlides(inMaster, theChildren);
- Qt3DSDMSlideHandle theChild = theChildren.at(inOldIndex - 1);
- m_SlideCore->DeriveSlide(theChild, inMaster, (int)inNewIndex - 1);
- GetSignalSender()->SendSlideRearranged(inMaster, (int)inOldIndex, (int)inNewIndex);
-}
-
-void SSlideSystem::SetComponentSeconds(Qt3DSDMSlideHandle inSlide, float inSeconds)
-{
- Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(GetMasterSlide(inSlide));
- m_SlideCore->SetSlideTime(m_SlideGraphCore->GetGraphActiveSlide(theGraph), inSeconds);
-}
-
-float SSlideSystem::GetComponentSeconds(Qt3DSDMSlideHandle inSlide) const
-{
- Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(GetMasterSlide(inSlide));
- return m_SlideCore->GetSlideTime(m_SlideGraphCore->GetGraphActiveSlide(theGraph));
-}
-
-long SSlideSystem::GetComponentSecondsLong(Qt3DSDMSlideHandle inSlide) const
-{
- float seconds(GetComponentSeconds(inSlide));
- return static_cast<long>((seconds * 1000) + .5f);
-}
-
-long SSlideSystem::GetComponentSecondsLong(Qt3DSDMInstanceHandle inInstance) const
-{
- Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetAssociatedGraph(inInstance).first;
- float seconds = m_SlideCore->GetSlideTime(m_SlideGraphCore->GetGraphActiveSlide(theGraph));
- return static_cast<long>((seconds * 1000) + .5f);
-}
-
-SInstanceSlideInformation
-SSlideSystem::GetInstanceSlideInformation(Qt3DSDMInstanceHandle inInstance) const
-{
- TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
- Qt3DSDMSlideHandle theAssociatedSlide(theGraphSlidePair.second);
- if (theAssociatedSlide.Valid() == false)
- return SInstanceSlideInformation();
- Qt3DSDMSlideHandle theMasterSlide(GetMasterSlide(theGraphSlidePair.second));
- Qt3DSDMSlideHandle theActiveSlide(
- m_SlideGraphCore->GetGraphActiveSlide(theGraphSlidePair.first));
- float seconds = m_SlideCore->GetSlideTime(theActiveSlide);
- long theMilliseconds = static_cast<long>((seconds * 1000) + .5f);
- return SInstanceSlideInformation(theAssociatedSlide, theMasterSlide, theActiveSlide,
- theMilliseconds);
-}
-
-/**
- * Use the instance for storing information such as name, or the GUID of the object
- * this slide links to.
- */
-Qt3DSDMInstanceHandle SSlideSystem::GetSlideInstance(Qt3DSDMSlideHandle inSlide) const
-{
- return m_SlideCore->GetSlideInstance(inSlide);
-}
-/**
- * Reverse lookup into the slide system so you can match slides to instances.
- */
-Qt3DSDMSlideHandle SSlideSystem::GetSlideByInstance(Qt3DSDMInstanceHandle inSlide) const
-{
- return m_SlideCore->GetSlideByInstance(inSlide);
-}
-
-/**
- * Slide may be either a master slide
- */
-void SSlideSystem::AssociateInstanceWithSlide(Qt3DSDMSlideHandle inSlide,
- Qt3DSDMInstanceHandle inInstance)
-{
- Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(GetMasterSlide(inSlide));
- m_SlideGraphCore->AssociateInstance(theGraph, inSlide, inInstance);
- GetSignalSender()->SendInstanceAssociated(inSlide, inInstance);
-}
-
-Qt3DSDMSlideHandle SSlideSystem::GetAssociatedSlide(Qt3DSDMInstanceHandle inInstance) const
-{
- return m_SlideGraphCore->GetAssociatedGraph(inInstance).second;
-}
-
-/**
- * This gets the instances that resides int the SlideGraph, i.e. all the instances in all the
- *slides for this component/scene
- * TODO rename this to make it more clear
- */
-void SSlideSystem::GetAssociatedInstances(Qt3DSDMSlideHandle inMaster,
- TSlideInstancePairList &outAssociations) const
-{
- m_SlideGraphCore->GetAssociatedInstances(
- m_SlideGraphCore->GetSlideGraph(GetMasterSlide(inMaster)), outAssociations);
-}
-
-/**
- * Gets all the instances in this slide
- */
-void SSlideSystem::GetAssociatedInstances(Qt3DSDMSlideHandle inSlide,
- TInstanceHandleList &outAssociations) const
-{
- Qt3DSDMSlideHandle theMasterSlide = GetMasterSlide(inSlide);
- TSlideInstancePairList theGraphInstances;
- m_SlideGraphCore->GetAssociatedInstances(m_SlideGraphCore->GetSlideGraph(theMasterSlide),
- theGraphInstances);
- for (TSlideInstancePairList::const_iterator theIter = theGraphInstances.begin();
- theIter != theGraphInstances.end(); ++theIter) {
- if (theIter->first == inSlide || theIter->first == theMasterSlide) {
- // in the current slide or master slide
- outAssociations.push_back(theIter->second);
- }
- }
-}
-
-void DeleteInstanceIfExistsAsProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
- Qt3DSDMPropertyHandle inProperty, TSlideCorePtr inSlideCore,
- TPropertyInstanceInfoPtr inPropertyInfoPtr,
- TDataCorePtr inDataCore)
-{
- SValue theValue;
- if (inSlideCore->GetSpecificInstancePropertyValue(inSlide, inInstance, inProperty, theValue)) {
- Qt3DSDMInstanceHandle theInstance(inPropertyInfoPtr->GetInstanceForProperty(theValue));
- if (theInstance.Valid())
- inDataCore->DeleteInstance(theInstance);
- }
-}
-
-void SSlideSystem::LinkProperty(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty)
-{
- Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetAssociatedGraph(inInstance).first;
- Qt3DSDMSlideHandle theSlide = m_SlideGraphCore->GetGraphRoot(theGraph);
- TPropertyHandlePropertyInfoPairList::const_iterator theFind =
- find_if<TPropertyHandlePropertyInfoPairList::const_iterator>(
- m_PropertyInfoPairList, std::bind(PropertyHandlePairEquals,
- std::placeholders::_1, inProperty));
- if (theFind != m_PropertyInfoPairList.end()) {
- TSlideHandleList theChildren;
- m_SlideCore->GetChildSlides(theSlide, theChildren);
- do_all(theChildren, std::bind(DeleteInstanceIfExistsAsProperty, std::placeholders::_1, inInstance,
- inProperty, m_SlideCore, theFind->second, m_DataCore));
- }
- m_SlideCore->ClearChildrenPropertyValues(theSlide, inInstance, inProperty);
- GetSignalSender()->SendPropertyLinked(theSlide, inInstance, inProperty);
-}
-
-void ClearPropertyValueIfLinked(Qt3DSDMSlideHandle inMaster, const TSlideHandleList &inChildren,
- Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
- TSlideCorePtr inSlideCore)
-{
- if (inChildren.empty())
- return;
-
- if (inSlideCore->ContainsProperty(inChildren.at(0), inInstance,
- inProperty)) // if property is linked,
- inSlideCore->ClearChildrenPropertyValues(inMaster, inInstance,
- inProperty); // get it off non-master slides
-}
-
-void SetReferencedEntryValue(Qt3DSDMSlideHandle inMaster, Qt3DSDMSlideHandle inDestSlide,
- TPropertyInstanceInfoPtr inInfo, Qt3DSDMInstanceHandle inInstance,
- Qt3DSDMPropertyHandle inProperty,
- Qt3DSDMInstanceHandle inReferencedInstance, TSlideCorePtr inSlideCore)
-{
- SValue theNewValue(
- inInfo->CreateInstanceForProperty(inMaster, inDestSlide, inReferencedInstance));
- inSlideCore->ForceSetInstancePropertyValue(inDestSlide, inInstance, inProperty, theNewValue);
-}
-
-void SSlideSystem::UnlinkProperty(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty)
-{
- Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetAssociatedGraph(inInstance).first;
- Qt3DSDMSlideHandle theSlide = m_SlideGraphCore->GetGraphRoot(theGraph);
- SValue theValue;
- SValue theTempValue;
- if (!m_SlideCore->GetInstancePropertyValue(theSlide, inInstance, inProperty, theValue)) {
- if (!m_PropertySystem->GetInstancePropertyValue(inInstance, inProperty, theTempValue))
- throw PropertyLinkError(L"");
- theValue = theTempValue.toOldSkool();
- }
-
- m_SlideCore->ForceSetInstancePropertyValue(theSlide, inInstance, inProperty, theValue);
- TSlideHandleList theChildren;
- m_SlideCore->GetChildSlides(theSlide, theChildren);
-
- Qt3DSDMInstanceHandle theReferenced;
- TPropertyHandlePropertyInfoPairList::const_iterator theFind =
- find_if<TPropertyHandlePropertyInfoPairList::const_iterator>(
- m_PropertyInfoPairList, std::bind(PropertyHandlePairEquals,
- std::placeholders::_1, inProperty));
- TPropertyInstanceInfoPtr theInfo;
- if (theFind != m_PropertyInfoPairList.end()) {
- theInfo = theFind->second;
- theReferenced = theInfo->GetInstanceForProperty(theValue);
- }
- if (theReferenced.Valid()) {
- TPropertyHandleList theProperties;
- m_PropertySystem->GetAggregateInstanceProperties(
- theReferenced,
- theProperties); // TODO: We should make the method return the custom properties.
- // Remove the property instance's unlinked properties from non-master slides.
- do_all(theProperties,
- std::bind(ClearPropertyValueIfLinked, theSlide, std::cref(theChildren),
- theReferenced, std::placeholders::_1, m_SlideCore));
- // Remove all property values from the children from that instance.
- do_all(theChildren, std::bind(SetReferencedEntryValue, theSlide,
- std::placeholders::_1, theInfo, inInstance,
- inProperty, theReferenced, m_SlideCore));
- } else {
- do_all(theChildren, std::bind(&ISlideCore::ForceSetInstancePropertyValue, m_SlideCore,
- std::placeholders::_1,
- inInstance, inProperty, theValue));
- do_all(theChildren,
- std::bind(CopyAnimationIfExist, theSlide, std::placeholders::_1, make_pair(inInstance, inProperty),
- m_PropertySystem, m_AnimationCore));
- }
- GetSignalSender()->SendPropertyUnlinked(theSlide, inInstance, inProperty);
-}
-
-bool SSlideSystem::IsPropertyLinked(Qt3DSDMInstanceHandle inInstance,
- Qt3DSDMPropertyHandle inProperty) const
-{
- TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
- Qt3DSDMSlideGraphHandle theGraph = theGraphSlidePair.first;
- if (!theGraph.Valid())
- return false;
-
- Qt3DSDMSlideHandle theSlide = m_SlideGraphCore->GetGraphRoot(theGraph);
- if (theGraphSlidePair.second != theSlide)
- return false;
-
- TSlideHandleList theChildren;
- m_SlideCore->GetChildSlides(theSlide, theChildren);
- bool containsProperty = false;
- for (TSlideHandleList::iterator theIter = theChildren.begin();
- theIter != theChildren.end() && !containsProperty; ++theIter) {
- containsProperty =
- containsProperty || m_SlideCore->ContainsProperty(*theIter, inInstance, inProperty);
- }
-
- return !containsProperty;
-}
-
-bool SSlideSystem::CanPropertyBeLinked(Qt3DSDMInstanceHandle inInstance,
- Qt3DSDMPropertyHandle inProperty) const
-{
- TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
- if (theGraphSlidePair.first.Valid()
- && theGraphSlidePair.second == m_SlideGraphCore->GetGraphRoot(theGraphSlidePair.first))
- return true;
- return false;
-}
-
-bool SSlideSystem::GetSlidePropertyValue(size_t inSlide, Qt3DSDMInstanceHandle inInstance,
- Qt3DSDMPropertyHandle inProperty, SValue &outValue)
-{
- TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
- Qt3DSDMSlideGraphHandle theGraph = theGraphSlidePair.first;
- if (!theGraph.Valid())
- return false;
- Qt3DSDMSlideHandle theSlide = GetSlideByIndex(m_SlideGraphCore->GetGraphRoot(theGraph), inSlide);
- if (!theSlide.Valid())
- return false;
- return m_SlideCore->GetSpecificInstancePropertyValue(theSlide, inInstance, inProperty,
- outValue);
-}
-
-void AddEntriesToHash(const TSlideEntryList &theSlideEntries, TSlideEntryHash &theEntryHash,
- TInstancePropertyPairList &outProperties)
-{
- for (size_t idx = 0, end = theSlideEntries.size(); idx < end; ++idx) {
- const TSlideEntry &theEntry(theSlideEntries[idx]);
- pair<TSlideEntryHash::iterator, bool> insertRecord(theEntryHash.insert(
- make_pair(TSlideInstancePropertyPair(get<0>(theEntry), get<1>(theEntry)),
- SInternValue::ISwearThisHasAlreadyBeenInternalized(get<2>(theEntry)))));
- if (insertRecord.second)
- outProperties.push_back(insertRecord.first->first);
- }
-}
-
-void SSlideSystem::GetUnionOfProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2,
- TInstancePropertyPairList &outProperties) const
-{
- TSlideEntryHash theEntryHash;
- TSlideEntryList theSlideEntries;
- if (m_SlideCore->IsSlide(inSlide1)) {
- m_SlideCore->GetSlidePropertyEntries(inSlide1, theSlideEntries);
- AddEntriesToHash(theSlideEntries, theEntryHash, outProperties);
- }
- if (m_SlideCore->IsSlide(inSlide2)) {
- m_SlideCore->GetSlidePropertyEntries(inSlide2, theSlideEntries);
- AddEntriesToHash(theSlideEntries, theEntryHash, outProperties);
- }
-}
-
-void SSlideSystem::SetActiveSlide(Qt3DSDMSlideHandle inSlide)
-{
- Qt3DSDMSlideHandle theMaster = GetMasterSlide(inSlide);
- int theIndex = GetSlideIndex(inSlide);
- SetActiveSlide(theMaster, theIndex);
-}
-
-Qt3DSDMSlideHandle SSlideSystem::GetAssociatedSlide(Qt3DSDMInstanceHandle inInstance,
- Qt3DSDMPropertyHandle inProperty) const
-{
- TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
- Qt3DSDMSlideGraphHandle theGraph = theGraphSlidePair.first;
- if (!theGraph.Valid())
- return 0;
- Qt3DSDMSlideHandle theSlide = m_SlideGraphCore->GetGraphActiveSlide(theGraph);
- if (theSlide.Valid()) {
- if (m_SlideCore->ContainsProperty(theSlide, inInstance, inProperty))
- return theSlide;
- theSlide = m_SlideCore->GetParentSlide(theSlide);
- if (theSlide.Valid() && m_SlideCore->ContainsProperty(theSlide, inInstance, inProperty))
- return theSlide;
- return theGraphSlidePair.second;
- }
- return 0;
-}
-
-bool SSlideSystem::SlideValid(Qt3DSDMSlideHandle inSlide) const
-{
- return m_SlideCore->HandleValid(inSlide);
-}
-
-int SSlideSystem::GetSlideIndex(Qt3DSDMSlideHandle inSlide) const
-{
- Qt3DSDMSlideHandle theMaster = GetMasterSlide(inSlide);
- if (inSlide.Valid() && inSlide != theMaster)
- return m_SlideCore->GetChildIndex(theMaster, inSlide) + 1;
- return 0;
-}
-
-int SSlideSystem::GetActiveSlideIndex(Qt3DSDMSlideHandle inMaster) const
-{
- Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(inMaster);
- Qt3DSDMSlideHandle theActiveSlide = m_SlideGraphCore->GetGraphActiveSlide(theGraph);
- if (theActiveSlide == inMaster)
- return 0;
- return GetSlideIndex(theActiveSlide);
-}
-
-Qt3DSDMSlideHandle SSlideSystem::GetActiveSlide(Qt3DSDMSlideHandle inMaster) const
-{
- Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(inMaster);
- return m_SlideGraphCore->GetGraphActiveSlide(theGraph);
-}
-
-Qt3DSDMInstanceHandle SSlideSystem::GetSlideSelectedInstance(Qt3DSDMSlideHandle inSlide) const
-{
- TIntIntMap::const_iterator theIter = m_SlideSelectedInstances.find(inSlide);
- if (theIter != m_SlideSelectedInstances.end() && m_DataCore->IsInstance(theIter->second))
- return theIter->second;
- return 0;
-}
-
-void SSlideSystem::SetSlideSelectedInstance(Qt3DSDMSlideHandle inSlide,
- Qt3DSDMInstanceHandle inInstance)
-{
- m_SlideSelectedInstances[inSlide] = inInstance;
-}
-
-void SSlideSystem::RegisterPropertyInstance(Qt3DSDMPropertyHandle inPropertyHandle,
- TPropertyInstanceInfoPtr inPropertyInfo)
-{
- m_PropertyInfoPairList.push_back(make_pair(inPropertyHandle, inPropertyInfo));
-}
-
-ISlideSystemSignalProvider *SSlideSystem::GetSignalProvider()
-{
- return dynamic_cast<ISlideSystemSignalProvider *>(m_Signaller.get());
-}
-
-ISlideSystemSignalSender *SSlideSystem::GetSignalSender()
-{
- return dynamic_cast<ISlideSystemSignalSender *>(m_Signaller.get());
-}
-
-qt3dsdm::Qt3DSDMSlideHandle SSlideSystem::GetApplicableSlide(Qt3DSDMInstanceHandle inHandle)
-{
- TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inHandle);
- if (!theGraphSlidePair.first.Valid())
- return Qt3DSDMSlideHandle();
-
- Qt3DSDMSlideHandle theMaster = m_SlideGraphCore->GetGraphRoot(theGraphSlidePair.first);
- if (theGraphSlidePair.second != theMaster)
- return theGraphSlidePair.second;
-
- return theMaster;
-}
-
-qt3dsdm::Qt3DSDMSlideHandle SSlideSystem::GetApplicableSlide(Qt3DSDMInstanceHandle inHandle,
- Qt3DSDMPropertyHandle inProperty)
-{
- TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inHandle);
- if (!theGraphSlidePair.first.Valid())
- return Qt3DSDMSlideHandle();
-
- Qt3DSDMSlideHandle theMaster = m_SlideGraphCore->GetGraphRoot(theGraphSlidePair.first);
- if (theGraphSlidePair.second != theMaster)
- return theGraphSlidePair.second;
-
- Qt3DSDMSlideHandle theActive = m_SlideGraphCore->GetGraphActiveSlide(theGraphSlidePair.first);
- if (m_SlideCore->ContainsProperty(theActive, inHandle, inProperty))
- return theActive;
-
- return theMaster;
-}
-
-bool SSlideSystem::GetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
- Qt3DSDMInstanceHandle inInstance,
- Qt3DSDMPropertyHandle inProperty, SValue &outValue) const
-{
- return m_SlideCore->GetInstancePropertyValue(inSlide, inInstance, inProperty, outValue);
-}
-
-bool SSlideSystem::GetCanonicalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
- Qt3DSDMPropertyHandle inProperty,
- SValue &outValue) const
-{
- TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
- if (theGraphSlidePair.first.Valid()) {
- // Check to see if the object is on the master slide;
- if (theGraphSlidePair.second == m_SlideGraphCore->GetGraphRoot(theGraphSlidePair.first)) {
- TSlideHandleList theChildren;
- m_SlideCore->GetChildSlides(theGraphSlidePair.second, theChildren);
- // See if the value exists on slide 1.
- if (!theChildren.empty()
- && m_SlideCore->GetSpecificInstancePropertyValue(theChildren.at(0), inInstance,
- inProperty, outValue))
- return true;
- }
-
- if (m_SlideCore->GetSpecificInstancePropertyValue(theGraphSlidePair.second, inInstance,
- inProperty, outValue))
- return true;
- }
- return false;
-}
-
-void SSlideSystem::ForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
- Qt3DSDMInstanceHandle inInstance,
- Qt3DSDMPropertyHandle inProperty,
- const SValue &inValue)
-{
- m_SlideCore->ForceSetInstancePropertyValue(inSlide, inInstance, inProperty, inValue);
-}
-}