BsProjectLibrary.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #pragma once
  2. #include "BsEditorPrerequisites.h"
  3. #include "BsModule.h"
  4. namespace BansheeEngine
  5. {
  6. class BS_ED_EXPORT ProjectLibrary : public Module<ProjectLibrary>
  7. {
  8. public:
  9. struct LibraryEntry;
  10. struct ResourceEntry;
  11. struct DirectoryEntry;
  12. enum class LibraryEntryType
  13. {
  14. File,
  15. Directory
  16. };
  17. struct LibraryEntry
  18. {
  19. LibraryEntry();
  20. LibraryEntry(const Path& path, const WString& name, DirectoryEntry* parent, LibraryEntryType type);
  21. LibraryEntryType type;
  22. Path path;
  23. WString elementName;
  24. DirectoryEntry* parent;
  25. };
  26. struct ResourceEntry : public LibraryEntry
  27. {
  28. ResourceEntry();
  29. ResourceEntry(const Path& path, const WString& name, DirectoryEntry* parent);
  30. ProjectResourceMetaPtr meta;
  31. std::time_t lastUpdateTime;
  32. };
  33. struct DirectoryEntry : public LibraryEntry
  34. {
  35. DirectoryEntry();
  36. DirectoryEntry(const Path& path, const WString& name, DirectoryEntry* parent);
  37. Vector<LibraryEntry*> mChildren;
  38. };
  39. public:
  40. ProjectLibrary(const Path& projectFolder);
  41. ~ProjectLibrary();
  42. void update();
  43. void checkForModifications(const Path& path);
  44. void checkForModifications(const Path& path, bool import, Vector<Path>& dirtyResources);
  45. const LibraryEntry* getRootEntry() const { return mRootEntry; }
  46. LibraryEntry* findEntry(const Path& path) const;
  47. Vector<LibraryEntry*> search(const WString& pattern);
  48. Vector<LibraryEntry*> search(const WString& pattern, const Vector<UINT32>& typeIds);
  49. ProjectResourceMetaPtr findResourceMeta(const String& uuid) const;
  50. Path uuidToPath(const String& uuid) const;
  51. void createEntry(const HResource& resource, const Path& path);
  52. void createFolderEntry(const Path& path);
  53. void saveEntry(const HResource& resource);
  54. void moveEntry(const Path& oldPath, const Path& newPath, bool overwrite = true);
  55. void copyEntry(const Path& oldPath, const Path& newPath, bool overwrite = true);
  56. void deleteEntry(const Path& path);
  57. void reimport(const Path& path, const ImportOptionsPtr& importOptions = nullptr, bool forceReimport = false);
  58. HResource load(const Path& path);
  59. const Path& getResourcesFolder() const { return mResourcesFolder; }
  60. Event<void(const Path&)> onEntryRemoved;
  61. Event<void(const Path&)> onEntryAdded;
  62. private:
  63. static const Path RESOURCES_DIR;
  64. static const Path INTERNAL_RESOURCES_DIR;
  65. static const WString LIBRARY_ENTRIES_FILENAME;
  66. static const WString RESOURCE_MANIFEST_FILENAME;
  67. ResourceManifestPtr mResourceManifest;
  68. DirectoryEntry* mRootEntry;
  69. Path mProjectFolder;
  70. Path mResourcesFolder;
  71. UnorderedMap<Path, Vector<Path>> mDependencies;
  72. UnorderedSet<Path> mReimportQueue;
  73. void save();
  74. void load();
  75. ResourceEntry* addResourceInternal(DirectoryEntry* parent, const Path& filePath, const ImportOptionsPtr& importOptions = nullptr, bool forceReimport = false);
  76. DirectoryEntry* addDirectoryInternal(DirectoryEntry* parent, const Path& dirPath);
  77. void deleteResourceInternal(ResourceEntry* resource);
  78. void deleteDirectoryInternal(DirectoryEntry* directory);
  79. void reimportResourceInternal(ResourceEntry* resource, const ImportOptionsPtr& importOptions = nullptr, bool forceReimport = false);
  80. void createInternalParentHierarchy(const Path& fullPath, DirectoryEntry** newHierarchyRoot, DirectoryEntry** newHierarchyLeaf);
  81. bool isUpToDate(ResourceEntry* resource) const;
  82. Path getMetaPath(const Path& path) const;
  83. bool isMeta(const Path& fullPath) const;
  84. void doOnEntryRemoved(const LibraryEntry* entry);
  85. void doOnEntryAdded(const LibraryEntry* entry);
  86. Vector<Path> getImportDependencies(const ResourceEntry* entry);
  87. void addDependencies(const ResourceEntry* entry);
  88. void removeDependencies(const ResourceEntry* entry);
  89. void queueDependantForReimport(const ResourceEntry* entry);
  90. };
  91. }