BsScriptFolderMonitor.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #pragma once
  2. #include "BsScriptEditorPrerequisites.h"
  3. #include "BsScriptObject.h"
  4. #include "BsFolderMonitor.h"
  5. #include "BsModule.h"
  6. namespace BansheeEngine
  7. {
  8. /**
  9. * @brief Interop class between C++ & CLR for FolderMonitor.
  10. */
  11. class BS_SCR_BED_EXPORT ScriptFolderMonitor : public ScriptObject <ScriptFolderMonitor>
  12. {
  13. public:
  14. SCRIPT_OBJ(EDITOR_ASSEMBLY, "BansheeEditor", "FolderMonitor")
  15. private:
  16. friend class ScriptFolderMonitorManager;
  17. ScriptFolderMonitor(MonoObject* instance, FolderMonitor* monitor);
  18. ~ScriptFolderMonitor();
  19. /**
  20. * @brief Updates the native folder monitor. Must be called once per frame.
  21. */
  22. void update();
  23. /**
  24. * @brief Destroys the native folder monitor.
  25. */
  26. void destroy();
  27. /**
  28. * @brief Triggered when the native folder monitor detects a file has been modified.
  29. */
  30. void onMonitorFileModified(const Path& path);
  31. /**
  32. * @brief Triggered when the native folder monitor detects a file has been added.
  33. */
  34. void onMonitorFileAdded(const Path& path);
  35. /**
  36. * @brief Triggered when the native folder monitor detects a file has been removed.
  37. */
  38. void onMonitorFileRemoved(const Path& path);
  39. /**
  40. * @brief Triggered when the native folder monitor detects a file has been renamed.
  41. */
  42. void onMonitorFileRenamed(const Path& from, const Path& to);
  43. FolderMonitor* mMonitor;
  44. /************************************************************************/
  45. /* CLR HOOKS */
  46. /************************************************************************/
  47. static void internal_CreateInstance(MonoObject* instance, MonoString* folder);
  48. static void internal_Destroy(ScriptFolderMonitor* thisPtr);
  49. typedef void(__stdcall *OnModifiedThunkDef) (MonoObject*, MonoString*, MonoException**);
  50. typedef void(__stdcall *OnRenamedThunkDef) (MonoObject*, MonoString*, MonoString*, MonoException**);
  51. static OnModifiedThunkDef OnModifiedThunk;
  52. static OnModifiedThunkDef OnAddedThunk;
  53. static OnModifiedThunkDef OnRemovedThunk;
  54. static OnRenamedThunkDef OnRenamedThunk;
  55. };
  56. /**
  57. * @brief Manages all active managed folder monitor objects.
  58. */
  59. class BS_SCR_BED_EXPORT ScriptFolderMonitorManager : public Module<ScriptFolderMonitorManager>
  60. {
  61. public:
  62. /**
  63. * @brief Triggers updates on all active folder monitor objects. Should be called
  64. * once per frame.
  65. */
  66. void update();
  67. private:
  68. friend class ScriptFolderMonitor;
  69. /**
  70. * @brief Registers a new managed folder monitor.
  71. */
  72. void _registerMonitor(ScriptFolderMonitor* monitor);
  73. /**
  74. * @brief Unregisters a destroyed managed folder monitor.
  75. */
  76. void _unregisterMonitor(ScriptFolderMonitor* monitor);
  77. UnorderedSet<ScriptFolderMonitor*> mMonitors;
  78. };
  79. }