Browse Source

Modal windows are no longer persistent in order to solve issues with assembly refresh

BearishSun 10 years ago
parent
commit
1116d5ba54

+ 1 - 7
MBansheeEditor/EditorApplication.cs

@@ -213,13 +213,7 @@ namespace BansheeEditor
         [MenuItem("File/Open Project", 100)]
         [MenuItem("File/Open Project", 100)]
         public static void BrowseForProject()
         public static void BrowseForProject()
         {
         {
-            string projectPath = EditorSettings.LastOpenProject;
-            if (!Directory.Exists(projectPath))
-                projectPath = Directory.GetCurrentDirectory();
-
-            string selectedPath;
-            if (BrowseDialog.OpenFolder(projectPath, "", out selectedPath))
-                LoadProject(selectedPath);
+            ProjectWindow.Open();
         }
         }
 
 
         [MenuItem("File/Save Project", 99)]
         [MenuItem("File/Save Project", 99)]

+ 1 - 22
SBansheeEditor/Include/BsScriptModalWindow.h

@@ -12,7 +12,7 @@ namespace BansheeEngine
 	/**
 	/**
 	 * @brief	Interop class between C++ & CLR for ManagedModalWindow.
 	 * @brief	Interop class between C++ & CLR for ManagedModalWindow.
 	 */
 	 */
-	class BS_SCR_BED_EXPORT ScriptModalWindow : public ScriptObject <ScriptModalWindow, PersistentScriptObjectBase>
+	class BS_SCR_BED_EXPORT ScriptModalWindow : public ScriptObject <ScriptModalWindow>
 	{
 	{
 		/**
 		/**
 		 * @brief	Contains data about the managed handle to a modal window.
 		 * @brief	Contains data about the managed handle to a modal window.
@@ -32,26 +32,6 @@ namespace BansheeEngine
 
 
 		ScriptModalWindow(ManagedModalWindow* editorWidget);
 		ScriptModalWindow(ManagedModalWindow* editorWidget);
 
 
-		/**
-		 * @copydoc	ScriptObjectBase::_onManagedInstanceDeleted
-		 */
-		void _onManagedInstanceDeleted() override;
-
-		/**
-		 * @copydoc	ScriptObjectBase::beginRefresh
-		 */
-		ScriptObjectBackup beginRefresh() override;
-
-		/**
-		 * @copydoc	ScriptObjectBase::endRefresh
-		 */
-		void endRefresh(const ScriptObjectBackup& backupData) override;
-
-		/**
-		 * @copydoc	ScriptObjectBase::_createManagedInstance
-		 */
-		MonoObject* _createManagedInstance(bool construct) override;
-
 		/**
 		/**
 		 * @brief	Triggered when assembly refresh has started.
 		 * @brief	Triggered when assembly refresh has started.
 		 */
 		 */
@@ -64,7 +44,6 @@ namespace BansheeEngine
 
 
 		ManagedModalWindow* mModalWindow;
 		ManagedModalWindow* mModalWindow;
 		HEvent mOnAssemblyRefreshStartedConn;
 		HEvent mOnAssemblyRefreshStartedConn;
-		bool mRefreshInProgress;
 
 
 		static MonoField* guiPanelField;
 		static MonoField* guiPanelField;
 
 

+ 3 - 59
SBansheeEditor/Source/BsScriptModalWindow.cpp

@@ -18,7 +18,7 @@ namespace BansheeEngine
 	MonoField* ScriptModalWindow::guiPanelField = nullptr;
 	MonoField* ScriptModalWindow::guiPanelField = nullptr;
 
 
 	ScriptModalWindow::ScriptModalWindow(ManagedModalWindow* window)
 	ScriptModalWindow::ScriptModalWindow(ManagedModalWindow* window)
-		:ScriptObject(window->getManagedInstance()), mModalWindow(window), mRefreshInProgress(false)
+		:ScriptObject(window->getManagedInstance()), mModalWindow(window)
 	{
 	{
 		mOnAssemblyRefreshStartedConn = ScriptObjectManager::instance().onRefreshStarted.connect(std::bind(&ScriptModalWindow::onAssemblyRefreshStarted, this));
 		mOnAssemblyRefreshStartedConn = ScriptObjectManager::instance().onRefreshStarted.connect(std::bind(&ScriptModalWindow::onAssemblyRefreshStarted, this));
 	}
 	}
@@ -74,66 +74,10 @@ namespace BansheeEngine
 		mModalWindow = nullptr;
 		mModalWindow = nullptr;
 	}
 	}
 
 
-	void ScriptModalWindow::_onManagedInstanceDeleted()
-	{
-		if (!mRefreshInProgress)
-		{
-			// Note: This should only ever get triggered after "internal_close" is called
-
-			ScriptObject::_onManagedInstanceDeleted();
-		}
-		else
-			mManagedInstance = nullptr;
-	}
-
-	ScriptObjectBackup ScriptModalWindow::beginRefresh()
-	{
-		mRefreshInProgress = true;
-
-		if (mModalWindow != nullptr)
-			mModalWindow->releaseManagedInstance();
-
-		return PersistentScriptObjectBase::beginRefresh();
-	}
-
-	void ScriptModalWindow::endRefresh(const ScriptObjectBackup& backupData)
-	{
-		mRefreshInProgress = false;
-
-		if (mModalWindow != nullptr)
-			mManagedInstance = mModalWindow->getManagedInstance();
-		else
-			mManagedInstance = nullptr;
-
-		if (mManagedInstance != nullptr)
-		{
-			mModalWindow->triggerOnInitialize();
-		}
-		else
-		{
-			// We couldn't restore managed instance because window class cannot be found
-			_onManagedInstanceDeleted();
-		}
-
-		PersistentScriptObjectBase::endRefresh(backupData);
-	}
-
 	void ScriptModalWindow::onAssemblyRefreshStarted()
 	void ScriptModalWindow::onAssemblyRefreshStarted()
 	{
 	{
 		if (mModalWindow != nullptr)
 		if (mModalWindow != nullptr)
-			mModalWindow->triggerOnDestroy();
-	}
-
-	MonoObject* ScriptModalWindow::_createManagedInstance(bool construct)
-	{
-		if (mModalWindow != nullptr)
-		{
-			mModalWindow->createManagedInstance();
-
-			return mModalWindow->getManagedInstance();
-		}
-		else
-			return nullptr;
+			mModalWindow->close();
 	}
 	}
 
 
 	UINT32 ScriptModalWindow::internal_getWidth(ScriptModalWindow* thisPtr)
 	UINT32 ScriptModalWindow::internal_getWidth(ScriptModalWindow* thisPtr)
@@ -215,7 +159,7 @@ namespace BansheeEngine
 
 
 			if (editorWindowClass != nullptr)
 			if (editorWindowClass != nullptr)
 			{
 			{
-				mManagedInstance = editorWindowClass->createInstance();
+				mManagedInstance = editorWindowClass->createInstance(false);
 				mGCHandle = mono_gchandle_new(mManagedInstance, false);
 				mGCHandle = mono_gchandle_new(mManagedInstance, false);
 
 
 				MonoObject* guiPanel = ScriptGUIPanel::createFromExisting(mContents);
 				MonoObject* guiPanel = ScriptGUIPanel::createFromExisting(mContents);