/**************************************************************************** ** ** 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$ ** ****************************************************************************/ #pragma once #include "Qt3DSDMHandles.h" #include "Qt3DSDMDataTypes.h" #include "foundation/Qt3DSOption.h" #include "Qt3DSDMDataCore.h" #include // Defines the minimal property model that UIComposer needs to // run off of. namespace qt3dsdm { class IDataCore; class IMetaData; class ISlideCore; class IPropertySystem; // Extensible macro definitions // Enumerations *have* to be in derivation order // else initialization of the SComposerObjectDefinitions class // will fail catastrophically // Specific type documentation is below #define ITERATE_COMPOSER_OBJECT_TYPES \ HANDLE_COMPOSER_OBJECT_TYPE(Typed, ITERATE_COMPOSER_TYPED_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Guided, ITERATE_COMPOSER_GUIDED_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Named, ITERATE_COMPOSER_NAMED_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(SlideOwner, ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Slide, ITERATE_COMPOSER_SLIDE_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Action, ITERATE_COMPOSER_ACTION_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Asset, ITERATE_COMPOSER_ASSET_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Scene, ITERATE_COMPOSER_SCENE_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Image, ITERATE_COMPOSER_IMAGE_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(MaterialBase, ITERATE_COMPOSER_MATERIAL_BASE_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Lightmaps, ITERATE_COMPOSER_LIGHTMAP_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Material, ITERATE_COMPOSER_MATERIAL_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(CustomMaterial, ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(ReferencedMaterial, \ ITERATE_COMPOSER_REFERENCED_MATERIAL_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Behavior, ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Effect, ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Node, ITERATE_COMPOSER_NODE_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Layer, ITERATE_COMPOSER_LAYER_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Group, ITERATE_COMPOSER_GROUP_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Model, ITERATE_COMPOSER_MODEL_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Light, ITERATE_COMPOSER_LIGHT_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Camera, ITERATE_COMPOSER_CAMERA_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Component, ITERATE_COMPOSER_COMPONENT_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Text, ITERATE_COMPOSER_TEXT_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(RenderPlugin, ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Alias, ITERATE_COMPOSER_ALIAS_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(Path, ITERATE_COMPOSER_PATH_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(PathAnchorPoint, ITERATE_COMPOSER_PATH_ANCHOR_POINT_PROPERTIES) \ HANDLE_COMPOSER_OBJECT_TYPE(SubPath, ITERATE_COMPOSER_PATH_SUBPATH_PROPERTIES) #define ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES #define ITERATE_COMPOSER_TYPED_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(type, m_TypeProp, TDataStrPtr, L"Typed") #define ITERATE_COMPOSER_GUIDED_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(id, m_GuidProp, SLong4, 0) #define ITERATE_COMPOSER_NAMED_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(name, m_NameProp, TDataStrPtr, L"Unnamed") #define ITERATE_COMPOSER_ASSET_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(sourcepath, m_SourcePath, TDataStrPtr, L"") \ HANDLE_COMPOSER_PROPERTY(importid, m_ImportId, TDataStrPtr, L"") \ HANDLE_COMPOSER_PROPERTY(importfile, m_ImportFile, TDataStrPtr, L"") \ HANDLE_COMPOSER_PROPERTY(fileid, m_FileId, TDataStrPtr, L"") \ HANDLE_COMPOSER_PROPERTY(starttime, m_StartTime, qt3ds::QT3DSI32, 0) \ HANDLE_COMPOSER_PROPERTY(endtime, m_EndTime, qt3ds::QT3DSI32, 10000) \ HANDLE_COMPOSER_PROPERTY(eyeball, m_Eyeball, bool, true) \ HANDLE_COMPOSER_PROPERTY(shy, m_Shy, bool, false) \ HANDLE_COMPOSER_PROPERTY(locked, m_Locked, bool, false) \ HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(timebarcolor, m_TimebarColor, SFloat4) \ HANDLE_COMPOSER_PROPERTY(timebartext, m_TimebarText, TDataStrPtr, L"") \ HANDLE_COMPOSER_PROPERTY(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_SCENE_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(bgcolorenable, m_BgColorEnable, bool, true) \ HANDLE_COMPOSER_PROPERTY(backgroundcolor, m_BackgroundColor, SFloat4, SFloat4(0, 0, 0, 1)) \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_COMPONENT_PROPERTIES \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(variants, m_variants, TDataStrPtr, L"") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_NODE_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(position, m_Position, SFloat3, SFloat3(0, 0, 0)) \ HANDLE_COMPOSER_PROPERTY(rotation, m_Rotation, SFloat3, SFloat3(0, 0, 0)) \ HANDLE_COMPOSER_PROPERTY(scale, m_Scale, SFloat3, SFloat3(1, 1, 1)) \ HANDLE_COMPOSER_PROPERTY(pivot, m_Pivot, SFloat3, SFloat3(0, 0, 0)) \ HANDLE_COMPOSER_PROPERTY(opacity, m_Opacity, float, 100.f) \ HANDLE_COMPOSER_PROPERTY(rotationorder, m_RotationOrder, TDataStrPtr, L"YXZ") \ HANDLE_COMPOSER_PROPERTY(orientation, m_Orientation, TDataStrPtr, L"Left Handed") \ HANDLE_COMPOSER_PROPERTY(boneid, m_BoneId, qt3ds::QT3DSI32, 0) \ HANDLE_COMPOSER_PROPERTY(ignoresparent, m_IgnoresParent, bool, false) \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_MODEL_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(shadowcaster, m_ShadowCaster, bool, true) \ HANDLE_COMPOSER_PROPERTY(poseroot, m_PoseRoot, qt3ds::QT3DSI32, -1) \ HANDLE_COMPOSER_PROPERTY(tessellation, m_Tessellation, TDataStrPtr, L"None") \ HANDLE_COMPOSER_PROPERTY(edgetess, m_EdgeTess, float, 1.0) \ HANDLE_COMPOSER_PROPERTY(innertess, m_InnerTess, float, 1.0) \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(variants, m_variants, TDataStrPtr, L"") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_IMAGE_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(scaleu, m_RepeatU, float, 1.0f) \ HANDLE_COMPOSER_PROPERTY(scalev, m_RepeatV, float, 1.0f) \ HANDLE_COMPOSER_PROPERTY(mappingmode, m_TextureMapping, TDataStrPtr, L"UV Mapping") \ HANDLE_COMPOSER_PROPERTY(tilingmodehorz, m_TilingU, TDataStrPtr, L"No Tiling") \ HANDLE_COMPOSER_PROPERTY(tilingmodevert, m_TilingV, TDataStrPtr, L"No Tiling") \ HANDLE_COMPOSER_PROPERTY(rotationuv, m_RotationUV, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(positionu, m_PositionU, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(positionv, m_PositionV, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(pivotu, m_PivotU, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(pivotv, m_PivotV, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(subpresentation, m_SubPresentation, TDataStrPtr, L"") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_LIGHTMAP_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(lightmapindirect, m_LightmapIndirect, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(lightmapradiosity, m_LightmapRadiosity, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(lightmapshadow, m_LightmapShadow, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_CUSTOM_MATERIAL_PROPERTIES \ HANDLE_QT3DS_RENDER_PROPERTY(iblprobe, m_IblProbe, SLong4, 0) #define ITERATE_COMPOSER_MATERIAL_BASE_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(iblprobe, m_IblProbe, SLong4, 0) #define ITERATE_COMPOSER_MATERIAL_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(shaderlighting, m_ShaderLighting, TDataStrPtr, L"Vertex") \ HANDLE_COMPOSER_PROPERTY(blendmode, m_BlendMode, TDataStrPtr, L"Normal") \ HANDLE_COMPOSER_PROPERTY(diffuse, m_DiffuseColor, SFloat4, SFloat4(1, 1, 1, 1)) \ HANDLE_COMPOSER_PROPERTY(diffusemap, m_DiffuseMap1, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(diffusemap2, m_DiffuseMap2, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(diffusemap3, m_DiffuseMap3, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(specularreflection, m_SpecularReflection, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(specularamount, m_SpecularAmount, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(specularroughness, m_SpecularRoughness, float, 50.f) \ HANDLE_COMPOSER_PROPERTY(roughnessmap, m_RoughnessMap, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(opacity, m_Opacity, float, 100.f) \ HANDLE_COMPOSER_PROPERTY(opacitymap, m_OpacityMap, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(emissivecolor, m_EmissiveColor, SFloat4, SFloat4(1, 1, 1, 1)) \ HANDLE_COMPOSER_PROPERTY(emissivepower, m_EmissivePower, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(emissivemap, m_EmissiveMap, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(emissivemap2, m_EmissiveMap2, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(bumpmap, m_BumpMap, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(bumpamount, m_BumpAmount, float, 9.0f) \ HANDLE_COMPOSER_PROPERTY(normalmap, m_NormalMap, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(displacementmap, m_DisplacementMap, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(displaceamount, m_DisplaceAmount, float, 0.5f) \ HANDLE_COMPOSER_PROPERTY(translucencymap, m_TranslucencyMap, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(translucentfalloff, m_TranslucentFalloff, float, 1.f) \ HANDLE_COMPOSER_PROPERTY(diffuselightwrap, m_DiffuseLightWrap, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(specularmap, m_SpecularMap, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(specularmodel, m_SpecularModel, TDataStrPtr, L"Default") \ HANDLE_COMPOSER_PROPERTY(speculartint, m_SpecularTint, SFloat4, SFloat4(1, 1, 1, 1)) \ HANDLE_COMPOSER_PROPERTY(ior, m_IOR, float, 0) \ HANDLE_COMPOSER_PROPERTY(fresnelPower, m_FresnelPower, float, 0) \ HANDLE_COMPOSER_PROPERTY(vertexcolors, m_VertexColors, bool, false) \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_REFERENCED_MATERIAL_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(referencedmaterial, m_ReferencedMaterial, SObjectRefType, L"") #define ITERATE_COMPOSER_LAYER_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(progressiveaa, m_ProgressiveAA, TDataStrPtr, L"None") \ HANDLE_COMPOSER_PROPERTY(multisampleaa, m_MultisampleAA, TDataStrPtr, L"None") \ HANDLE_COMPOSER_PROPERTY(temporalaa, m_TemporalAA, bool, false) \ HANDLE_COMPOSER_PROPERTY(disabledepthtest, m_DisableDepthTest, bool, false) \ HANDLE_COMPOSER_PROPERTY(disabledepthprepass, m_DisableDepthPrepass, bool, false) \ HANDLE_COMPOSER_PROPERTY(background, m_Background, TDataStrPtr, L"Transparent") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(backgroundcolor, m_BackgroundColor, SFloat4, \ SFloat4(0, 0, 0, 1)) \ HANDLE_COMPOSER_PROPERTY(blendtype, m_BlendType, TDataStrPtr, L"Normal") \ HANDLE_COMPOSER_PROPERTY(horzfields, m_HorizontalFieldValues, TDataStrPtr, L"Left/Width") \ HANDLE_COMPOSER_PROPERTY(left, m_Left, float, 0) \ HANDLE_COMPOSER_PROPERTY(leftunits, m_LeftUnits, TDataStrPtr, L"percent") \ HANDLE_COMPOSER_PROPERTY(width, m_Width, float, 100.0f) \ HANDLE_COMPOSER_PROPERTY(widthunits, m_WidthUnits, TDataStrPtr, L"percent") \ HANDLE_COMPOSER_PROPERTY(right, m_Right, float, 0) \ HANDLE_COMPOSER_PROPERTY(rightunits, m_RightUnits, TDataStrPtr, L"percent") \ HANDLE_COMPOSER_PROPERTY(vertfields, m_VerticalFieldValues, TDataStrPtr, L"Top/Height") \ HANDLE_COMPOSER_PROPERTY(top, m_Top, float, 0) \ HANDLE_COMPOSER_PROPERTY(topunits, m_TopUnits, TDataStrPtr, L"percent") \ HANDLE_COMPOSER_PROPERTY(height, m_Height, float, 100.0f) \ HANDLE_COMPOSER_PROPERTY(heightunits, m_HeightUnits, TDataStrPtr, L"percent") \ HANDLE_COMPOSER_PROPERTY(bottom, m_Bottom, float, 0) \ HANDLE_COMPOSER_PROPERTY(bottomunits, m_BottomUnits, TDataStrPtr, L"percent") \ HANDLE_COMPOSER_PROPERTY(aostrength, m_AoStrength, float, 0) \ HANDLE_COMPOSER_PROPERTY(aodistance, m_AoDistance, float, 0) \ HANDLE_COMPOSER_PROPERTY(aosoftness, m_AoSoftness, float, 0) \ HANDLE_COMPOSER_PROPERTY(aobias, m_AoBias, float, 0) \ HANDLE_COMPOSER_PROPERTY(aosamplerate, m_AoSamplerate, qt3ds::QT3DSI32, 1) \ HANDLE_COMPOSER_PROPERTY(aodither, m_AoDither, bool, false) \ HANDLE_COMPOSER_PROPERTY(shadowstrength, m_ShadowStrength, float, 0) \ HANDLE_COMPOSER_PROPERTY(shadowdist, m_ShadowDist, float, 0) \ HANDLE_COMPOSER_PROPERTY(shadowsoftness, m_ShadowSoftness, float, 0) \ HANDLE_COMPOSER_PROPERTY(shadowbias, m_ShadowBias, float, 0) \ HANDLE_COMPOSER_PROPERTY(lightprobe, m_LightProbe, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(probebright, m_ProbeBright, float, 100.0f) \ HANDLE_COMPOSER_PROPERTY(fastibl, m_FastIbl, bool, true) \ HANDLE_COMPOSER_PROPERTY(probehorizon, m_ProbeHorizon, float, -1) \ HANDLE_COMPOSER_PROPERTY(probefov, m_ProbeFov, float, 180.0f) \ HANDLE_COMPOSER_PROPERTY(lightprobe2, m_LightProbe2, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(probe2fade, m_Probe2Fade, float, 1) \ HANDLE_COMPOSER_PROPERTY(probe2window, m_Probe2Window, float, 1) \ HANDLE_COMPOSER_PROPERTY(probe2pos, m_Probe2Pos, float, 0.5f) \ HANDLE_COMPOSER_PROPERTY(variants, m_variants, TDataStrPtr, L"") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_GROUP_PROPERTIES \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(variants, m_variants, TDataStrPtr, L"") \ #define ITERATE_COMPOSER_LIGHT_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(lighttype, m_LightType, TDataStrPtr, L"Directional") \ HANDLE_COMPOSER_PROPERTY(scope, m_Scope, SObjectRefType, L"") \ HANDLE_COMPOSER_PROPERTY(lightdiffuse, m_LightColor, SFloat4, SFloat4(1, 1, 1, 1)) \ HANDLE_COMPOSER_PROPERTY(lightspecular, m_SpecularColor, SFloat4, SFloat4(1, 1, 1, 1)) \ HANDLE_COMPOSER_PROPERTY(lightambient, m_AmbientColor, SFloat4, SFloat4(0, 0, 0, 1)) \ HANDLE_COMPOSER_PROPERTY(brightness, m_Brightness, float, 100.0f) \ HANDLE_COMPOSER_PROPERTY(linearfade, m_LinearFade, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(expfade, m_ExpFade, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(areawidth, m_AreaWidth, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(areaheight, m_AreaHeight, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(castshadow, m_CastShadow, bool, false) \ HANDLE_COMPOSER_PROPERTY(shdwbias, m_ShadowBias, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(shdwfactor, m_ShadowFactor, float, 5.0f) \ HANDLE_COMPOSER_PROPERTY(shdwmapres, m_ShadowMapRes, qt3ds::QT3DSI32, 9) \ HANDLE_COMPOSER_PROPERTY(shdwmapfar, m_ShadowMapFar, float, 5000.0f) \ HANDLE_COMPOSER_PROPERTY(shdwmapfov, m_ShadowMapFov, float, 90.0f) \ HANDLE_COMPOSER_PROPERTY(shdwfilter, m_ShadowFilter, float, 35.0f) \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_CAMERA_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(orthographic, m_Orthographic, bool, false) \ HANDLE_COMPOSER_PROPERTY(fov, m_Fov, float, 60.f) \ HANDLE_COMPOSER_PROPERTY(fovhorizontal, m_FovHorizontal, bool, false) \ HANDLE_COMPOSER_PROPERTY(clipnear, m_ClipNear, float, 10.f) \ HANDLE_COMPOSER_PROPERTY(clipfar, m_ClipFar, float, 100000.f) \ HANDLE_COMPOSER_PROPERTY(scalemode, m_ScaleMode, TDataStrPtr, L"Fit") \ HANDLE_COMPOSER_PROPERTY(scaleanchor, m_ScaleAnchor, TDataStrPtr, L"Center") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_EDIT_CAMERA_PROPERTIES HANDLE_COMPOSER_PROPERTY(is3d, m_Is3d, bool, false) #define ITERATE_COMPOSER_TEXT_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(textstring, m_TextString, TDataStrPtr, L"Text") \ HANDLE_COMPOSER_PROPERTY(textcolor, m_TextColor, SFloat4, SFloat4(1, 1, 1, 1)) \ HANDLE_COMPOSER_PROPERTY(font, m_Font, TDataStrPtr, L"arial") \ HANDLE_COMPOSER_PROPERTY(size, m_Size, float, 24.f) \ HANDLE_COMPOSER_PROPERTY(horzalign, m_HorzAlign, TDataStrPtr, L"Center") \ HANDLE_COMPOSER_PROPERTY(vertalign, m_VertAlign, TDataStrPtr, L"Middle") \ HANDLE_COMPOSER_PROPERTY(leading, m_Leading, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(tracking, m_Tracking, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(dropshadow, m_DropShadow, bool, false) \ HANDLE_COMPOSER_PROPERTY(dropshadowstrength, m_DropShadowStrength, float, 80.f) \ HANDLE_COMPOSER_PROPERTY(dropshadowoffsetx, m_DropShadowOffsetX, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(dropshadowoffsety, m_DropShadowOffsetY, float, 0.f) \ HANDLE_COMPOSER_PROPERTY(wordwrap, m_WordWrap, TDataStrPtr, L"WrapWord") \ HANDLE_COMPOSER_PROPERTY(boundingbox, m_BoundingBox, SFloat2, SFloat2(0, 0)) \ HANDLE_COMPOSER_PROPERTY(elide, m_Elide, TDataStrPtr, L"ElideNone") \ HANDLE_COMPOSER_PROPERTY(enableacceleratedfont, m_EnableAcceleratedFont, bool, false) \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(variants, m_variants, TDataStrPtr, L"") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_SLIDE_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(componentid, m_ComponentId, SLong4, 0) \ HANDLE_COMPOSER_PROPERTY(playmode, m_PlayMode, TDataStrPtr, L"Looping") \ HANDLE_COMPOSER_PROPERTY(playthroughto, m_PlaythroughTo, SStringOrInt, L"Next") \ HANDLE_COMPOSER_PROPERTY(initialplaystate, m_InitialPlayState, TDataStrPtr, L"Play") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_ACTION_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(actioneyeball, m_ActionEyeball, bool, true) #define ITERATE_COMPOSER_ALIAS_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(referencednode, m_ReferencedNode, SObjectRefType, L"") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_PATH_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(pathtype, m_PathType, TDataStrPtr, L"Geometry") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(width, m_Width, float, 5.0f) \ HANDLE_COMPOSER_PROPERTY(linearerror, m_LinearError, float, 10) \ HANDLE_COMPOSER_PROPERTY(edgetessamount, m_EdgeTessAmount, float, 8) \ HANDLE_COMPOSER_PROPERTY(innertessamount, m_InnerTessAmount, float, 8) \ HANDLE_COMPOSER_PROPERTY(begincap, m_BeginCap, TDataStrPtr, L"None") \ HANDLE_COMPOSER_PROPERTY(begincapoffset, m_BeginCapOffset, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(begincapopacity, m_BeginCapOpacity, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(begincapwidth, m_BeginCapWidth, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(endcap, m_EndCap, TDataStrPtr, L"None") \ HANDLE_COMPOSER_PROPERTY(endcapoffset, m_EndCapOffset, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(endcapopacity, m_EndCapOpacity, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(endcapwidth, m_EndCapWidth, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(paintstyle, m_PaintStyle, TDataStrPtr, L"Stroked") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_PATH_ANCHOR_POINT_PROPERTIES \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(position, m_Position, SFloat2, SFloat2(0.0f, 0.0f)) \ HANDLE_COMPOSER_PROPERTY(incomingangle, m_IncomingAngle, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(incomingdistance, m_IncomingDistance, float, 0.0f) \ HANDLE_COMPOSER_PROPERTY(outgoingdistance, m_OutgoingDistance, float, 0.0f) #define ITERATE_COMPOSER_PATH_SUBPATH_PROPERTIES \ HANDLE_COMPOSER_PROPERTY(closed, m_Closed, bool, true) struct ComposerObjectTypes { enum Enum { Unknown = 0, #define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) name, ITERATE_COMPOSER_OBJECT_TYPES #undef HANDLE_COMPOSER_OBJECT_TYPE ControllableObject }; static const wchar_t *Convert(ComposerObjectTypes::Enum inType); static ComposerObjectTypes::Enum Convert(const wchar_t *inType); static ComposerObjectTypes::Enum Convert(const char8_t *inType); }; struct ComposerPropertyNames { enum Enum { Unknown = 0, #define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) name, #define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, type, defaultValue) #define HANDLE_COMPOSER_PROPERTY(name, memberName, type, defaultValue) name, #define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) propmacro ITERATE_COMPOSER_OBJECT_TYPES #undef HANDLE_COMPOSER_OBJECT_TYPE #undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT #undef HANDLE_COMPOSER_PROPERTY #undef HANDLE_COMPOSER_PROPERTY_DUPLICATE }; static const wchar_t *Convert(ComposerPropertyNames::Enum inType); static ComposerPropertyNames::Enum Convert(const wchar_t *inType); static const char8_t *ConvertNarrow(ComposerPropertyNames::Enum inType); static ComposerPropertyNames::Enum Convert(const char8_t *inType); }; template struct TypeToDataTypeMap { bool force_compile_error; }; template struct DataTypeToTypeMap { bool force_compile_error; }; #define QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(enumName, type) \ template <> \ struct TypeToDataTypeMap \ { \ static DataModelDataType::Value GetDataType() { return enumName; } \ }; \ template <> \ struct DataTypeToTypeMap \ { \ typedef type TDataType; \ }; QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float, float) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float2, SFloat2) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float3, SFloat3) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float4, SFloat4) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Long, qt3ds::QT3DSI32) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::String, TDataStrPtr) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Bool, bool) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Long4, SLong4) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::StringRef, SStringRef) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::StringOrInt, SStringOrInt) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::ObjectRef, SObjectRefType) QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::FloatList, TFloatList) #undef QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE template inline DataModelDataType::Value TypeToDataType() { return TypeToDataTypeMap::GetDataType(); } template struct SComposerPropertyDefinition { qt3ds::foundation::Option m_DefaultValue; Qt3DSDMPropertyHandle m_Property; SComposerPropertyDefinition(IDataCore &inDataCore, Qt3DSDMInstanceHandle inInstance, const TDataType &inDefault) : m_DefaultValue(inDefault) { QT3DSDM_LOG_FUNCTION("SComposerPropertyDefinition-1"); m_Property = inDataCore.AddProperty(inInstance, ComposerPropertyNames::Convert(TPropName), TypeToDataType()); if (m_DefaultValue.hasValue()) inDataCore.SetInstancePropertyValue(inInstance, m_Property, m_DefaultValue.getValue()); } SComposerPropertyDefinition(IDataCore &inDataCore, Qt3DSDMInstanceHandle inInstance) { QT3DSDM_LOG_FUNCTION("SComposerPropertyDefinition-2"); m_Property = inDataCore.AddProperty(inInstance, ComposerPropertyNames::Convert(TPropName), TypeToDataType()); } operator Qt3DSDMPropertyHandle() const { return m_Property; } }; // Define all the objects with their properties template struct SComposerTypePropertyDefinition { bool force_compile_error; }; #define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, dtype) \ SComposerPropertyDefinition memberName; #define HANDLE_COMPOSER_PROPERTY(name, memberName, dtype, defaultValue) \ HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, dtype) #define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, dtype, defaultValue) \ HANDLE_COMPOSER_PROPERTY(name, memberName, dtype, defaultValue) #define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \ template <> \ struct SComposerTypePropertyDefinition \ { \ bool reserved; \ propmacro SComposerTypePropertyDefinition(IDataCore &inCore, \ Qt3DSDMInstanceHandle 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 struct ComposerTypeDefinitionsHelper { // Functions here so we don't have to include UICDMDataCore.h or UICDMMetaData.h static void SetInstanceAsCanonical(IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, ComposerObjectTypes::Enum inObjectType); static void SetInstancePropertyValue(IDataCore &inDataCore, Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty, const wchar_t *inPropValue); static void DeriveInstance(IDataCore &inDataCore, Qt3DSDMInstanceHandle inInstance, Qt3DSDMInstanceHandle inParent); }; template struct SComposerBaseObjectDefinition : public SComposerTypePropertyDefinition { Qt3DSDMInstanceHandle m_Instance; SComposerBaseObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance) : SComposerTypePropertyDefinition(inCore, inInstance) , m_Instance(inInstance) { QT3DSDM_LOG_FUNCTION("SComposerBaseObjectDefinition"); ComposerTypeDefinitionsHelper::SetInstanceAsCanonical(inMetaData, inInstance, TEnumType); } template void Derive(IDataCore &inCore, const SComposerBaseObjectDefinition &inParent) { QT3DSDM_LOG_FUNCTION("SComposerBaseObjectDefinition::Derive"); ComposerTypeDefinitionsHelper::DeriveInstance(inCore, m_Instance, inParent.m_Instance); } void SetType(IDataCore &inCore, const SComposerBaseObjectDefinition &inParent) { QT3DSDM_LOG_FUNCTION("SComposerBaseObjectDefinition::SetInstancePropertyValue"); ComposerTypeDefinitionsHelper::SetInstancePropertyValue( inCore, m_Instance, inParent.m_TypeProp, ComposerObjectTypes::Convert(TEnumType)); } void TypedDerive(IDataCore &inCore, const SComposerBaseObjectDefinition &inParent) { QT3DSDM_LOG_FUNCTION("SComposerBaseObjectDefinition::TypedDerive"); Derive(inCore, inParent); SetType(inCore, inParent); } }; template struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { } }; // Base class of slides template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inNamed) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { TypedDerive(inCore, inTyped); Derive(inCore, inNamed); } }; // Base class of actions template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { TypedDerive(inCore, inTyped); } }; // Base class of assets template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inGuided, SComposerObjectDefinition &inNamed) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { TypedDerive(inCore, inTyped); Derive(inCore, inGuided); Derive(inCore, inNamed); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition( IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inAsset, SComposerObjectDefinition &inSlideOwner) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inAsset); Derive(inCore, inSlideOwner); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inAsset) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inAsset); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inAsset) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inAsset); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inBase) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inBase); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inBase) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inBase); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inBase) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inBase); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inBase) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inBase); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inAsset) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inAsset); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inAsset) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inAsset); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inAsset) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inAsset); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inNode) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inNode); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inNode) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inNode); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inNode) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inNode); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inNode) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inNode); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inNode) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inNode); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inNode) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inNode); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition( IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inNode, SComposerObjectDefinition &inSlideOwner) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inNode); Derive(inCore, inSlideOwner); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inAsset) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inAsset); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inNode) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inNode); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inNode) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inNode); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inAsset) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inAsset); SetType(inCore, inTyped); } }; template <> struct SComposerObjectDefinition : public SComposerBaseObjectDefinition { SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance, SComposerObjectDefinition &inTyped, SComposerObjectDefinition &inAsset) : SComposerBaseObjectDefinition(inCore, inMetaData, inInstance) { Derive(inCore, inAsset); SetType(inCore, inTyped); } }; // Container object for all of the object definitions class SComposerObjectDefinitions { public: #define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \ SComposerObjectDefinition m_##name; ITERATE_COMPOSER_OBJECT_TYPES #undef HANDLE_COMPOSER_OBJECT_TYPE SComposerObjectDefinitions(IDataCore &inDataCore, IMetaData &inMetaData); SComposerObjectDefinitions() = default; ~SComposerObjectDefinitions() = default; // RTTI API bool IsA(Qt3DSDMInstanceHandle inInstance, ComposerObjectTypes::Enum inType); // 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 GetType(Qt3DSDMInstanceHandle inInstance); Qt3DSDMInstanceHandle GetInstanceForType(ComposerObjectTypes::Enum inType); private: IDataCore &m_DataCore; SComposerObjectDefinitions(const SComposerObjectDefinitions&) = delete; SComposerObjectDefinitions& operator=(const SComposerObjectDefinitions&) = delete; }; }