BsScriptProjectLibrary.h 5.9 KB

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