From a045cda6cd60ea80b03a00c3bf22ee50daa7927b Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 21 Nov 2023 19:34:43 -0700 Subject: [PATCH] Fixed Gum code files not added to csproj or removed from csproj fixes #1273 --- .../Glue/GumPlugin/GumPlugin/MainGumPlugin.cs | 21 ++++++++++-- .../Managers/CodeGeneratorManager.cs | 33 +++++++++++++------ FRBDK/Localization/Texts.Designer.cs | 3 +- FRBDK/Localization/Texts.resx | 3 +- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/FRBDK/Glue/GumPlugin/GumPlugin/MainGumPlugin.cs b/FRBDK/Glue/GumPlugin/GumPlugin/MainGumPlugin.cs index cd5290b3c..886acf5bb 100644 --- a/FRBDK/Glue/GumPlugin/GumPlugin/MainGumPlugin.cs +++ b/FRBDK/Glue/GumPlugin/GumPlugin/MainGumPlugin.cs @@ -384,8 +384,8 @@ private void AssignEvents() this.NewScreenCreated += HandleNewScreen; - this.ReactToScreenRemoved += HandleScreenRemoved; + #endregion this.TryAddContainedObjects += ContainedObjectsManager.Self.HandleTryAddContainedObjects; @@ -551,7 +551,7 @@ await TaskManager.Self.AddAsync(async () => } - private async void HandleScreenRemoved(FlatRedBall.Glue.SaveClasses.ScreenSave glueScreen, List listToFillWithAdditionalFilesToRemove) + private void HandleScreenRemoved(FlatRedBall.Glue.SaveClasses.ScreenSave glueScreen, List listToFillWithAdditionalFilesToRemove) { if (AppState.Self.GumProjectSave != null) { @@ -565,10 +565,25 @@ private async void HandleScreenRemoved(FlatRedBall.Glue.SaveClasses.ScreenSave g String.Format(Localization.Texts.GumConfirmDeleteScreen,gumScreen.Name, glueScreen)); if(result == System.Windows.MessageBoxResult.Yes) { - await GumPluginCommands.Self.RemoveScreen(gumScreen); + // don't await this, we want this method to immediately add to the lists + _=GumPluginCommands.Self.RemoveScreen(gumScreen); listToFillWithAdditionalFilesToRemove.Add(CodeGeneratorManager.Self.CustomRuntimeCodeLocationFor(gumScreen).FullPath); listToFillWithAdditionalFilesToRemove.Add(CodeGeneratorManager.Self.GeneratedRuntimeCodeLocationFor(gumScreen).FullPath); + + // If there are forms screens, remove those too: + var formsCustomFilePath = CodeGeneratorManager.Self.CustomFormsCodeLocationFor(gumScreen); + + if(formsCustomFilePath.Exists()) + { + listToFillWithAdditionalFilesToRemove.Add(formsCustomFilePath.FullPath); + } + + var formsGeneratedFilePath = CodeGeneratorManager.Self.GeneratedFormsCodeLocationFor(gumScreen); + if(formsGeneratedFilePath.Exists()) + { + listToFillWithAdditionalFilesToRemove.Add(formsGeneratedFilePath.FullPath); + } } } diff --git a/FRBDK/Glue/GumPlugin/GumPlugin/Managers/CodeGeneratorManager.cs b/FRBDK/Glue/GumPlugin/GumPlugin/Managers/CodeGeneratorManager.cs index 5ba945889..b50b90205 100644 --- a/FRBDK/Glue/GumPlugin/GumPlugin/Managers/CodeGeneratorManager.cs +++ b/FRBDK/Glue/GumPlugin/GumPlugin/Managers/CodeGeneratorManager.cs @@ -60,7 +60,22 @@ public class CodeGeneratorManager : Singleton public FilePath CustomRuntimeCodeLocationFor(ElementSave gumElement) => GumRuntimesFolder + gumElement.Name + "Runtime.cs"; public FilePath GeneratedRuntimeCodeLocationFor(ElementSave gumElement) => GumRuntimesFolder + gumElement.Name + "Runtime.Generated.cs"; + public FilePath CustomFormsCodeLocationFor(ElementSave gumElement) + { + var subfolder = gumElement is Gum.DataTypes.ScreenSave ? "Screens/" + : gumElement is ComponentSave ? "Components/" + : "Standard/"; + return FormsFolder + subfolder + gumElement.Name + "Forms.cs"; + } + public FilePath GeneratedFormsCodeLocationFor(ElementSave gumElement) + { + var subfolder = gumElement is Gum.DataTypes.ScreenSave ? "Screens/" + : gumElement is ComponentSave ? "Components/" + : "Standard/"; + + return FormsFolder + subfolder + gumElement.Name + "Forms.Generated.cs"; + } FilePath GumBehaviorsFolder => GumRuntimesFolder + @"Behaviors\"; @@ -326,7 +341,6 @@ public GenerationResult GenerateCodeFor(Gum.DataTypes.ElementSave element, bool // creating the custom code files. string generatedGumRuntimeCode = mGueDerivingClassCodeGenerator.GenerateCodeFor(element); - var formsFolder = FormsFolder; var shouldGeneratedFormsBeInProject = false; string generatedFormsCode = FormsClassCodeGenerator.Self.GenerateCodeFor(element); @@ -377,9 +391,10 @@ public GenerationResult GenerateCodeFor(Gum.DataTypes.ElementSave element, bool #region Custom Forms - string customFormsSaveLocation = formsFolder + subfolder + element.Name + "Forms.cs"; + string customFormsSaveLocation = CustomFormsCodeLocationFor(element).FullPath; + var customFormsCode = CustomCodeGenerator.Self.GetCustomFormsCodeTemplateCode(element); - if(string.IsNullOrEmpty(generatedFormsCode)) + if(string.IsNullOrEmpty(customFormsCode)) { resultToReturn.DidSaveCustomForms = false; } @@ -390,17 +405,13 @@ public GenerationResult GenerateCodeFor(Gum.DataTypes.ElementSave element, bool if (resultToReturn.DidSaveCustomForms) { - var customCode = CustomCodeGenerator.Self.GetCustomFormsCodeTemplateCode(element); var directory = FileManager.GetDirectory(customFormsSaveLocation); System.IO.Directory.CreateDirectory(directory); GlueCommands.Self.TryMultipleTimes(() => - System.IO.File.WriteAllText(customFormsSaveLocation, customCode)); - } - - if(shouldGeneratedFormsBeInProject) - { + System.IO.File.WriteAllText(customFormsSaveLocation, customFormsCode)); + bool wasAnythingAdded = FlatRedBall.Glue.ProjectManager.CodeProjectHelper.AddFileToCodeProjectIfNotAlreadyAdded( GlueState.Self.CurrentMainProject, customFormsSaveLocation); @@ -477,7 +488,7 @@ public GenerationResult GenerateCodeFor(Gum.DataTypes.ElementSave element, bool #region Generated Forms - FilePath generatedFormsSaveLocation = formsFolder + subfolder + element.Name + "Forms.Generated.cs"; + FilePath generatedFormsSaveLocation = GeneratedFormsCodeLocationFor(element); if(string.IsNullOrEmpty(generatedFormsCode)) { @@ -529,6 +540,8 @@ public GenerationResult GenerateCodeFor(Gum.DataTypes.ElementSave element, bool if (shouldSaveProject && saveProjects) { + // November 21, 2023 - this isnt working but I'm not sure why - will investigate some time in the future. + // The Forms generated file wasn't embedded. GlueCommands.Self.ProjectCommands.MakeGeneratedCodeItemsNested(); GlueCommands.Self.ProjectCommands.SaveProjects(); } diff --git a/FRBDK/Localization/Texts.Designer.cs b/FRBDK/Localization/Texts.Designer.cs index 65db2245f..1b3fe6ba1 100644 --- a/FRBDK/Localization/Texts.Designer.cs +++ b/FRBDK/Localization/Texts.Designer.cs @@ -3256,7 +3256,8 @@ public static string GumAutoCreateForGlue { } /// - /// Looks up a localized string similar to Delete the Gum Screen {0}\nfor {1}?. + /// Looks up a localized string similar to Delete the Gum Screen {0} + ///for {1}?. /// public static string GumConfirmDeleteScreen { get { diff --git a/FRBDK/Localization/Texts.resx b/FRBDK/Localization/Texts.resx index 1953d1eac..09d04ea84 100644 --- a/FRBDK/Localization/Texts.resx +++ b/FRBDK/Localization/Texts.resx @@ -364,7 +364,8 @@ Gum Plugin - handle new FRB screen {0} - Delete the Gum Screen {0}\nfor {1}? + Delete the Gum Screen {0} +for {1}? The Gum project file (.gumx) can only be added to global content.