summaryrefslogtreecommitdiffstats
path: root/src/dm/systems/StudioPropertySystem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dm/systems/StudioPropertySystem.cpp')
-rw-r--r--src/dm/systems/StudioPropertySystem.cpp233
1 files changed, 233 insertions, 0 deletions
diff --git a/src/dm/systems/StudioPropertySystem.cpp b/src/dm/systems/StudioPropertySystem.cpp
new file mode 100644
index 0000000..78fabc6
--- /dev/null
+++ b/src/dm/systems/StudioPropertySystem.cpp
@@ -0,0 +1,233 @@
+/****************************************************************************
+**
+** 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"
+#include "StudioPropertySystem.h"
+#include "StudioAnimationSystem.h"
+#include "SignalsImpl.h"
+
+using namespace std;
+
+namespace qt3dsdm {
+
+CStudioPropertySystem::CStudioPropertySystem(std::shared_ptr<IMetaData> inMetaData,
+ TDataCorePtr inDataCore, TSlideSystemPtr inSlideSystem,
+ TStudioAnimationSystemPtr inStudioAnimationSystem)
+ : m_MetaData(inMetaData)
+ , m_DataCore(inDataCore)
+ , m_SlideSystem(inSlideSystem)
+ , m_StudioAnimationSystem(inStudioAnimationSystem)
+{
+ m_PropertyCoreSignaller = CreatePropertyCoreSignaller();
+ m_ImmediateModePropertyCoreSignaller = CreatePropertyCoreSignaller();
+}
+
+DataModelDataType::Value CStudioPropertySystem::GetDataType(Qt3DSDMPropertyHandle inProperty) const
+{
+ if (m_DataCore->IsProperty(inProperty))
+ return m_DataCore->GetProperty(inProperty).m_Type;
+ return DataModelDataType::None;
+}
+
+TCharStr CStudioPropertySystem::GetName(Qt3DSDMPropertyHandle inProperty) const
+{
+ if (m_DataCore->IsProperty(inProperty))
+ return m_DataCore->GetProperty(inProperty).m_Name;
+ return TCharStr();
+}
+
+TCharStr CStudioPropertySystem::GetFormalName(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ if (inInstance.Valid() && inProperty.Valid())
+ return m_MetaData->GetFormalName(inInstance, inProperty);
+ return TCharStr();
+}
+
+AdditionalMetaDataType::Value
+CStudioPropertySystem::GetAdditionalMetaDataType(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ return m_MetaData->GetAdditionalMetaDataType(inInstance, inProperty);
+}
+
+TMetaDataData
+CStudioPropertySystem::GetAdditionalMetaDataData(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ return m_MetaData->GetAdditionalMetaDataData(inInstance, inProperty);
+}
+
+Qt3DSDMInstanceHandle CStudioPropertySystem::GetPropertyOwner(Qt3DSDMPropertyHandle inProperty) const
+{
+
+ qt3dsdm::Qt3DSDMPropertyDefinition thePropDef = m_DataCore->GetProperty(inProperty);
+ return thePropDef.m_Instance;
+}
+
+Qt3DSDMPropertyHandle
+CStudioPropertySystem::GetAggregateInstancePropertyByName(Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inStr) const
+{
+ return m_DataCore->GetAggregateInstancePropertyByName(inInstance, inStr);
+}
+
+void CStudioPropertySystem::GetAggregateInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const
+{
+ m_DataCore->GetAggregateInstanceProperties(inInstance, outProperties);
+}
+
+bool CStudioPropertySystem::HasAggregateInstanceProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ return m_DataCore->HasAggregateInstanceProperty(inInstance, inProperty);
+}
+
+bool ApplyValueAndReturnTrue(const SValue &inValue, SValue &outValue)
+{
+ outValue = inValue;
+ return true;
+}
+
+bool CStudioPropertySystem::GetInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ if (!m_DataCore->IsInstance(inInstance))
+ return false;
+ if (!m_DataCore->IsProperty(inProperty))
+ return false;
+
+ Qt3DSDMSlideHandle theAnimationSlide;
+ theAnimationSlide = m_SlideSystem->GetApplicableSlide(inInstance, inProperty);
+ SValue theTemp;
+ bool retval = SetDefault(GetDataType(inProperty), theTemp);
+ if (retval && theAnimationSlide.Valid()
+ && m_StudioAnimationSystem->GetAnimatedInstancePropertyValue(theAnimationSlide, inInstance,
+ inProperty, theTemp))
+ return ApplyValueAndReturnTrue(theTemp, outValue);
+ if (theAnimationSlide.Valid()
+ && m_SlideSystem->GetInstancePropertyValue(theAnimationSlide, inInstance, inProperty,
+ theTemp))
+ return ApplyValueAndReturnTrue(theTemp, outValue);
+ return m_DataCore->GetInstancePropertyValue(inInstance, inProperty, outValue);
+}
+
+void CStudioPropertySystem::SetInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ m_DataCore->CheckValue(inInstance, inProperty, inValue);
+
+ Qt3DSDMSlideHandle theApplicableSlide;
+ theApplicableSlide = m_SlideSystem->GetApplicableSlide(inInstance, inProperty);
+ if (theApplicableSlide.Valid()) {
+ if (!m_StudioAnimationSystem->SetAnimatedInstancePropertyValue(
+ theApplicableSlide, inInstance, inProperty, inValue.toOldSkool())) {
+ // Force set on slide where item exists as it doesn't exist on the root.
+ m_SlideSystem->ForceSetInstancePropertyValue(theApplicableSlide, inInstance, inProperty,
+ inValue.toOldSkool());
+ }
+ } else {
+ m_DataCore->SetInstancePropertyValue(inInstance, inProperty, inValue);
+ }
+}
+
+Qt3DSDMInstanceHandle CStudioPropertySystem::CreateInstance()
+{
+ return m_DataCore->CreateInstance();
+}
+
+void CStudioPropertySystem::GetInstances(TInstanceHandleList &outInstances) const
+{
+ m_DataCore->GetInstances(outInstances);
+}
+
+void CStudioPropertySystem::DeleteInstance(Qt3DSDMInstanceHandle inHandle)
+{
+ m_DataCore->DeleteInstance(inHandle);
+}
+
+void CStudioPropertySystem::DeriveInstance(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent)
+{
+ m_DataCore->DeriveInstance(inInstance, inParent);
+}
+
+bool CStudioPropertySystem::IsInstanceOrDerivedFrom(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) const
+{
+ return m_DataCore->IsInstanceOrDerivedFrom(inInstance, inParent);
+}
+
+QVector<Qt3DSDMPropertyHandle>
+CStudioPropertySystem::GetControllableProperties(Qt3DSDMInstanceHandle inInst) const
+{
+ vector<Qt3DSDMMetaDataPropertyHandle> propList;
+ QVector<Qt3DSDMPropertyHandle> outList;
+ m_MetaData->GetMetaDataProperties(inInst, propList);
+
+ for (const auto it : qAsConst(propList)) {
+ auto metadata = m_MetaData->GetMetaDataPropertyInfo(it).getValue();
+
+ if ((metadata.m_Controllable
+ || (metadata.m_Animatable
+ && m_StudioAnimationSystem->IsPropertyAnimatable(inInst, metadata.m_Property)))
+ && !metadata.m_IsHidden) {
+ outList.append(metadata.m_Property);
+ }
+ }
+ return outList;
+}
+
+Qt3DSDMPropertyHandle CStudioPropertySystem::AddProperty(Qt3DSDMInstanceHandle inInstance,
+ TCharPtr inName,
+ DataModelDataType::Value inPropType)
+{
+ return m_DataCore->AddProperty(inInstance, inName, inPropType);
+}
+
+bool CStudioPropertySystem::HandleValid(int inHandle) const
+{
+ return m_DataCore->HandleValid(inHandle);
+}
+
+bool CStudioPropertySystem::GetCanonicalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ SValue theTempValue;
+ if (m_SlideSystem->GetCanonicalInstancePropertyValue(inInstance, inProperty, theTempValue)) {
+ outValue = SValue(theTempValue);
+ return true;
+ }
+ return m_DataCore->GetInstancePropertyValue(inInstance, inProperty, outValue);
+}
+}