BsScriptProjectLibrary.h 7.0 KB

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