BsScriptEditorGUI.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "BsScriptEditorGUI.h"
  2. #include "BsMonoManager.h"
  3. #include "BsScriptMeta.h"
  4. #include "BsMonoClass.h"
  5. #include "BsScriptEditorWindow.h"
  6. #include "BsEditorWidget.h"
  7. #include "BsEditorWidgetContainer.h"
  8. #include "BsGUIWidget.h"
  9. #include "BsCamera.h"
  10. #include "CmSceneObject.h"
  11. #include "BsEditorGUI.h"
  12. using namespace CamelotFramework;
  13. using namespace BansheeEngine;
  14. namespace BansheeEditor
  15. {
  16. ScriptEditorGUI::ScriptEditorGUI(ScriptEditorWindow* parentWindow)
  17. :ScriptGUIBase(), mParentWindow(parentWindow)
  18. {
  19. }
  20. void ScriptEditorGUI::initMetaData()
  21. {
  22. metaData = ScriptMeta("MBansheeEditor", "BansheeEditor", "EditorGUI", &ScriptEditorGUI::initRuntimeData);
  23. MonoManager::registerScriptType(&metaData);
  24. }
  25. void ScriptEditorGUI::initRuntimeData()
  26. {
  27. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptEditorGUI::internal_createInstance);
  28. metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptEditorGUI::internal_destroyInstance);
  29. }
  30. void ScriptEditorGUI::internal_createInstance(MonoObject* instance, MonoObject* parentEditorWindow)
  31. {
  32. ScriptEditorWindow* nativeParentWindow = ScriptEditorWindow::toNative(parentEditorWindow);
  33. ScriptEditorGUI* nativeInstance = new (cm_alloc<ScriptEditorGUI>()) ScriptEditorGUI(nativeParentWindow);
  34. nativeInstance->createInstance(instance);
  35. metaData.thisPtrField->setValue(instance, (ScriptGUIBase*)nativeInstance);
  36. }
  37. void ScriptEditorGUI::internal_destroyInstance(ScriptEditorGUI* nativeInstance)
  38. {
  39. nativeInstance->destroyInstance();
  40. cm_delete(nativeInstance);
  41. }
  42. GUIWidget& ScriptEditorGUI::getWidget() const
  43. {
  44. EditorWidgetContainer* widgetContainer = mParentWindow->getEditorWidget()->_getParent();
  45. if(widgetContainer == nullptr)
  46. CM_EXCEPT(InternalErrorException, "Attempting to retrieve GUI widget of an unparented EditorWidget.");
  47. return widgetContainer->getParentWidget();
  48. }
  49. }