BsEditorWidgetLayoutRTTI.h 3.7 KB

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