BsScriptEditorWindow.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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>
  10. {
  11. struct EditorWindowHandle
  12. {
  13. uint32_t gcHandle;
  14. ScriptEditorWindow* nativeObj;
  15. };
  16. public:
  17. SCRIPT_OBJ(BansheeEditorAssemblyName, "BansheeEditor", "EditorWindow")
  18. ~ScriptEditorWindow();
  19. EditorWidgetBase* getEditorWidget() const { return mEditorWidget; }
  20. static void registerManagedEditorWindows();
  21. private:
  22. friend class ScriptEditorWidget;
  23. ScriptEditorWindow(MonoObject* instance, const String& windowName, const String& displayName, EditorWidgetBase* editorWidget);
  24. static MonoObject* internal_createOrGetInstance(MonoString* ns, MonoString* typeName);
  25. static bool internal_hasFocus(ScriptEditorWindow* thisPtr);
  26. static void internal_screenToWindowPos(ScriptEditorWindow* thisPtr, Vector2I screenPos, Vector2I* windowPos);
  27. static void internal_windowToScreenPos(ScriptEditorWindow* thisPtr, Vector2I windowPos, Vector2I* screenPos);
  28. static UINT32 internal_getWidth(ScriptEditorWindow* thisPtr);
  29. static UINT32 internal_getHeight(ScriptEditorWindow* thisPtr);
  30. static void internal_initializeGUIPanel(ScriptEditorWindow* thisPtr, MonoObject* panel);
  31. void onWidgetMoved(INT32 x, INT32 y);
  32. void onWidgetResized(UINT32 width, UINT32 height);
  33. void onWidgetParentChanged(EditorWidgetContainer* newParent);
  34. void onFocusChanged(bool inFocus);
  35. void _onManagedInstanceDeleted();
  36. String mName;
  37. EditorWidgetBase* mEditorWidget;
  38. Vector<ScriptGUIPanel*> mPanels;
  39. HEvent mOnWidgetMovedConn;
  40. HEvent mOnWidgetResizedConn;
  41. HEvent mOnParentChangedConn;
  42. HEvent mOnFocusChangedConn;
  43. static MonoMethod* onResizedMethod;
  44. static MonoMethod* onFocusChangedMethod;
  45. // Global editor window management methods
  46. static void registerScriptEditorWindow(ScriptEditorWindow* editorWindow);
  47. static void unregisterScriptEditorWindow(const String& windowTypeName);
  48. static UnorderedMap<String, EditorWindowHandle> OpenScriptEditorWindows;
  49. static EditorWidgetBase* openEditorWidgetCallback(String ns, String type, EditorWidgetContainer& parentContainer);
  50. };
  51. class BS_SCR_BED_EXPORT ScriptEditorWidget : public EditorWidgetBase
  52. {
  53. public:
  54. ScriptEditorWidget(const String& windowTypeName, const HString& displayName,
  55. EditorWidgetContainer& parentContainer, MonoClass* monoClass, MonoObject* managedInstance);
  56. ~ScriptEditorWidget();
  57. void update();
  58. private:
  59. typedef void(__stdcall *UpdateThunkDef) (MonoObject*, MonoException**);
  60. String mWindowTypeName;
  61. UpdateThunkDef mUpdateThunk;
  62. MonoObject* mManagedInstance;
  63. ScriptEditorWindow* mScriptParent;
  64. };
  65. }