diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs index 86a11c9443..bfa997243a 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs @@ -25,7 +25,7 @@ using ReflectionLayer = ICSharpCode.SharpDevelop.Dom.ReflectionLayer; namespace ICSharpCode.FormsDesigner { - public abstract class AbstractDesignerGenerator : IDesignerGenerator + public abstract class AbstractDesignerGenerator : IDesignerGenerator2 { /// The currently open part of the class being designed. IClass currentClassPart; @@ -211,6 +211,18 @@ namespace ICSharpCode.FormsDesigner { } + public virtual void NotifyFormRenamed(string newName) + { + Reparse(); + LoggingService.Info("Renaming form to " + newName); + if (this.formClass == null) { + LoggingService.Warn("Cannot rename, formClass not found"); + } else { + ICSharpCode.SharpDevelop.Refactoring.FindReferencesAndRenameHelper.RenameClass(this.formClass, newName); + Reparse(); + } + } + public virtual void MergeFormChanges(CodeCompileUnit unit) { Reparse(); @@ -238,14 +250,6 @@ namespace ICSharpCode.FormsDesigner return; } - if (formClass.Name != this.formClass.Name) { - LoggingService.Info("Renaming form to " + formClass.Name); - ICSharpCode.SharpDevelop.Refactoring.FindReferencesAndRenameHelper.RenameClass(this.formClass, formClass.Name); - this.ViewContent.DesignerCodeFile.MakeDirty(); - this.ViewContent.PrimaryFile.MakeDirty(); - Reparse(); - } - FixGeneratedCode(this.formClass, initializeComponent); // generate file and get initialize components string diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/IDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/IDesignerGenerator.cs index b539c0c56a..f96b40d03f 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/IDesignerGenerator.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/IDesignerGenerator.cs @@ -37,4 +37,9 @@ namespace ICSharpCode.FormsDesigner bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out string file, out int position); ICollection GetCompatibleMethods(EventDescriptor edesc); } + + public interface IDesignerGenerator2 : IDesignerGenerator + { + void NotifyFormRenamed(string newName); + } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs index 726f68da48..93ff7a678d 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs @@ -369,7 +369,20 @@ namespace ICSharpCode.FormsDesigner bool loading = this.loader != null && this.loader.Loading; LoggingService.Debug("Forms designer: ComponentChanged: " + (e.Component == null ? "" : e.Component.ToString()) + ", Member=" + (e.Member == null ? "" : e.Member.Name) + ", OldValue=" + (e.OldValue == null ? "" : e.OldValue.ToString()) + ", NewValue=" + (e.NewValue == null ? "" : e.NewValue.ToString()) + "; Loading=" + loading + "; Unloading=" + this.unloading); if (!loading && !unloading) { - this.MakeDirty(); + try { + this.MakeDirty(); + if (e.Component != null && e.Component == Host.RootComponent + && e.Member != null && e.Member.Name == "Name" && e.NewValue is string + && !object.Equals(e.OldValue, e.NewValue)) + { + // changing the name of the form + IDesignerGenerator2 gen2 = generator as IDesignerGenerator2; + if (gen2 != null) + gen2.NotifyFormRenamed((string)e.NewValue); + } + } catch (Exception ex) { + MessageService.ShowError(ex); + } } } diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs index 4235d30ed7..d5c517c635 100644 --- a/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs +++ b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs @@ -130,6 +130,10 @@ namespace ICSharpCode.SharpDevelop.Refactoring public static void RenameClass(IClass c, string newName) { + if (c == null) + throw new ArgumentNullException("c"); + if (newName == null) + throw new ArgumentNullException("newName"); c = c.GetCompoundClass(); // get compound class if class is partial List list = RefactoringService.FindReferences(c, null);