BsProjectLibrary.h 2.5 KB

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