BsScriptFolderMonitor.h 2.9 KB

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