bool ScriptEditorWidget::createManagedInstance() { const char* assemblies[2] = { EDITOR_ASSEMBLY, SCRIPT_EDITOR_ASSEMBLY }; UINT32 numAssemblies = sizeof(assemblies) / sizeof(assemblies[0]); for (UINT32 i = 0; i < numAssemblies; i++) { MonoAssembly* assembly = MonoManager::instance().getAssembly(assemblies[i]); if (assembly != nullptr) { MonoClass* editorWindowClass = assembly->getClass(mNamespace, mTypename); if (editorWindowClass != nullptr) { mManagedInstance = editorWindowClass->createInstance(); MonoObject* guiPanel = ScriptGUIPanel::createFromExisting(mContent); mContentsPanel = ScriptGUILayout::toNative(guiPanel); ScriptEditorWindow::guiPanelField->setValue(mManagedInstance, guiPanel); reloadMonoTypes(editorWindowClass); return true; } } } return false; }
ManagedDropDownWindow::ManagedDropDownWindow(const SPtr<RenderWindow>& parent, const SPtr<Camera>& camera, const Vector2I& position, MonoObject* managedInstance, UINT32 width, UINT32 height) : DropDownWindow(parent, camera, position, width, height), mOnInitializeThunk(nullptr), mOnDestroyThunk(nullptr) , mUpdateThunk(nullptr), mIsInitialized(false), mManagedInstance(managedInstance), mGCHandle(0) , mScriptParent(nullptr), mContentsPanel(nullptr) { mGCHandle = MonoUtil::newGCHandle(mManagedInstance); MonoObject* guiPanel = ScriptGUIPanel::createFromExisting(mContents); mContentsPanel = ScriptGUILayout::toNative(guiPanel); ScriptDropDownWindow::guiPanelField->setValue(mManagedInstance, guiPanel); ::MonoClass* rawMonoClass = MonoUtil::getClass(mManagedInstance); MonoClass* monoClass = MonoManager::instance().findClass(rawMonoClass); mNamespace = monoClass->getNamespace(); mTypename = monoClass->getTypeName(); reloadMonoTypes(monoClass); }