BsScriptProjectLibrary.h 7.1 KB

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