2
0

BsScriptFolderMonitor.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. /** @addtogroup ScriptInteropEditor
  11. * @{
  12. */
  13. /** Interop class between C++ & CLR for FolderMonitor. */
  14. class BS_SCR_BED_EXPORT ScriptFolderMonitor : public ScriptObject <ScriptFolderMonitor>
  15. {
  16. public:
  17. SCRIPT_OBJ(EDITOR_ASSEMBLY, "BansheeEditor", "FolderMonitor")
  18. private:
  19. friend class ScriptFolderMonitorManager;
  20. ScriptFolderMonitor(MonoObject* instance, FolderMonitor* monitor);
  21. ~ScriptFolderMonitor();
  22. /** Updates the native folder monitor. Must be called once per frame. */
  23. void update();
  24. /** Destroys the native folder monitor. */
  25. void destroy();
  26. /** Triggered when the native folder monitor detects a file has been modified. */
  27. void onMonitorFileModified(const Path& path);
  28. /** Triggered when the native folder monitor detects a file has been added. */
  29. void onMonitorFileAdded(const Path& path);
  30. /** Triggered when the native folder monitor detects a file has been removed. */
  31. void onMonitorFileRemoved(const Path& path);
  32. /** Triggered when the native folder monitor detects a file has been renamed. */
  33. void onMonitorFileRenamed(const Path& from, const Path& to);
  34. FolderMonitor* mMonitor;
  35. /************************************************************************/
  36. /* CLR HOOKS */
  37. /************************************************************************/
  38. static void internal_CreateInstance(MonoObject* instance, MonoString* folder);
  39. static void internal_Destroy(ScriptFolderMonitor* thisPtr);
  40. typedef void(__stdcall *OnModifiedThunkDef) (MonoObject*, MonoString*, MonoException**);
  41. typedef void(__stdcall *OnRenamedThunkDef) (MonoObject*, MonoString*, MonoString*, MonoException**);
  42. static OnModifiedThunkDef OnModifiedThunk;
  43. static OnModifiedThunkDef OnAddedThunk;
  44. static OnModifiedThunkDef OnRemovedThunk;
  45. static OnRenamedThunkDef OnRenamedThunk;
  46. };
  47. /** @} */
  48. /** @addtogroup SBansheeEditor
  49. * @{
  50. */
  51. /** Manages all active managed folder monitor objects. */
  52. class BS_SCR_BED_EXPORT ScriptFolderMonitorManager : public Module<ScriptFolderMonitorManager>
  53. {
  54. public:
  55. /** Triggers updates on all active folder monitor objects. Should be called once per frame. */
  56. void update();
  57. private:
  58. friend class ScriptFolderMonitor;
  59. /** Registers a new managed folder monitor. */
  60. void _registerMonitor(ScriptFolderMonitor* monitor);
  61. /** Unregisters a destroyed managed folder monitor. */
  62. void _unregisterMonitor(ScriptFolderMonitor* monitor);
  63. UnorderedSet<ScriptFolderMonitor*> mMonitors;
  64. };
  65. /** @} */
  66. }