BsProjectLibrary.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #pragma once
  2. #include "BsEditorPrerequisites.h"
  3. #include "BsModule.h"
  4. #include "BsPath.h"
  5. namespace BansheeEngine
  6. {
  7. class 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. ResourceMetaPtr 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. ResourceMetaPtr findResourceMeta(const String& uuid) const;
  48. void moveEntry(const Path& oldPath, const Path& newPath);
  49. void deleteEntry(const Path& path);
  50. Event<void(const Path&)> onEntryRemoved;
  51. Event<void(const Path&)> onEntryAdded;
  52. private:
  53. static const Path RESOURCES_DIR;
  54. static const Path INTERNAL_RESOURCES_DIR;
  55. static const WString LIBRARY_ENTRIES_FILENAME;
  56. static const WString RESOURCE_MANIFEST_FILENAME;
  57. ResourceManifestPtr mResourceManifest;
  58. DirectoryEntry* mRootEntry;
  59. FolderMonitor* mMonitor;
  60. Path mProjectFolder;
  61. Path mResourcesFolder;
  62. void save();
  63. void load();
  64. ResourceEntry* addResourceInternal(DirectoryEntry* parent, const Path& filePath);
  65. DirectoryEntry* addDirectoryInternal(DirectoryEntry* parent, const Path& dirPath);
  66. void deleteResourceInternal(ResourceEntry* resource);
  67. void deleteDirectoryInternal(DirectoryEntry* directory);
  68. void reimportResourceInternal(ResourceEntry* resource);
  69. void createInternalParentHierarchy(const Path& fullPath, DirectoryEntry** newHierarchyRoot, DirectoryEntry** newHierarchyLeaf);
  70. bool isUpToDate(ResourceEntry* resource) const;
  71. Path getMetaPath(const Path& path) const;
  72. bool isMeta(const Path& fullPath) const;
  73. void onMonitorFileModified(const Path& path);
  74. };
  75. }