public static void RemoveScreen(ScreenSave screenToRemove, List<string> filesThatCouldBeRemoved) { List<ScreenSave> inheritingScreens = ObjectFinder.Self.GetAllScreensThatInheritFrom(screenToRemove); string message = null; if (inheritingScreens.Count != 0) { message = "The Screen " + screenToRemove.ToString() + " is the base for the following Screens:"; for (int i = 0; i < inheritingScreens.Count; i++) { message += "\n" + inheritingScreens[i].ToString(); } } DialogResult result = DialogResult.Yes; if (message != null) { message += "\n\nDo you really want to remove this Screen?"; result = MessageBox.Show(message, "Are you sure?", MessageBoxButtons.YesNo); } if (result == DialogResult.Yes) { // Remove objects before removing files. Otherwise Glue will complain if any objects reference the files. #region Remove the NamedObjectSaves for (int i = screenToRemove.NamedObjects.Count - 1; i > -1; i--) { NamedObjectSave nos = screenToRemove.NamedObjects[i]; ProjectManager.RemoveNamedObject(nos, false, false, null); } #endregion // remove all the files this references first before removing the Screen itself. // For more information see the RemoveEntity function for (int i = screenToRemove.ReferencedFiles.Count - 1; i > -1; i--) { GluxCommands.Self.RemoveReferencedFile(screenToRemove.ReferencedFiles[i], filesThatCouldBeRemoved); } ProjectManager.GlueProjectSave.Screens.Remove(screenToRemove); // If we're going to remove the Screen, we should remove all referenced objects that it references // as well as any ReferencedFiles RemoveUnreferencedFiles(screenToRemove, filesThatCouldBeRemoved); // test this! if (screenToRemove.Name == ProjectManager.GlueProjectSave.StartUpScreen) { ProjectManager.StartUpScreen = ""; } for (int i = 0; i < inheritingScreens.Count; i++) { ScreenSave inheritingScreen = inheritingScreens[i]; DialogResult resetInheritance = MessageBox.Show("Reset the inheritance for " + inheritingScreen.Name + "?", "Reset Inheritance?", MessageBoxButtons.YesNo); if (resetInheritance == DialogResult.Yes) { inheritingScreen.BaseScreen = ""; CodeWriter.GenerateCode(inheritingScreen); } } TaskManager.Self.OnUiThread(() => { ElementViewWindow.RemoveScreen(screenToRemove); }); IElement element = screenToRemove; ProjectManager.RemoveCodeFilesForElement(filesThatCouldBeRemoved, element); ProjectManager.SaveProjects(); GluxCommands.Self.SaveGlux(); } }