ReflectedVarWrapper.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #ifndef CRYINCLUDE_EDITOR_UTILS_REFLECTEDVARWRAPPER_H
  9. #define CRYINCLUDE_EDITOR_UTILS_REFLECTEDVARWRAPPER_H
  10. #pragma once
  11. #include "Util/Variable.h"
  12. #include <Util/VariablePropertyType.h>
  13. #include "ReflectedVar.h"
  14. #include <QScopedPointer>
  15. class ReflectedPropertyItem;
  16. // Class to wrap the CReflectedVars and sync them with corresponding IVariable.
  17. // Most of this code is ported from CPropertyItem functions that marshal data between
  18. // IVariable and editor widgets.
  19. class EDITOR_CORE_API ReflectedVarAdapter
  20. {
  21. public:
  22. virtual ~ReflectedVarAdapter(){};
  23. // update the range limits in CReflectedVar to range specified in IVariable
  24. virtual void UpdateRangeLimits([[maybe_unused]] IVariable* pVariable) {};
  25. //set IVariable for this property and create a CReflectedVar to represent it
  26. virtual void SetVariable(IVariable* pVariable) = 0;
  27. //update the ReflectedVar to current value of IVar
  28. virtual void SyncReflectedVarToIVar(IVariable* pVariable) = 0;
  29. //update the internal IVariable as result of ReflectedVar changing
  30. virtual void SyncIVarToReflectedVar(IVariable* pVariable) = 0;
  31. // Callback called when variable change. SyncReflectedVarToIVar will be called after
  32. virtual void OnVariableChange([[maybe_unused]] IVariable* var) {};
  33. virtual bool UpdateReflectedVarEnums() { return false; }
  34. virtual CReflectedVar* GetReflectedVar() = 0;
  35. //needed for containers that can have new values filled in
  36. virtual void ReplaceVarBlock([[maybe_unused]] CVarBlock* varBlock) {};
  37. virtual bool Contains(CReflectedVar* var) { return GetReflectedVar() == var; }
  38. };
  39. class EDITOR_CORE_API ReflectedVarIntAdapter
  40. : public ReflectedVarAdapter
  41. {
  42. public:
  43. void SetVariable(IVariable* pVariable) override;
  44. void UpdateRangeLimits(IVariable* pVariable) override;
  45. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  46. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  47. CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
  48. private:
  49. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  50. QScopedPointer<CReflectedVarInt > m_reflectedVar;
  51. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  52. float m_valueMultiplier = 1.0f;
  53. };
  54. class EDITOR_CORE_API ReflectedVarFloatAdapter
  55. : public ReflectedVarAdapter
  56. {
  57. public:
  58. void SetVariable(IVariable* pVariable) override;
  59. void UpdateRangeLimits(IVariable* pVariable) override;
  60. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  61. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  62. CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
  63. private:
  64. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  65. QScopedPointer<CReflectedVarFloat > m_reflectedVar;
  66. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  67. float m_valueMultiplier = 1.0f;
  68. };
  69. class EDITOR_CORE_API ReflectedVarStringAdapter
  70. : public ReflectedVarAdapter
  71. {
  72. public:
  73. void SetVariable(IVariable* pVariable) override;
  74. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  75. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  76. CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
  77. private:
  78. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  79. QScopedPointer<CReflectedVarString > m_reflectedVar;
  80. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  81. };
  82. class EDITOR_CORE_API ReflectedVarBoolAdapter
  83. : public ReflectedVarAdapter
  84. {
  85. public:
  86. void SetVariable(IVariable* pVariable) override;
  87. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  88. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  89. CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
  90. private:
  91. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  92. QScopedPointer<CReflectedVarBool > m_reflectedVar;
  93. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  94. };
  95. class EDITOR_CORE_API ReflectedVarEnumAdapter
  96. : public ReflectedVarAdapter
  97. {
  98. public:
  99. ReflectedVarEnumAdapter();
  100. void SetVariable(IVariable* pVariable) override;
  101. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  102. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  103. void OnVariableChange(IVariable* var) override;
  104. CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
  105. protected:
  106. //update the ReflectedVar with the allowable enum options
  107. bool UpdateReflectedVarEnums() override;
  108. //virtual function to allow derived classes to update the enum list before syncing with ReflectedVar.
  109. virtual void updateIVariableEnumList([[maybe_unused]] IVariable* pVariable) {};
  110. private:
  111. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  112. QScopedPointer<CReflectedVarEnum<AZStd::string> > m_reflectedVar;
  113. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  114. IVariable* m_pVariable;
  115. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  116. IVarEnumListPtr m_enumList;
  117. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  118. bool m_updatingEnums;
  119. };
  120. class EDITOR_CORE_API ReflectedVarVector2Adapter
  121. : public ReflectedVarAdapter
  122. {
  123. public:
  124. void SetVariable(IVariable* pVariable) override;
  125. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  126. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  127. CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
  128. private:
  129. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  130. QScopedPointer<CReflectedVarVector2 > m_reflectedVar;
  131. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  132. };
  133. class EDITOR_CORE_API ReflectedVarVector3Adapter
  134. : public ReflectedVarAdapter
  135. {
  136. public:
  137. void SetVariable(IVariable* pVariable) override;
  138. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  139. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  140. CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
  141. private:
  142. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  143. QScopedPointer<CReflectedVarVector3 > m_reflectedVar;
  144. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  145. };
  146. class EDITOR_CORE_API ReflectedVarVector4Adapter
  147. : public ReflectedVarAdapter
  148. {
  149. public:
  150. void SetVariable(IVariable* pVariable) override;
  151. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  152. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  153. CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
  154. private:
  155. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  156. QScopedPointer<CReflectedVarVector4 > m_reflectedVar;
  157. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  158. };
  159. class EDITOR_CORE_API ReflectedVarResourceAdapter
  160. : public ReflectedVarAdapter
  161. {
  162. public:
  163. void SetVariable(IVariable* pVariable) override;
  164. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  165. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  166. CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
  167. private:
  168. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  169. QScopedPointer<CReflectedVarResource> m_reflectedVar;
  170. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  171. };
  172. class EDITOR_CORE_API ReflectedVarUserAdapter
  173. : public ReflectedVarAdapter
  174. {
  175. public:
  176. void SetVariable(IVariable *pVariable) override;
  177. void SyncReflectedVarToIVar(IVariable *pVariable) override;
  178. void SyncIVarToReflectedVar(IVariable *pVariable) override;
  179. CReflectedVar *GetReflectedVar() override {
  180. return m_reflectedVar.data();
  181. }
  182. private:
  183. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  184. QScopedPointer<CReflectedVarUser> m_reflectedVar;
  185. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  186. };
  187. class EDITOR_CORE_API ReflectedVarSplineAdapter
  188. : public ReflectedVarAdapter
  189. {
  190. public:
  191. ReflectedVarSplineAdapter(ReflectedPropertyItem *parentItem, PropertyType propertyType);
  192. void SetVariable(IVariable* pVariable) override;
  193. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  194. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  195. CReflectedVar* GetReflectedVar() override {
  196. return m_reflectedVar.data();
  197. }
  198. private:
  199. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  200. QScopedPointer<CReflectedVarSpline > m_reflectedVar;
  201. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  202. bool m_bDontSendToControl;
  203. PropertyType m_propertyType;
  204. ReflectedPropertyItem *m_parentItem;
  205. };
  206. class EDITOR_CORE_API ReflectedVarGenericPropertyAdapter
  207. : public ReflectedVarAdapter
  208. {
  209. public:
  210. ReflectedVarGenericPropertyAdapter(PropertyType propertyType);
  211. void SetVariable(IVariable* pVariable) override;
  212. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  213. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  214. CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
  215. private:
  216. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  217. QScopedPointer<CReflectedVarGenericProperty > m_reflectedVar;
  218. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  219. PropertyType m_propertyType;
  220. };
  221. class EDITOR_CORE_API ReflectedVarMotionAdapter
  222. : public ReflectedVarAdapter
  223. {
  224. public:
  225. void SetVariable(IVariable* pVariable) override;
  226. void SyncReflectedVarToIVar(IVariable* pVariable) override;
  227. void SyncIVarToReflectedVar(IVariable* pVariable) override;
  228. CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); }
  229. private:
  230. AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
  231. QScopedPointer<CReflectedVarMotion > m_reflectedVar;
  232. AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
  233. };
  234. #endif // CRYINCLUDE_EDITOR_UTILS_REFLECTEDVARWRAPPER_H