diff options
author | Määttä Antti <antti.maatta@qt.io> | 2017-10-19 11:10:15 +0300 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2017-10-24 13:23:48 +0000 |
commit | 51e7b6187f3816336e4c9a4a0ab87f788ff1c092 (patch) | |
tree | 1affc607519b945b6fb434a9a29dc84a9ab073ec /src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.cpp | |
parent | aa75bf1a20a101a5a5080cc99075a345f2a61caf (diff) |
Rename UICDM and UICIMP to QT3DS
Task-number: QT3DS-18
Change-Id: I3800cd72b449b033b0b42cf2dd9e9eccc4eb7f8f
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Diffstat (limited to 'src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.cpp')
-rw-r--r-- | src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.cpp | 562 |
1 files changed, 562 insertions, 0 deletions
diff --git a/src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.cpp b/src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.cpp new file mode 100644 index 00000000..8a94575e --- /dev/null +++ b/src/Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.cpp @@ -0,0 +1,562 @@ +/**************************************************************************** +** +** Copyright (C) 2008 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 "Qt3DSDMComposerTypeDefinitions.h" +#include <memory> +#include "Qt3DSDMDataCore.h" +#include "SimpleDataCore.h" +#include "DataCoreProducer.h" +#include "Qt3DSDMSlideCore.h" + +#include <QtGlobal> + +using namespace qt3dsdm; +using std::make_shared; +using std::shared_ptr; + +#ifdef _WIN32 +#pragma warning(disable : 4100) +#endif + +// SComposerTypePropertyDefinition constructors + +namespace { + +template <typename TDataType> +struct DataConstructor +{ + template <typename TInputType> + TDataType Construct(const TInputType &inInput) + { + return TDataType(inInput); + } +}; + +template <> +struct DataConstructor<SLong4> +{ + SLong4 Construct(int inValue) + { + unsigned long theValue((unsigned long)inValue); + return SLong4(theValue, theValue, theValue, theValue); + } +}; + +template <> +struct DataConstructor<TDataStrPtr> +{ + TDataStrPtr Construct(const wchar_t *inData) + { + if (IsTrivial(inData)) + return make_shared<CDataStr>(); + return make_shared<CDataStr>(inData); + } +}; +template <> +struct DataConstructor<SStringOrInt> +{ + SStringOrInt Construct(const wchar_t *inData) + { + if (IsTrivial(inData)) + return make_shared<CDataStr>(); + return make_shared<CDataStr>(inData); + } +}; +template <> +struct DataConstructor<SObjectRefType> +{ + SObjectRefType Construct(const wchar_t *) { return SObjectRefType(); } +}; +} + +#define QT3DS_WCHAR_T_Typed L"Typed" +#define QT3DS_WCHAR_T_Guided L"Guided" +#define QT3DS_WCHAR_T_Named L"Named" +#define QT3DS_WCHAR_T_SlideOwner L"SlideOwner" +#define QT3DS_WCHAR_T_Slide L"Slide" +#define QT3DS_WCHAR_T_Action L"Action" +#define QT3DS_WCHAR_T_Asset L"Asset" +#define QT3DS_WCHAR_T_Scene L"Scene" +#define QT3DS_WCHAR_T_Image L"Image" +#define QT3DS_WCHAR_T_Material L"Material" +#define QT3DS_WCHAR_T_Behavior L"Behavior" +#define QT3DS_WCHAR_T_Node L"Node" +#define QT3DS_WCHAR_T_Layer L"Layer" +#define QT3DS_WCHAR_T_Group L"Group" +#define QT3DS_WCHAR_T_Model L"Model" +#define QT3DS_WCHAR_T_Light L"Light" +#define QT3DS_WCHAR_T_Camera L"Camera" +#define QT3DS_WCHAR_T_Component L"Component" +#define QT3DS_WCHAR_T_Text L"Text" +#define QT3DS_WCHAR_T_Effect L"Effect" +#define QT3DS_WCHAR_T_RenderPlugin L"RenderPlugin" +#define QT3DS_WCHAR_T_MaterialBase L"MaterialBase" +#define QT3DS_WCHAR_T_CustomMaterial L"CustomMaterial" +#define QT3DS_WCHAR_T_ReferencedMaterial L"ReferencedMaterial" +#define QT3DS_WCHAR_T_Alias L"Alias" +#define QT3DS_WCHAR_T_Lightmaps L"Lightmaps" + +#define QT3DS_WCHAR_T_type L"type" +#define QT3DS_WCHAR_T_id L"id" +#define QT3DS_WCHAR_T_name L"name" +#define QT3DS_WCHAR_T_componentid L"componentid" +#define QT3DS_WCHAR_T_playmode L"playmode" +#define QT3DS_WCHAR_T_playthroughto L"playthroughto" +#define QT3DS_WCHAR_T_initialplaystate L"initialplaystate" +#define QT3DS_WCHAR_T_actioneyeball L"actioneyeball" +#define QT3DS_WCHAR_T_sourcepath L"sourcepath" +#define QT3DS_WCHAR_T_importid L"importid" +#define QT3DS_WCHAR_T_starttime L"starttime" +#define QT3DS_WCHAR_T_endtime L"endtime" +#define QT3DS_WCHAR_T_eyeball L"eyeball" +#define QT3DS_WCHAR_T_shy L"shy" +#define QT3DS_WCHAR_T_locked L"locked" +#define QT3DS_WCHAR_T_timebarcolor L"timebarcolor" +#define QT3DS_WCHAR_T_timebartext L"timebartext" +#define QT3DS_WCHAR_T_bgcolorenable L"bgcolorenable" +#define QT3DS_WCHAR_T_background L"background" +#define QT3DS_WCHAR_T_backgroundcolor L"backgroundcolor" +#define QT3DS_WCHAR_T_blendtype L"blendtype" +#define QT3DS_WCHAR_T_scaleu L"scaleu" +#define QT3DS_WCHAR_T_scalev L"scalev" +#define QT3DS_WCHAR_T_mappingmode L"mappingmode" +#define QT3DS_WCHAR_T_tilingmodehorz L"tilingmodehorz" +#define QT3DS_WCHAR_T_tilingmodevert L"tilingmodevert" +#define QT3DS_WCHAR_T_rotationuv L"rotationuv" +#define QT3DS_WCHAR_T_positionu L"positionu" +#define QT3DS_WCHAR_T_positionv L"positionv" +#define QT3DS_WCHAR_T_pivotu L"pivotu" +#define QT3DS_WCHAR_T_pivotv L"pivotv" +#define QT3DS_WCHAR_T_subpresentation L"subpresentation" +#define QT3DS_WCHAR_T_iblprobe L"iblprobe" +#define QT3DS_WCHAR_T_shaderlighting L"shaderlighting" +#define QT3DS_WCHAR_T_blendmode L"blendmode" +#define QT3DS_WCHAR_T_diffuse L"diffuse" +#define QT3DS_WCHAR_T_diffusemap L"diffusemap" +#define QT3DS_WCHAR_T_diffusemap2 L"diffusemap2" +#define QT3DS_WCHAR_T_diffusemap3 L"diffusemap3" +#define QT3DS_WCHAR_T_specularreflection L"specularreflection" +#define QT3DS_WCHAR_T_specularmap L"specularmap" +#define QT3DS_WCHAR_T_specularmodel L"specularmodel" +#define QT3DS_WCHAR_T_speculartint L"speculartint" +#define QT3DS_WCHAR_T_ior L"ior" +#define QT3DS_WCHAR_T_specularamount L"specularamount" +#define QT3DS_WCHAR_T_specularroughness L"specularroughness" +#define QT3DS_WCHAR_T_opacitymap L"opacitymap" +#define QT3DS_WCHAR_T_emissivepower L"emissivepower" +#define QT3DS_WCHAR_T_emissivecolor L"emissivecolor" +#define QT3DS_WCHAR_T_emissivemap L"emissivemap" +#define QT3DS_WCHAR_T_emissivemap2 L"emissivemap2" +#define QT3DS_WCHAR_T_normalmap L"normalmap" +#define QT3DS_WCHAR_T_normalstrength L"normalstrength" +#define QT3DS_WCHAR_T_position L"position" +#define QT3DS_WCHAR_T_rotation L"rotation" +#define QT3DS_WCHAR_T_scale L"scale" +#define QT3DS_WCHAR_T_pivot L"pivot" +#define QT3DS_WCHAR_T_opacity L"opacity" +#define QT3DS_WCHAR_T_rotationorder L"rotationorder" +#define QT3DS_WCHAR_T_orientation L"orientation" +#define QT3DS_WCHAR_T_progressiveaa L"progressiveaa" +#define QT3DS_WCHAR_T_multisampleaa L"multisampleaa" +#define QT3DS_WCHAR_T_disabledepthtest L"disabledepthtest" +#define QT3DS_WCHAR_T_disabledepthprepass L"disabledepthprepass" +#define QT3DS_WCHAR_T_layerwidth L"layerwidth" +#define QT3DS_WCHAR_T_layerheight L"layerheight" +#define QT3DS_WCHAR_T_lighttype L"lighttype" +#define QT3DS_WCHAR_T_lightdiffuse L"lightdiffuse" +#define QT3DS_WCHAR_T_lightspecular L"lightspecular" +#define QT3DS_WCHAR_T_lightambient L"lightambient" +#define QT3DS_WCHAR_T_brightness L"brightness" +#define QT3DS_WCHAR_T_linearfade L"linearfade" +#define QT3DS_WCHAR_T_expfade L"expfade" +#define QT3DS_WCHAR_T_areawidth L"areawidth" +#define QT3DS_WCHAR_T_areaheight L"areaheight" +#define QT3DS_WCHAR_T_castshadow L"castshadow" +#define QT3DS_WCHAR_T_shdwbias L"shdwbias" +#define QT3DS_WCHAR_T_shdwfactor L"shdwfactor" +#define QT3DS_WCHAR_T_shdwmapres L"shdwmapres" +#define QT3DS_WCHAR_T_shdwmapfar L"shdwmapfar" +#define QT3DS_WCHAR_T_shdwmapfov L"shdwmapfov" +#define QT3DS_WCHAR_T_shdwfilter L"shdwfilter" +#define QT3DS_WCHAR_T_orthographic L"orthographic" +#define QT3DS_WCHAR_T_fov L"fov" +#define QT3DS_WCHAR_T_clipnear L"clipnear" +#define QT3DS_WCHAR_T_clipfar L"clipfar" +#define QT3DS_WCHAR_T_lookatlock L"lookatlock" +#define QT3DS_WCHAR_T_lookatpoint L"lookatpoint" +#define QT3DS_WCHAR_T_textstring L"textstring" +#define QT3DS_WCHAR_T_textcolor L"textcolor" +#define QT3DS_WCHAR_T_font L"font" +#define QT3DS_WCHAR_T_size L"size" +#define QT3DS_WCHAR_T_horzalign L"horzalign" +#define QT3DS_WCHAR_T_vertalign L"vertalign" +#define QT3DS_WCHAR_T_leading L"leading" +#define QT3DS_WCHAR_T_tracking L"tracking" +#define QT3DS_WCHAR_T_enableacceleratedfont L"enableacceleratedfont" +#define QT3DS_WCHAR_T_importfile L"importfile" +#define QT3DS_WCHAR_T_fileid L"fileid" +#define QT3DS_WCHAR_T_size L"size" +#define QT3DS_WCHAR_T_location L"location" +#define QT3DS_WCHAR_T_boneid L"boneid" +#define QT3DS_WCHAR_T_poseroot L"poseroot" +#define QT3DS_WCHAR_T_ignoresparent L"ignoresparent" +#define QT3DS_WCHAR_T_tessellation L"tessellation" +#define QT3DS_WCHAR_T_edgetess L"edgetess" +#define QT3DS_WCHAR_T_innertess L"innertess" +#define QT3DS_WCHAR_T_scalemode L"scalemode" +#define QT3DS_WCHAR_T_scaleanchor L"scaleanchor" +#define QT3DS_WCHAR_T_horzfields L"horzfields" +#define QT3DS_WCHAR_T_left L"left" +#define QT3DS_WCHAR_T_leftunits L"leftunits" +#define QT3DS_WCHAR_T_width L"width" +#define QT3DS_WCHAR_T_widthunits L"widthunits" +#define QT3DS_WCHAR_T_right L"right" +#define QT3DS_WCHAR_T_rightunits L"rightunits" +#define QT3DS_WCHAR_T_vertfields L"vertfields" +#define QT3DS_WCHAR_T_top L"top" +#define QT3DS_WCHAR_T_topunits L"topunits" +#define QT3DS_WCHAR_T_height L"height" +#define QT3DS_WCHAR_T_heightunits L"heightunits" +#define QT3DS_WCHAR_T_bottom L"bottom" +#define QT3DS_WCHAR_T_bottomunits L"bottomunits" +#define QT3DS_WCHAR_T_aostrength L"aostrength" +#define QT3DS_WCHAR_T_aodistance L"aodistance" +#define QT3DS_WCHAR_T_aosoftness L"aosoftness" +#define QT3DS_WCHAR_T_aobias L"aobias" +#define QT3DS_WCHAR_T_aosamplerate L"aosamplerate" +#define QT3DS_WCHAR_T_aodither L"aodither" +#define QT3DS_WCHAR_T_shadowstrength L"shadowstrength" +#define QT3DS_WCHAR_T_shadowdist L"shadowdist" +#define QT3DS_WCHAR_T_shadowsoftness L"shadowsoftness" +#define QT3DS_WCHAR_T_shadowbias L"shadowbias" +#define QT3DS_WCHAR_T_source L"source" +#define QT3DS_WCHAR_T_referencedmaterial L"referencedmaterial" +#define QT3DS_WCHAR_T_lightprobe L"lightprobe" +#define QT3DS_WCHAR_T_probebright L"probebright" +#define QT3DS_WCHAR_T_fastibl L"fastibl" +#define QT3DS_WCHAR_T_probehorizon L"probehorizon" +#define QT3DS_WCHAR_T_probefov L"probefov" +#define QT3DS_WCHAR_T_lightprobe2 L"lightprobe2" +#define QT3DS_WCHAR_T_probe2fade L"probe2fade" +#define QT3DS_WCHAR_T_probe2window L"probe2window" +#define QT3DS_WCHAR_T_probe2pos L"probe2pos" +#define QT3DS_WCHAR_T_bumpmap L"bumpmap" +#define QT3DS_WCHAR_T_bumpamount L"bumpamount" +#define QT3DS_WCHAR_T_normalmap L"normalmap" +#define QT3DS_WCHAR_T_displacementmap L"displacementmap" +#define QT3DS_WCHAR_T_displaceamount L"displaceamount" +#define QT3DS_WCHAR_T_translucencymap L"translucencymap" +#define QT3DS_WCHAR_T_translucentfalloff L"translucentfalloff" +#define QT3DS_WCHAR_T_diffuselightwrap L"diffuselightwrap" +#define QT3DS_WCHAR_T_fresnelPower L"fresnelPower" +#define QT3DS_WCHAR_T_referencednode L"referencednode" +#define QT3DS_WCHAR_T_temporalaa L"temporalaa" +#define QT3DS_WCHAR_T_scope L"scope" +#define QT3DS_WCHAR_T_Path L"Path" +#define QT3DS_WCHAR_T_pathdata L"pathdata" +#define QT3DS_WCHAR_T_PathAnchorPoint L"PathAnchorPoint" +#define QT3DS_WCHAR_T_incomingangle L"incomingangle" +#define QT3DS_WCHAR_T_incomingdistance L"incomingdistance" +#define QT3DS_WCHAR_T_outgoingdistance L"outgoingdistance" +#define QT3DS_WCHAR_T_linearerror L"linearerror" +#define QT3DS_WCHAR_T_edgetessamount L"edgetessamount" +#define QT3DS_WCHAR_T_innertessamount L"innertessamount" +#define QT3DS_WCHAR_T_begincap L"begincap" +#define QT3DS_WCHAR_T_begincapoffset L"begincapoffset" +#define QT3DS_WCHAR_T_begincapopacity L"begincapopacity" +#define QT3DS_WCHAR_T_begincapwidth L"begincapwidth" +#define QT3DS_WCHAR_T_endcap L"endcap" +#define QT3DS_WCHAR_T_endcapoffset L"endcapoffset" +#define QT3DS_WCHAR_T_endcapopacity L"endcapopacity" +#define QT3DS_WCHAR_T_endcapwidth L"endcapwidth" +#define QT3DS_WCHAR_T_pathtype L"pathtype" +#define QT3DS_WCHAR_T_closed L"closed" +#define QT3DS_WCHAR_T_paintstyle L"paintstyle" +#define QT3DS_WCHAR_T_SubPath L"SubPath" +#define QT3DS_WCHAR_T_lightmapindirect L"lightmapindirect" +#define QT3DS_WCHAR_T_lightmapradiosity L"lightmapradiosity" +#define QT3DS_WCHAR_T_lightmapshadow L"lightmapshadow" + +const wchar_t *ComposerObjectTypes::Convert(ComposerObjectTypes::Enum inType) +{ + switch (inType) { +#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \ + case name: \ + return QT3DS_WCHAR_T_##name; + ITERATE_COMPOSER_OBJECT_TYPES +#undef HANDLE_COMPOSER_OBJECT_TYPE + } + QT3DS_ASSERT(false); + return L"Unknown"; +} + +ComposerObjectTypes::Enum ComposerObjectTypes::Convert(const wchar_t *inType) +{ + +#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \ + if (AreEqual(QT3DS_WCHAR_T_##name, inType)) \ + return ComposerObjectTypes::name; + ITERATE_COMPOSER_OBJECT_TYPES +#undef HANDLE_COMPOSER_OBJECT_TYPE + + QT3DS_ASSERT(false); + return ComposerObjectTypes::Unknown; +} + +ComposerObjectTypes::Enum ComposerObjectTypes::Convert(const char8_t *inType) +{ + +#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \ + if (AreEqual(#name, inType)) \ + return ComposerObjectTypes::name; + ITERATE_COMPOSER_OBJECT_TYPES +#undef HANDLE_COMPOSER_OBJECT_TYPE + + QT3DS_ASSERT(false); + return ComposerObjectTypes::Unknown; +} + +const wchar_t *ComposerPropertyNames::Convert(ComposerPropertyNames::Enum inType) +{ + switch (inType) { +#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, type, defaultValue) +#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) \ + case name: \ + return QT3DS_WCHAR_T_##name; +#define HANDLE_COMPOSER_PROPERTY(name, memberName, type, defaultValue) \ + HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) +#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) propmacro + ITERATE_COMPOSER_OBJECT_TYPES +#undef HANDLE_COMPOSER_OBJECT_TYPE +#undef HANDLE_COMPOSER_PROPERTY +#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT +#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE + default: + break; + } + QT3DS_ASSERT(false); + return L"Unknown"; +} + +ComposerPropertyNames::Enum ComposerPropertyNames::Convert(const wchar_t *inType) +{ +#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, type, defaultValue) +#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) \ + if (AreEqual(inType, QT3DS_WCHAR_T_##name)) \ + return name; +#define HANDLE_COMPOSER_PROPERTY(name, memberName, type, defaultValue) \ + HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) +#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) propmacro + ITERATE_COMPOSER_OBJECT_TYPES +#undef HANDLE_COMPOSER_OBJECT_TYPE +#undef HANDLE_COMPOSER_PROPERTY +#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT +#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE + QT3DS_ASSERT(false); + return ComposerPropertyNames::Unknown; +} + +const char8_t *ComposerPropertyNames::ConvertNarrow(ComposerPropertyNames::Enum inType) +{ + switch (inType) { +#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, type, defaultValue) +#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) \ + case name: \ + return #name; +#define HANDLE_COMPOSER_PROPERTY(name, memberName, type, defaultValue) \ + HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) +#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) propmacro + ITERATE_COMPOSER_OBJECT_TYPES +#undef HANDLE_COMPOSER_OBJECT_TYPE +#undef HANDLE_COMPOSER_PROPERTY +#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT +#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE + default: + break; + } + QT3DS_ASSERT(false); + return "Unknown"; +} + +ComposerPropertyNames::Enum ComposerPropertyNames::Convert(const char8_t *inType) +{ +#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, type, defaultValue) +#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) \ + if (AreEqual(inType, #name)) \ + return name; +#define HANDLE_COMPOSER_PROPERTY(name, memberName, type, defaultValue) \ + HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) +#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) propmacro + ITERATE_COMPOSER_OBJECT_TYPES +#undef HANDLE_COMPOSER_OBJECT_TYPE +#undef HANDLE_COMPOSER_PROPERTY +#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT +#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE + QT3DS_ASSERT(false); + return ComposerPropertyNames::Unknown; +} + +#define HANDLE_COMPOSER_PROPERTY(name, memberName, dtype, defaultValue) \ + , memberName(inCore, inInstance, DataConstructor<dtype>().Construct(defaultValue)) + +#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, dtype) \ + , memberName(inCore, inInstance) + +#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, dtype, defaultValue) \ + HANDLE_COMPOSER_PROPERTY(name, memberName, dtype, defaultValue) + +#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \ + SComposerTypePropertyDefinition<ComposerObjectTypes::name>::SComposerTypePropertyDefinition( \ + IDataCore &inCore, Qt3DSDMInstanceHandle inInstance) \ + : reserved(false) propmacro \ + { \ + Q_UNUSED(inCore);\ + Q_UNUSED(inInstance);\ + } +ITERATE_COMPOSER_OBJECT_TYPES +#undef HANDLE_COMPOSER_OBJECT_TYPE +#undef HANDLE_COMPOSER_PROPERTY +#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT +#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE + +void ComposerTypeDefinitionsHelper::SetInstanceAsCanonical(IMetaData &inMetaData, + Qt3DSDMInstanceHandle inInstance, + ComposerObjectTypes::Enum inObjectType) +{ + inMetaData.SetInstanceAsCanonical(inInstance, ComposerObjectTypes::Convert(inObjectType)); +} + +void ComposerTypeDefinitionsHelper::SetInstancePropertyValue(IDataCore &inDataCore, + Qt3DSDMInstanceHandle inInstance, + Qt3DSDMPropertyHandle inProperty, + const wchar_t *inPropValue) +{ + inDataCore.SetInstancePropertyValue(inInstance, inProperty, make_shared<CDataStr>(inPropValue)); +} + +void ComposerTypeDefinitionsHelper::DeriveInstance(IDataCore &inDataCore, + Qt3DSDMInstanceHandle inInstance, + Qt3DSDMInstanceHandle inParent) +{ + inDataCore.DeriveInstance(inInstance, inParent); +} + +// Container object for all of the object definitions +SComposerObjectDefinitions::SComposerObjectDefinitions( + IDataCore &inCore, + IMetaData &inMetaData /*, ISlideCore& inSlideCore, IPropertySystem& inPropertySystem*/) + : m_DataCore(inCore) + , m_MetaData(inMetaData) + //, m_SlideCore( inSlideCore ) + //, m_PropertySystem( inPropertySystem ) + , m_Typed(inCore, inMetaData, inCore.CreateInstance()) + , m_Guided(inCore, inMetaData, inCore.CreateInstance()) + , m_Named(inCore, inMetaData, inCore.CreateInstance()) + , m_SlideOwner(inCore, inMetaData, inCore.CreateInstance()) + , m_Slide(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Named) + , m_Action(inCore, inMetaData, inCore.CreateInstance(), m_Typed) + , m_Asset(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Guided, m_Named) + , m_Scene(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset, m_SlideOwner) + , m_Image(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset) + , m_Lightmaps(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset) + , m_MaterialBase(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Lightmaps) + , m_Material(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_MaterialBase) + , m_CustomMaterial(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_MaterialBase) + , m_ReferencedMaterial(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_MaterialBase) + , m_Behavior(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset) + , m_Node(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset) + , m_Layer(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node) + , m_Model(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node) + , m_Group(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node) + , m_Light(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node) + , m_Camera(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node) + , m_Component(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node, m_SlideOwner) + , m_Text(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node) + , m_Effect(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset) + , m_RenderPlugin(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset) + , m_Alias(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node) + , m_Path(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node) + , m_PathAnchorPoint(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset) + , m_SubPath(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset) +{ +} + +bool SComposerObjectDefinitions::IsA(Qt3DSDMInstanceHandle inInstance, + ComposerObjectTypes::Enum inType) +{ + if (m_DataCore.IsInstance(inInstance) == false) + return false; + + switch (inType) { +#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \ + case ComposerObjectTypes::name: \ + return m_DataCore.IsInstanceOrDerivedFrom(inInstance, m_##name.m_Instance); + ITERATE_COMPOSER_OBJECT_TYPES +#undef HANDLE_COMPOSER_OBJECT_TYPE + } + QT3DS_ASSERT(false); + return false; +} + +// Could easily return None, meaning we can't identify the object type. +// Checks the type of the first derivation parent, so this won't ever return +// SlideOwner, for instance. +ComposerObjectTypes::Enum SComposerObjectDefinitions::GetType(Qt3DSDMInstanceHandle inInstance) +{ + if (m_DataCore.IsInstance(inInstance) == false) + return ComposerObjectTypes::Unknown; + + Qt3DSDMInstanceHandle theTargetInstance = inInstance; + TInstanceHandleList theHandleList; + m_DataCore.GetInstanceParents(inInstance, theHandleList); + if (theHandleList.empty() == false) + theTargetInstance = theHandleList[0]; + +#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \ + if (m_##name.m_Instance == theTargetInstance) \ + return ComposerObjectTypes::name; + ITERATE_COMPOSER_OBJECT_TYPES +#undef HANDLE_COMPOSER_OBJECT_TYPE + + return ComposerObjectTypes::Unknown; +} + +Qt3DSDMInstanceHandle +SComposerObjectDefinitions::GetInstanceForType(ComposerObjectTypes::Enum inType) +{ + switch (inType) { +#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \ + case ComposerObjectTypes::name: \ + return m_##name.m_Instance; + ITERATE_COMPOSER_OBJECT_TYPES +#undef HANDLE_COMPOSER_OBJECT_TYPE + } + QT3DS_ASSERT(false); + return 0; +} |