BsScriptFolderMonitor.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 "Platform/BsFolderMonitor.h"
  7. #include "Utility/BsModule.h"
  8. namespace bs
  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 = nullptr;
  35. UINT32 mGCHandle = 0;
  36. /************************************************************************/
  37. /* CLR HOOKS */
  38. /************************************************************************/
  39. static void internal_CreateInstance(MonoObject* instance, MonoString* folder);
  40. static void internal_Destroy(ScriptFolderMonitor* thisPtr);
  41. typedef void(BS_THUNKCALL *OnModifiedThunkDef) (MonoObject*, MonoString*, MonoException**);
  42. typedef void(BS_THUNKCALL *OnRenamedThunkDef) (MonoObject*, MonoString*, MonoString*, MonoException**);
  43. static OnModifiedThunkDef OnModifiedThunk;
  44. static OnModifiedThunkDef OnAddedThunk;
  45. static OnModifiedThunkDef OnRemovedThunk;
  46. static OnRenamedThunkDef OnRenamedThunk;
  47. };
  48. /** @} */
  49. /** @addtogroup EditorScript
  50. * @{
  51. */
  52. /** Manages all active managed folder monitor objects. */
  53. class BS_SCR_BED_EXPORT ScriptFolderMonitorManager : public Module<ScriptFolderMonitorManager>
  54. {
  55. public:
  56. /** Triggers updates on all active folder monitor objects. Should be called once per frame. */
  57. void update();
  58. private:
  59. friend class ScriptFolderMonitor;
  60. /** Registers a new managed folder monitor. */
  61. void _registerMonitor(ScriptFolderMonitor* monitor);
  62. /** Unregisters a destroyed managed folder monitor. */
  63. void _unregisterMonitor(ScriptFolderMonitor* monitor);
  64. UnorderedSet<ScriptFolderMonitor*> mMonitors;
  65. };
  66. /** @} */
  67. }