BsDockManagerLayoutRTTI.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #pragma once
  2. #include "BsEditorPrerequisites.h"
  3. #include "BsDockManagerLayout.h"
  4. #include "BsRTTIType.h"
  5. namespace BansheeEngine
  6. {
  7. class DockManagerLayoutRTTI : public RTTIType<DockManagerLayout, IReflectable, DockManagerLayoutRTTI>
  8. {
  9. private:
  10. DockManagerLayout::Entry& getRootEntry(DockManagerLayout* obj) { return obj->mRootEntry; }
  11. void setRootEntry(DockManagerLayout* obj, DockManagerLayout::Entry& val) { obj->mRootEntry = val; }
  12. public:
  13. DockManagerLayoutRTTI()
  14. {
  15. addPlainField("mRootEntry", 0, &DockManagerLayoutRTTI::getRootEntry, &DockManagerLayoutRTTI::setRootEntry);
  16. }
  17. virtual const String& getRTTIName()
  18. {
  19. static String name = "DockManagerLayout";
  20. return name;
  21. }
  22. virtual UINT32 getRTTIId()
  23. {
  24. return TID_DockManagerLayout;
  25. }
  26. virtual std::shared_ptr<IReflectable> newRTTIObject()
  27. {
  28. return bs_shared_ptr<DockManagerLayout>();
  29. }
  30. };
  31. }
  32. namespace BansheeEngine
  33. {
  34. template<> struct RTTIPlainType<BansheeEngine::DockManagerLayout::Entry>
  35. {
  36. enum { id = BansheeEngine::TID_DockManagerLayoutEntry }; enum { hasDynamicSize = 1 };
  37. static void toMemory(const BansheeEngine::DockManagerLayout::Entry& data, char* memory)
  38. {
  39. UINT32 size = 0;
  40. char* memoryStart = memory;
  41. memory += sizeof(UINT32);
  42. size += sizeof(UINT32);
  43. memory = rttiWriteElem(data.isLeaf, memory, size);
  44. memory = rttiWriteElem(data.horizontalSplit, memory, size);
  45. memory = rttiWriteElem(data.splitPosition, memory, size);
  46. memory = rttiWriteElem(data.widgetNames, memory, size);
  47. if(!data.isLeaf)
  48. {
  49. memory = rttiWriteElem(*data.children[0], memory, size);
  50. memory = rttiWriteElem(*data.children[1], memory, size);
  51. }
  52. memcpy(memoryStart, &size, sizeof(UINT32));
  53. }
  54. static UINT32 fromMemory(BansheeEngine::DockManagerLayout::Entry& data, char* memory)
  55. {
  56. UINT32 size = 0;
  57. memcpy(&size, memory, sizeof(UINT32));
  58. memory += sizeof(UINT32);
  59. memory = rttiReadElem(data.isLeaf, memory);
  60. memory = rttiReadElem(data.horizontalSplit, memory);
  61. memory = rttiReadElem(data.splitPosition, memory);
  62. memory = rttiReadElem(data.widgetNames, memory);
  63. if(!data.isLeaf)
  64. {
  65. data.children[0] = bs_new<BansheeEngine::DockManagerLayout::Entry>();
  66. data.children[1] = bs_new<BansheeEngine::DockManagerLayout::Entry>();
  67. memory = rttiReadElem(*data.children[0], memory);
  68. memory = rttiReadElem(*data.children[1], memory);
  69. data.children[0]->parent = &data;
  70. data.children[1]->parent = &data;
  71. }
  72. return size;
  73. }
  74. static UINT32 getDynamicSize(const BansheeEngine::DockManagerLayout::Entry& data)
  75. {
  76. UINT64 dataSize = sizeof(UINT32) + rttiGetElemSize(data.isLeaf) + rttiGetElemSize(data.horizontalSplit) +
  77. rttiGetElemSize(data.splitPosition) + rttiGetElemSize(data.widgetNames);
  78. if(!data.isLeaf)
  79. {
  80. dataSize += rttiGetElemSize(*data.children[0]);
  81. dataSize += rttiGetElemSize(*data.children[1]);
  82. }
  83. #if BS_DEBUG_MODE
  84. if(dataSize > std::numeric_limits<UINT32>::max())
  85. {
  86. __string_throwDataOverflowException();
  87. }
  88. #endif
  89. return (UINT32)dataSize;
  90. }
  91. };
  92. }