BsScriptProjectLibrary.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsScriptEditorPrerequisites.h"
  5. #include "BsScriptObject.h"
  6. #include "Library/BsProjectLibrary.h"
  7. #include "Wrappers/BsScriptResource.h"
  8. namespace bs
  9. {
  10. struct __ProjectResourceIconsInterop;
  11. /** @addtogroup ScriptInteropEditor
  12. * @{
  13. */
  14. /** Interop class between C++ & CLR for ProjectLibrary. */
  15. class BS_SCR_BED_EXPORT ScriptProjectLibrary : public ScriptObject<ScriptProjectLibrary>
  16. {
  17. public:
  18. SCRIPT_OBJ(EDITOR_ASSEMBLY, EDITOR_NS, "ProjectLibrary")
  19. /** Initializes the project library callbacks. Must be called on library load. */
  20. void static startUp();
  21. /** Cleans up project library callbacks. Must be called before library shutdown. */
  22. void static shutDown();
  23. private:
  24. ScriptProjectLibrary(MonoObject* instance);
  25. /**
  26. * Triggered when a new entry has been added to the library.
  27. *
  28. * @param[in] path Absolute path to the new entry.
  29. */
  30. static void onEntryAdded(const Path& path);
  31. /**
  32. * Triggered when a new entry has been removed to the library.
  33. *
  34. * @param[in] path Absolute path to the removed entry.
  35. */
  36. static void onEntryRemoved(const Path& path);
  37. /**
  38. * Triggered when an entry was (re) imported in the library.
  39. *
  40. * @param[in] path Absolute path to the imported entry.
  41. */
  42. static void onEntryImported(const Path& path);
  43. static HEvent mOnEntryAddedConn;
  44. static HEvent mOnEntryRemovedConn;
  45. static HEvent mOnEntryImportedConn;
  46. /************************************************************************/
  47. /* CLR HOOKS */
  48. /************************************************************************/
  49. typedef void(BS_THUNKCALL *OnEntryChangedThunkDef) (MonoString*, MonoException**);
  50. static OnEntryChangedThunkDef OnEntryAddedThunk;
  51. static OnEntryChangedThunkDef OnEntryRemovedThunk;
  52. static OnEntryChangedThunkDef OnEntryImportedThunk;
  53. static UINT32 internal_Refresh(MonoString* path, bool synchronous);
  54. static void internal_FinalizeImports();
  55. static void internal_Create(MonoObject* resource, MonoString* path);
  56. static MonoObject* internal_Load(MonoString* path);
  57. static void internal_Save(MonoObject* resource);
  58. static MonoObject* internal_GetRoot();
  59. static void internal_Reimport(MonoString* path, MonoObject* options, bool force, bool synchronous);
  60. static float internal_GetImportProgress(MonoString* path);
  61. static void internal_CancelImport();
  62. static MonoObject* internal_GetEntry(MonoString* path);
  63. static bool internal_IsSubresource(MonoString* path);
  64. static MonoObject* internal_GetMeta(MonoString* path);
  65. static MonoString* internal_GetPathFromUUID(UUID* uuid);
  66. static MonoString* internal_GetPath(MonoObject* resource);
  67. static MonoArray* internal_Search(MonoString* pattern, MonoArray* types);
  68. static void internal_Delete(MonoString* path);
  69. static void internal_CreateFolder(MonoString* path);
  70. static void internal_Rename(MonoString* path, MonoString* name, bool overwrite);
  71. static void internal_Move(MonoString* oldPath, MonoString* newPath, bool overwrite);
  72. static void internal_Copy(MonoString* source, MonoString* destination, bool overwrite);
  73. static MonoString* internal_GetResourceFolder();
  74. static void internal_SetIncludeInBuild(MonoString* path, bool include);
  75. static void internal_SetEditorData(MonoString* path, MonoObject* userData);
  76. static UINT32 internal_GetInProgressImportCount();
  77. };
  78. /** Base class for C++/CLR interop objects used for wrapping LibraryEntry implementations. */
  79. class BS_SCR_BED_EXPORT ScriptLibraryEntryBase : public ScriptObjectBase
  80. {
  81. public:
  82. /** Returns the wrapped library entry object. */
  83. const USPtr<ProjectLibrary::LibraryEntry>& getInternal() const { return mEntry; }
  84. protected:
  85. ScriptLibraryEntryBase(MonoObject* instance);
  86. virtual ~ScriptLibraryEntryBase() = default;
  87. USPtr<ProjectLibrary::LibraryEntry> mEntry;
  88. };
  89. /** Interop class between C++ & CLR for LibraryEntry. */
  90. class BS_SCR_BED_EXPORT ScriptLibraryEntry : public ScriptObject <ScriptLibraryEntry>
  91. {
  92. public:
  93. SCRIPT_OBJ(EDITOR_ASSEMBLY, EDITOR_NS, "LibraryEntry")
  94. ScriptLibraryEntry(MonoObject* instance);
  95. private:
  96. /************************************************************************/
  97. /* CLR HOOKS */
  98. /************************************************************************/
  99. static MonoString* internal_GetPath(ScriptLibraryEntryBase* thisPtr);
  100. static MonoString* internal_GetName(ScriptLibraryEntryBase* thisPtr);
  101. static ProjectLibrary::LibraryEntryType internal_GetType(ScriptLibraryEntryBase* thisPtr);
  102. static MonoObject* internal_GetParent(ScriptLibraryEntryBase* thisPtr);
  103. };
  104. /** Interop class between C++ & CLR for DirectoryEntry. */
  105. class BS_SCR_BED_EXPORT ScriptDirectoryEntry : public ScriptObject <ScriptDirectoryEntry, ScriptLibraryEntryBase>
  106. {
  107. public:
  108. SCRIPT_OBJ(EDITOR_ASSEMBLY, EDITOR_NS, "DirectoryEntry")
  109. ScriptDirectoryEntry(MonoObject* instance, const USPtr<ProjectLibrary::DirectoryEntry>& entry);
  110. /** Creates a new interop object that wraps the provided native directory entry object. */
  111. static MonoObject* create(const USPtr<ProjectLibrary::DirectoryEntry>& entry);
  112. private:
  113. /************************************************************************/
  114. /* CLR HOOKS */
  115. /************************************************************************/
  116. static MonoArray* internal_GetChildren(ScriptDirectoryEntry* thisPtr);
  117. };
  118. /** Interop class between C++ & CLR for ResourceEntry. */
  119. class BS_SCR_BED_EXPORT ScriptFileEntry : public ScriptObject <ScriptFileEntry, ScriptLibraryEntryBase>
  120. {
  121. public:
  122. SCRIPT_OBJ(EDITOR_ASSEMBLY, EDITOR_NS, "FileEntry")
  123. ScriptFileEntry(MonoObject* instance, const USPtr<ProjectLibrary::FileEntry>& entry);
  124. /** Creates a new interop object that wraps the provided native resource entry object. */
  125. static MonoObject* create(const USPtr<ProjectLibrary::FileEntry>& entry);
  126. private:
  127. /************************************************************************/
  128. /* CLR HOOKS */
  129. /************************************************************************/
  130. static MonoObject* internal_GetImportOptions(ScriptFileEntry* thisPtr);
  131. static MonoArray* internal_GetResourceMetas(ScriptFileEntry* thisPtr);
  132. static bool internal_GetIncludeInBuild(ScriptFileEntry* thisPtr);
  133. };
  134. /** Interop class between C++ & CLR for ResourceMeta. */
  135. class BS_SCR_BED_EXPORT ScriptResourceMeta : public ScriptObject <ScriptResourceMeta>
  136. {
  137. public:
  138. SCRIPT_OBJ(EDITOR_ASSEMBLY, EDITOR_NS, "ResourceMeta")
  139. ScriptResourceMeta(MonoObject* instance, const SPtr<ProjectResourceMeta>& meta);
  140. /** Creates a new interop object that wraps the native resource meta object. */
  141. static MonoObject* create(const SPtr<ProjectResourceMeta>& meta);
  142. private:
  143. SPtr<ProjectResourceMeta> mMeta;
  144. /************************************************************************/
  145. /* CLR HOOKS */
  146. /************************************************************************/
  147. static void internal_GetUUID(ScriptResourceMeta* thisPtr, UUID* uuid);
  148. static MonoString* internal_GetSubresourceName(ScriptResourceMeta* thisPtr);
  149. static void internal_GetPreviewIcons(ScriptResourceMeta* thisPtr, __ProjectResourceIconsInterop* output);
  150. static ScriptResourceType internal_GetResourceType(ScriptResourceMeta* thisPtr);
  151. static MonoReflectionType* internal_GetType(ScriptResourceMeta* thisPtr);
  152. static MonoObject* internal_GetEditorData(ScriptResourceMeta* thisPtr);
  153. };
  154. /** @} */
  155. }