BsEditorWidgetLayoutRTTI.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsEditorPrerequisites.h"
  5. #include "EditorWindow/BsEditorWidgetLayout.h"
  6. #include "EditorWindow/BsDockManagerLayout.h"
  7. #include "Reflection/BsRTTIType.h"
  8. namespace bs
  9. {
  10. /** @cond RTTI */
  11. /** @addtogroup RTTI-Impl-Editor
  12. * @{
  13. */
  14. class EditorWidgetLayoutRTTI : public RTTIType<EditorWidgetLayout, IReflectable, EditorWidgetLayoutRTTI>
  15. {
  16. private:
  17. EditorWidgetLayout::Entry& getEntry(EditorWidgetLayout* obj, UINT32 idx) { return obj->mEntries[idx]; }
  18. void setEntry(EditorWidgetLayout* obj, UINT32 idx, EditorWidgetLayout::Entry& val) { obj->mEntries[idx] = val; }
  19. UINT32 getEntriesArraySize(EditorWidgetLayout* obj) { return (UINT32)obj->mEntries.size(); }
  20. void setEntriesArraySize(EditorWidgetLayout* obj, UINT32 size) { obj->mEntries.resize(size); }
  21. SPtr<DockManagerLayout> getDockLayout(EditorWidgetLayout* obj) { return obj->mDockLayout; }
  22. void setDockLayout(EditorWidgetLayout* obj, SPtr<DockManagerLayout> val) { obj->mDockLayout = val; }
  23. bool& getIsMainWindowMaximized(EditorWidgetLayout* obj) { return obj->mMaximized; }
  24. void setIsMainWindowMaximized(EditorWidgetLayout* obj, bool& val) { obj->mMaximized = val; }
  25. public:
  26. EditorWidgetLayoutRTTI()
  27. {
  28. addPlainArrayField("mRootEntry", 0, &EditorWidgetLayoutRTTI::getEntry, &EditorWidgetLayoutRTTI::getEntriesArraySize,
  29. &EditorWidgetLayoutRTTI::setEntry, &EditorWidgetLayoutRTTI::setEntriesArraySize);
  30. addReflectablePtrField("mDockLayout", 1, &EditorWidgetLayoutRTTI::getDockLayout, &EditorWidgetLayoutRTTI::setDockLayout);
  31. addPlainField("mMaximized", 2, &EditorWidgetLayoutRTTI::getIsMainWindowMaximized, &EditorWidgetLayoutRTTI::setIsMainWindowMaximized);
  32. }
  33. const String& getRTTIName() override
  34. {
  35. static String name = "EditorWidgetLayout";
  36. return name;
  37. }
  38. UINT32 getRTTIId() override
  39. {
  40. return TID_EditorWidgetLayout;
  41. }
  42. SPtr<IReflectable> newRTTIObject() override
  43. {
  44. return bs_shared_ptr_new<EditorWidgetLayout>(EditorWidgetLayout::PrivatelyConstruct());
  45. }
  46. };
  47. template<> struct RTTIPlainType<bs::EditorWidgetLayout::Entry>
  48. {
  49. enum { id = bs::TID_EditorWidgetLayoutEntry }; enum { hasDynamicSize = 1 };
  50. static void toMemory(const bs::EditorWidgetLayout::Entry& data, char* memory)
  51. {
  52. UINT32 size = 0;
  53. char* memoryStart = memory;
  54. memory += sizeof(UINT32);
  55. size += sizeof(UINT32);
  56. memory = rttiWriteElem(data.widgetNames, memory, size);
  57. memory = rttiWriteElem(data.isDocked, memory, size);
  58. memory = rttiWriteElem(data.x, memory, size);
  59. memory = rttiWriteElem(data.y, memory, size);
  60. memory = rttiWriteElem(data.width, memory, size);
  61. memory = rttiWriteElem(data.height, memory, size);
  62. memcpy(memoryStart, &size, sizeof(UINT32));
  63. }
  64. static UINT32 fromMemory(bs::EditorWidgetLayout::Entry& data, char* memory)
  65. {
  66. UINT32 size = 0;
  67. memcpy(&size, memory, sizeof(UINT32));
  68. memory += sizeof(UINT32);
  69. memory = rttiReadElem(data.widgetNames, memory);
  70. memory = rttiReadElem(data.isDocked, memory);
  71. memory = rttiReadElem(data.x, memory);
  72. memory = rttiReadElem(data.y, memory);
  73. memory = rttiReadElem(data.width, memory);
  74. memory = rttiReadElem(data.height, memory);
  75. return size;
  76. }
  77. static UINT32 getDynamicSize(const bs::EditorWidgetLayout::Entry& data)
  78. {
  79. UINT64 dataSize = sizeof(UINT32) + rttiGetElemSize(data.widgetNames) + rttiGetElemSize(data.isDocked) +
  80. rttiGetElemSize(data.x) + rttiGetElemSize(data.y) + rttiGetElemSize(data.width) + rttiGetElemSize(data.height);
  81. #if BS_DEBUG_MODE
  82. if(dataSize > std::numeric_limits<UINT32>::max())
  83. {
  84. __string_throwDataOverflowException();
  85. }
  86. #endif
  87. return (UINT32)dataSize;
  88. }
  89. };
  90. /** @} */
  91. /** @endcond */
  92. }