BsEditorWidgetLayoutRTTI.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. #include "Reflection/BsRTTIPlain.h"
  9. #include "RTTI/BsStringRTTI.h"
  10. #include "RTTI/BsStdRTTI.h"
  11. namespace bs
  12. {
  13. /** @cond RTTI */
  14. /** @addtogroup RTTI-Impl-Editor
  15. * @{
  16. */
  17. class EditorWidgetLayoutRTTI : public RTTIType<EditorWidgetLayout, IReflectable, EditorWidgetLayoutRTTI>
  18. {
  19. private:
  20. EditorWidgetLayout::Entry& getEntry(EditorWidgetLayout* obj, UINT32 idx) { return obj->mEntries[idx]; }
  21. void setEntry(EditorWidgetLayout* obj, UINT32 idx, EditorWidgetLayout::Entry& val) { obj->mEntries[idx] = val; }
  22. UINT32 getEntriesArraySize(EditorWidgetLayout* obj) { return (UINT32)obj->mEntries.size(); }
  23. void setEntriesArraySize(EditorWidgetLayout* obj, UINT32 size) { obj->mEntries.resize(size); }
  24. SPtr<DockManagerLayout> getDockLayout(EditorWidgetLayout* obj) { return obj->mDockLayout; }
  25. void setDockLayout(EditorWidgetLayout* obj, SPtr<DockManagerLayout> val) { obj->mDockLayout = val; }
  26. bool& getIsMainWindowMaximized(EditorWidgetLayout* obj) { return obj->mMaximized; }
  27. void setIsMainWindowMaximized(EditorWidgetLayout* obj, bool& val) { obj->mMaximized = val; }
  28. public:
  29. EditorWidgetLayoutRTTI()
  30. {
  31. addPlainArrayField("mRootEntry", 0, &EditorWidgetLayoutRTTI::getEntry, &EditorWidgetLayoutRTTI::getEntriesArraySize,
  32. &EditorWidgetLayoutRTTI::setEntry, &EditorWidgetLayoutRTTI::setEntriesArraySize);
  33. addReflectablePtrField("mDockLayout", 1, &EditorWidgetLayoutRTTI::getDockLayout, &EditorWidgetLayoutRTTI::setDockLayout);
  34. addPlainField("mMaximized", 2, &EditorWidgetLayoutRTTI::getIsMainWindowMaximized, &EditorWidgetLayoutRTTI::setIsMainWindowMaximized);
  35. }
  36. const String& getRTTIName() override
  37. {
  38. static String name = "EditorWidgetLayout";
  39. return name;
  40. }
  41. UINT32 getRTTIId() override
  42. {
  43. return TID_EditorWidgetLayout;
  44. }
  45. SPtr<IReflectable> newRTTIObject() override
  46. {
  47. return bs_shared_ptr_new<EditorWidgetLayout>(EditorWidgetLayout::PrivatelyConstruct());
  48. }
  49. };
  50. template<> struct RTTIPlainType<bs::EditorWidgetLayout::Entry>
  51. {
  52. enum { id = bs::TID_EditorWidgetLayoutEntry }; enum { hasDynamicSize = 1 };
  53. static BitLength toMemory(const bs::EditorWidgetLayout::Entry& data, Bitstream& stream, const RTTIFieldInfo& fieldInfo, bool compress)
  54. {
  55. return rtti_write_with_size_header(stream, data, compress, [&data, &stream]()
  56. {
  57. BitLength size = 0;
  58. size += rtti_write(data.widgetNames, stream);
  59. size += rtti_write(data.isDocked, stream);
  60. size += rtti_write(data.x, stream);
  61. size += rtti_write(data.y, stream);
  62. size += rtti_write(data.width, stream);
  63. size += rtti_write(data.height, stream);
  64. return size;
  65. });
  66. }
  67. static BitLength fromMemory(bs::EditorWidgetLayout::Entry& data, Bitstream& stream, const RTTIFieldInfo& fieldInfo, bool compress)
  68. {
  69. BitLength size;
  70. rtti_read_size_header(stream, compress, size);
  71. rtti_read(data.widgetNames, stream);
  72. rtti_read(data.isDocked, stream);
  73. rtti_read(data.x, stream);
  74. rtti_read(data.y, stream);
  75. rtti_read(data.width, stream);
  76. rtti_read(data.height, stream);
  77. return size;
  78. }
  79. static BitLength getSize(const bs::EditorWidgetLayout::Entry& data, const RTTIFieldInfo& fieldInfo, bool compress)
  80. {
  81. BitLength dataSize = rtti_size(data.widgetNames) + rtti_size(data.isDocked) + rtti_size(data.x) +
  82. rtti_size(data.y) + rtti_size(data.width) + rtti_size(data.height);
  83. rtti_add_header_size(dataSize, compress);
  84. return dataSize;
  85. }
  86. };
  87. /** @} */
  88. /** @endcond */
  89. }