BsScriptModalWindow.h 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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(BansheeEditorAssemblyName, "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_initializeGUIPanel(ScriptModalWindow* thisPtr, MonoObject* panel);
  29. static void internal_setTitle(ScriptModalWindow* thisPtr, MonoObject* title);
  30. static void internal_screenToWindowPos(ScriptModalWindow* thisPtr, Vector2I screenPos, Vector2I* windowPos);
  31. static void internal_windowToScreenPos(ScriptModalWindow* thisPtr, Vector2I windowPos, Vector2I* screenPos);
  32. void onAssemblyRefreshStarted();
  33. void _onManagedInstanceDeleted();
  34. ScriptObjectBackup beginRefresh();
  35. void endRefresh(const ScriptObjectBackup& backupData);
  36. MonoObject* _createManagedInstance(bool construct);
  37. void closeWindow();
  38. ManagedModalWindow* mModalWindow;
  39. ScriptGUIPanel* mGUIPanel;
  40. HEvent mOnAssemblyRefreshStartedConn;
  41. bool mRefreshInProgress;
  42. static MonoMethod* onInitializedInternalMethod;
  43. static MonoMethod* onDestroyInternalMethod;
  44. };
  45. class BS_SCR_BED_EXPORT ManagedModalWindow : public ModalWindow
  46. {
  47. public:
  48. ManagedModalWindow(bool allowCloseButton, MonoObject* managedInstance);
  49. ~ManagedModalWindow();
  50. bool createManagedInstance();
  51. void releaseManagedInstance();
  52. void initialize(ScriptModalWindow* parent);
  53. void update();
  54. void reloadMonoTypes(MonoClass* windowClass);
  55. void triggerOnInitialize();
  56. void triggerOnDestroy();
  57. MonoObject* getManagedInstance() const { return mManagedInstance; }
  58. protected:
  59. virtual void resized();
  60. virtual void close();
  61. private:
  62. friend class ScriptModalWindow;
  63. typedef void(__stdcall *OnInitializeThunkDef) (MonoObject*, MonoException**);
  64. typedef void(__stdcall *OnDestroyThunkDef) (MonoObject*, MonoException**);
  65. typedef void(__stdcall *UpdateThunkDef) (MonoObject*, MonoException**);
  66. String mNamespace;
  67. String mTypename;
  68. OnInitializeThunkDef mOnInitializeThunk;
  69. OnDestroyThunkDef mOnDestroyThunk;
  70. UpdateThunkDef mUpdateThunk;
  71. MonoMethod* mOnWindowResizedMethod;
  72. MonoObject* mManagedInstance;
  73. uint32_t mGCHandle;
  74. ScriptModalWindow* mScriptParent;
  75. };
  76. }