BsScriptModalWindow.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #pragma once
  2. #include "BsScriptEditorPrerequisites.h"
  3. #include "BsScriptObject.h"
  4. #include "BsModalWindow.h"
  5. #include "BsVector2I.h"
  6. namespace BansheeEngine
  7. {
  8. class ManagedModalWindow;
  9. class BS_SCR_BED_EXPORT ScriptModalWindow : public ScriptObject <ScriptModalWindow, PersistentScriptObjectBase>
  10. {
  11. struct ModalWindowHandle
  12. {
  13. uint32_t gcHandle;
  14. ManagedModalWindow* nativeObj;
  15. };
  16. public:
  17. SCRIPT_OBJ(EDITOR_ASSEMBLY, "BansheeEditor", "ModalWindow")
  18. ~ScriptModalWindow();
  19. private:
  20. friend class ManagedModalWindow;
  21. ScriptModalWindow(ManagedModalWindow* editorWidget);
  22. static void internal_createInstance(MonoObject* instance, bool allowCloseButton);
  23. static void internal_close(ScriptModalWindow* thisPtr);
  24. static UINT32 internal_getWidth(ScriptModalWindow* thisPtr);
  25. static UINT32 internal_getHeight(ScriptModalWindow* thisPtr);
  26. static void internal_setWidth(ScriptModalWindow* thisPtr, UINT32 value);
  27. static void internal_setHeight(ScriptModalWindow* thisPtr, UINT32 value);
  28. static void internal_setTitle(ScriptModalWindow* thisPtr, MonoObject* title);
  29. static void internal_screenToWindowPos(ScriptModalWindow* thisPtr, Vector2I screenPos, Vector2I* windowPos);
  30. static void internal_windowToScreenPos(ScriptModalWindow* thisPtr, Vector2I windowPos, Vector2I* screenPos);
  31. void onAssemblyRefreshStarted();
  32. void _onManagedInstanceDeleted();
  33. ScriptObjectBackup beginRefresh();
  34. void endRefresh(const ScriptObjectBackup& backupData);
  35. MonoObject* _createManagedInstance(bool construct);
  36. void closeWindow();
  37. ManagedModalWindow* mModalWindow;
  38. HEvent mOnAssemblyRefreshStartedConn;
  39. bool mRefreshInProgress;
  40. static MonoField* guiPanelField;
  41. };
  42. class BS_SCR_BED_EXPORT ManagedModalWindow : public ModalWindow
  43. {
  44. public:
  45. ManagedModalWindow(bool allowCloseButton, MonoObject* managedInstance);
  46. ~ManagedModalWindow();
  47. bool createManagedInstance();
  48. void releaseManagedInstance();
  49. void initialize(ScriptModalWindow* parent);
  50. void update();
  51. void reloadMonoTypes(MonoClass* windowClass);
  52. void triggerOnInitialize();
  53. void triggerOnDestroy();
  54. MonoObject* getManagedInstance() const { return mManagedInstance; }
  55. protected:
  56. virtual void resized();
  57. virtual void close();
  58. private:
  59. friend class ScriptModalWindow;
  60. typedef void(__stdcall *OnInitializeThunkDef) (MonoObject*, MonoException**);
  61. typedef void(__stdcall *OnDestroyThunkDef) (MonoObject*, MonoException**);
  62. typedef void(__stdcall *UpdateThunkDef) (MonoObject*, MonoException**);
  63. String mNamespace;
  64. String mTypename;
  65. OnInitializeThunkDef mOnInitializeThunk;
  66. OnDestroyThunkDef mOnDestroyThunk;
  67. UpdateThunkDef mUpdateThunk;
  68. MonoMethod* mOnWindowResizedMethod;
  69. MonoObject* mManagedInstance;
  70. uint32_t mGCHandle;
  71. ScriptModalWindow* mScriptParent;
  72. };
  73. }