BsScriptModalWindow.h 2.4 KB

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