BsScriptEditorWindow.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #pragma once
  2. #include "BsScriptEditorPrerequisites.h"
  3. #include "BsScriptObject.h"
  4. #include "BsEditorWidget.h"
  5. #include "BsVector2I.h"
  6. namespace BansheeEngine
  7. {
  8. class ScriptEditorWidget;
  9. class BS_SCR_BED_EXPORT ScriptEditorWindow : public ScriptObject<ScriptEditorWindow, PersistentScriptObjectBase>
  10. {
  11. struct EditorWindowHandle
  12. {
  13. uint32_t gcHandle;
  14. ScriptEditorWindow* nativeObj;
  15. };
  16. public:
  17. SCRIPT_OBJ(EDITOR_ASSEMBLY, "BansheeEditor", "EditorWindow")
  18. ~ScriptEditorWindow();
  19. EditorWidgetBase* getEditorWidget() const;
  20. static void registerManagedEditorWindows();
  21. static void clearRegisteredEditorWindow();
  22. private:
  23. friend class ScriptEditorWidget;
  24. ScriptEditorWindow(ScriptEditorWidget* editorWidget);
  25. static MonoObject* internal_createOrGetInstance(MonoString* ns, MonoString* typeName);
  26. static bool internal_hasFocus(ScriptEditorWindow* thisPtr);
  27. static void internal_screenToWindowPos(ScriptEditorWindow* thisPtr, Vector2I screenPos, Vector2I* windowPos);
  28. static void internal_windowToScreenPos(ScriptEditorWindow* thisPtr, Vector2I windowPos, Vector2I* screenPos);
  29. static UINT32 internal_getWidth(ScriptEditorWindow* thisPtr);
  30. static UINT32 internal_getHeight(ScriptEditorWindow* thisPtr);
  31. static void internal_initializeGUIPanel(ScriptEditorWindow* thisPtr, MonoObject* panel);
  32. static void internal_destroyGUIPanel(ScriptEditorWindow* thisPtr, MonoObject* panel);
  33. void onWidgetMoved(INT32 x, INT32 y);
  34. void onWidgetResized(UINT32 width, UINT32 height);
  35. void onWidgetParentChanged(EditorWidgetContainer* newParent);
  36. void onFocusChanged(bool inFocus);
  37. void onAssemblyRefreshStarted();
  38. void _onManagedInstanceDeleted();
  39. ScriptObjectBackup beginRefresh();
  40. void endRefresh(const ScriptObjectBackup& backupData);
  41. MonoObject* _createManagedInstance(bool construct);
  42. String mName;
  43. ScriptEditorWidget* mEditorWidget;
  44. Vector<ScriptGUIPanel*> mPanels;
  45. HEvent mOnWidgetMovedConn;
  46. HEvent mOnWidgetResizedConn;
  47. HEvent mOnParentChangedConn;
  48. HEvent mOnFocusChangedConn;
  49. HEvent mOnAssemblyRefreshStartedConn;
  50. bool mRefreshInProgress;
  51. static MonoMethod* onResizedMethod;
  52. static MonoMethod* onFocusChangedMethod;
  53. static MonoMethod* onInitializedInternalMethod;
  54. static MonoMethod* onDestroyInternalMethod;
  55. // Global editor window management methods
  56. static void registerScriptEditorWindow(ScriptEditorWindow* editorWindow);
  57. static void unregisterScriptEditorWindow(const String& windowTypeName);
  58. static UnorderedMap<String, EditorWindowHandle> OpenScriptEditorWindows;
  59. static Vector<String> AvailableWindowTypes;
  60. static EditorWidgetBase* openEditorWidgetCallback(String ns, String type, EditorWidgetContainer& parentContainer);
  61. };
  62. class BS_SCR_BED_EXPORT ScriptEditorWidget : public EditorWidgetBase
  63. {
  64. public:
  65. ScriptEditorWidget(const String& ns, const String& type, EditorWidgetContainer& parentContainer);
  66. ~ScriptEditorWidget();
  67. bool createManagedInstance();
  68. void update();
  69. void reloadMonoTypes(MonoClass* windowClass);
  70. void triggerOnInitialize();
  71. void triggerOnDestroy();
  72. MonoObject* getManagedInstance() const { return mManagedInstance; }
  73. private:
  74. typedef void(__stdcall *OnInitializeThunkDef) (MonoObject*, MonoException**);
  75. typedef void(__stdcall *OnDestroyThunkDef) (MonoObject*, MonoException**);
  76. typedef void(__stdcall *UpdateThunkDef) (MonoObject*, MonoException**);
  77. String mNamespace;
  78. String mTypename;
  79. OnInitializeThunkDef mOnInitializeThunk;
  80. OnDestroyThunkDef mOnDestroyThunk;
  81. UpdateThunkDef mUpdateThunk;
  82. MonoObject* mManagedInstance;
  83. ScriptEditorWindow* mScriptParent;
  84. };
  85. }