BsProjectLibrary.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #pragma once
  2. #include "BsEditorPrerequisites.h"
  3. #include "BsModule.h"
  4. #include "BsPath.h"
  5. namespace BansheeEngine
  6. {
  7. class BS_ED_EXPORT ProjectLibrary : public Module<ProjectLibrary>
  8. {
  9. public:
  10. struct LibraryEntry;
  11. struct ResourceEntry;
  12. struct DirectoryEntry;
  13. enum class LibraryEntryType
  14. {
  15. File,
  16. Directory
  17. };
  18. struct LibraryEntry
  19. {
  20. LibraryEntry();
  21. LibraryEntry(const Path& path, const WString& name, DirectoryEntry* parent, LibraryEntryType type);
  22. LibraryEntryType type;
  23. Path path;
  24. WString elementName;
  25. DirectoryEntry* parent;
  26. };
  27. struct ResourceEntry : public LibraryEntry
  28. {
  29. ResourceEntry();
  30. ResourceEntry(const Path& path, const WString& name, DirectoryEntry* parent);
  31. ProjectResourceMetaPtr meta;
  32. std::time_t lastUpdateTime;
  33. };
  34. struct DirectoryEntry : public LibraryEntry
  35. {
  36. DirectoryEntry();
  37. DirectoryEntry(const Path& path, const WString& name, DirectoryEntry* parent);
  38. Vector<LibraryEntry*> mChildren;
  39. };
  40. public:
  41. ProjectLibrary(const Path& projectFolder);
  42. ~ProjectLibrary();
  43. void update();
  44. void checkForModifications(const Path& fullPath);
  45. const LibraryEntry* getRootEntry() const { return mRootEntry; }
  46. LibraryEntry* findEntry(const Path& fullPath) const;
  47. ProjectResourceMetaPtr findResourceMeta(const String& uuid) const;
  48. Path uuidToPath(const String& uuid) const;
  49. void createEntry(const HResource& resource, const Path& path);
  50. void moveEntry(const Path& oldPath, const Path& newPath);
  51. void deleteEntry(const Path& path);
  52. const Path& getResourcesFolder() const { return mResourcesFolder; }
  53. Event<void(const Path&)> onEntryRemoved;
  54. Event<void(const Path&)> onEntryAdded;
  55. private:
  56. static const Path RESOURCES_DIR;
  57. static const Path INTERNAL_RESOURCES_DIR;
  58. static const WString LIBRARY_ENTRIES_FILENAME;
  59. static const WString RESOURCE_MANIFEST_FILENAME;
  60. ResourceManifestPtr mResourceManifest;
  61. DirectoryEntry* mRootEntry;
  62. FolderMonitor* mMonitor;
  63. Path mProjectFolder;
  64. Path mResourcesFolder;
  65. void save();
  66. void load();
  67. ResourceEntry* addResourceInternal(DirectoryEntry* parent, const Path& filePath);
  68. DirectoryEntry* addDirectoryInternal(DirectoryEntry* parent, const Path& dirPath);
  69. void deleteResourceInternal(ResourceEntry* resource);
  70. void deleteDirectoryInternal(DirectoryEntry* directory);
  71. void reimportResourceInternal(ResourceEntry* resource);
  72. void createInternalParentHierarchy(const Path& fullPath, DirectoryEntry** newHierarchyRoot, DirectoryEntry** newHierarchyLeaf);
  73. bool isUpToDate(ResourceEntry* resource) const;
  74. Path getMetaPath(const Path& path) const;
  75. bool isMeta(const Path& fullPath) const;
  76. void onMonitorFileModified(const Path& path);
  77. };
  78. }