diff --git a/data/resources/layouts/Debug.xml b/data/resources/layouts/Debug.xml index fe8344fd4b..a70cec9d94 100644 Binary files a/data/resources/layouts/Debug.xml and b/data/resources/layouts/Debug.xml differ diff --git a/data/resources/layouts/Default.xml b/data/resources/layouts/Default.xml index 8d9185817c..36d31ed8cc 100644 Binary files a/data/resources/layouts/Default.xml and b/data/resources/layouts/Default.xml differ diff --git a/data/resources/layouts/Plain.xml b/data/resources/layouts/Plain.xml index a3365f4421..ad64d7df53 100644 Binary files a/data/resources/layouts/Plain.xml and b/data/resources/layouts/Plain.xml differ diff --git a/src/AddIns/Misc/NUnitPad/Project/Src/Gui/TestTreeView.cs b/src/AddIns/Misc/NUnitPad/Project/Src/Gui/TestTreeView.cs index cf650654f2..ac07a81828 100644 --- a/src/AddIns/Misc/NUnitPad/Project/Src/Gui/TestTreeView.cs +++ b/src/AddIns/Misc/NUnitPad/Project/Src/Gui/TestTreeView.cs @@ -223,7 +223,7 @@ namespace ICSharpCode.NUnitPad // If any tasks bring task view to front. if (TaskService.TaskCount > 0) { IWorkbench Workbench = ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.Workbench; - PadDescriptor padDescriptor = Workbench.GetPad(typeof(OpenTaskView)); + PadDescriptor padDescriptor = Workbench.GetPad(typeof(ErrorList)); if (padDescriptor != null) { padDescriptor.BringPadToFront(); diff --git a/src/Libraries/NRefactory/Project/Src/Parser/Visitors/VBNetToCSharpConvertVisitor.cs b/src/Libraries/NRefactory/Project/Src/Parser/Visitors/VBNetToCSharpConvertVisitor.cs index b859fbced9..549d6f3c03 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/Visitors/VBNetToCSharpConvertVisitor.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/Visitors/VBNetToCSharpConvertVisitor.cs @@ -41,12 +41,13 @@ namespace ICSharpCode.NRefactory.Parser if (fre != null && "New".Equals(fre.FieldName, StringComparison.InvariantCultureIgnoreCase)) { if (fre.TargetObject is BaseReferenceExpression || fre.TargetObject is ClassReferenceExpression) { body.Children.RemoveAt(0); - ConstructorInitializer ci = constructorDeclaration.ConstructorInitializer; + ConstructorInitializer ci = new ConstructorInitializer(); ci.Arguments = ie.Parameters; if (fre.TargetObject is BaseReferenceExpression) ci.ConstructorInitializerType = ConstructorInitializerType.Base; else ci.ConstructorInitializerType = ConstructorInitializerType.This; + constructorDeclaration.ConstructorInitializer = ci; } } } diff --git a/src/Main/Base/Project/Src/Commands/ClassMemberMenuBuilder.cs b/src/Main/Base/Project/Src/Commands/ClassMemberMenuBuilder.cs index a49117e699..f097c04185 100644 --- a/src/Main/Base/Project/Src/Commands/ClassMemberMenuBuilder.cs +++ b/src/Main/Base/Project/Src/Commands/ClassMemberMenuBuilder.cs @@ -18,6 +18,7 @@ using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Bookmarks; using ICSharpCode.SharpDevelop.Gui; using SearchAndReplace; +using ICSharpCode.SharpDevelop.DefaultEditor.Commands; namespace ICSharpCode.SharpDevelop.Commands { @@ -54,9 +55,68 @@ namespace ICSharpCode.SharpDevelop.Commands cmd.Tag = member; list.Add(cmd); + if (member is IField) { + string propertyName = AbstractPropertyCodeGenerator.GetPropertyName(member.Name); + LanguageProperties language = member.DeclaringType.ProjectContent.Language; + bool found = false; + foreach (IProperty prop in member.DeclaringType.Properties) { + if (language.NameComparer.Equals(propertyName, prop.Name)) { + found = true; + break; + } + } + if (!found) { + cmd = new MenuCommand("Create &getter", CreateGetter); + cmd.Tag = member; + list.Add(cmd); + cmd = new MenuCommand("Create &property", CreateProperty); + cmd.Tag = member; + list.Add(cmd); + } + } + return list.ToArray(); } + TextEditorControl JumpBehindDefinition(IMember member) + { + IViewContent viewContent; + viewContent = FileService.JumpToFilePosition(member.DeclaringType.CompilationUnit.FileName, + member.Region.EndLine, 0); + ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.ITextEditorControlProvider tecp = viewContent as ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.ITextEditorControlProvider; + return (tecp == null) ? null : tecp.TextEditorControl; + } + + void CreateProperty(object sender, EventArgs e) + { + CreateProperty(sender, e, true); + } + + void CreateGetter(object sender, EventArgs e) + { + CreateProperty(sender, e, false); + } + + void CreateProperty(object sender, EventArgs e, bool includeSetter) + { + MenuCommand item = (MenuCommand)sender; + IMember member = (IMember)item.Tag; + TextEditorControl textEditor = JumpBehindDefinition(member); + AbstractPropertyCodeGenerator generator; + if (includeSetter) + generator = new GetterAndSetterCodeGenerator(member.DeclaringType); + else + generator = new GetterCodeGenerator(member.DeclaringType); + List list = new List(); + foreach (AbstractFieldCodeGenerator.FieldWrapper fw in generator.Content) { + if (fw.Field == member) { + list.Add(fw); + } + } + + generator.GenerateCode(textEditor.ActiveTextAreaControl.TextArea, list); + } + void GoToBase(object sender, EventArgs e) { MenuCommand item = (MenuCommand)sender; diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs index d05fd820be..b59bc12094 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs @@ -69,19 +69,22 @@ namespace ICSharpCode.SharpDevelop.Project projectBrowserPanel.Clear(); } + string lastFileName; + void ActiveWindowChanged(object sender, EventArgs e) { if (WorkbenchSingleton.Workbench.ActiveWorkbenchWindow == null) { return; } string fileName = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ViewContent.FileName; - if (fileName == null) { + if (fileName == null || lastFileName == fileName) { return; } if (!FileUtility.IsValidFileName(fileName)) { return; } + lastFileName = fileName; projectBrowserPanel.SelectFile(fileName); } diff --git a/src/Main/Base/Project/Src/Services/File/FileService.cs b/src/Main/Base/Project/Src/Services/File/FileService.cs index 09b0ab6218..5f9cf9c936 100644 --- a/src/Main/Base/Project/Src/Services/File/FileService.cs +++ b/src/Main/Base/Project/Src/Services/File/FileService.cs @@ -1,4 +1,4 @@ -// +// // // // @@ -232,15 +232,15 @@ namespace ICSharpCode.Core OnFileRenamed(new FileRenameEventArgs(oldName, newName, isDirectory)); } - public static void JumpToFilePosition(string fileName, int line, int column) + public static IViewContent JumpToFilePosition(string fileName, int line, int column) { if (fileName == null || fileName.Length == 0) { - return; + return null; } OpenFile(fileName); IWorkbenchWindow window = GetOpenFile(fileName); if (window == null) { - return; + return null; } IViewContent content = window.ViewContent; if (content.WorkbenchWindow.SubViewContents == null) { @@ -248,6 +248,7 @@ namespace ICSharpCode.Core window.SwitchView(0); ((IPositionable)content).JumpTo(Math.Max(0, line), Math.Max(0, column)); } + return content; } else { @@ -261,6 +262,7 @@ namespace ICSharpCode.Core window.SwitchView(i); ((IPositionable)viewContent).JumpTo(Math.Max(0, line), Math.Max(0, column)); } + return viewContent; } } catch (Exception) { } @@ -268,7 +270,7 @@ namespace ICSharpCode.Core i++; } } - + return null; } static void OnFileRemoved(FileEventArgs e) diff --git a/src/Main/Base/Project/Src/TextEditor/Bookmarks/ClassMemberBookmark.cs b/src/Main/Base/Project/Src/TextEditor/Bookmarks/ClassMemberBookmark.cs index 98733fae67..6714e9d352 100644 --- a/src/Main/Base/Project/Src/TextEditor/Bookmarks/ClassMemberBookmark.cs +++ b/src/Main/Base/Project/Src/TextEditor/Bookmarks/ClassMemberBookmark.cs @@ -79,4 +79,34 @@ namespace ICSharpCode.SharpDevelop.Bookmarks DrawIcon(ClassBrowserIconService.GetIcon(method), g, p); } } + + public class FieldBookmark : ClassMemberBookmark + { + IField field; + + public FieldBookmark(IDocument document, IField field) : base(document, field) + { + this.field = field; + } + + public override void Draw(IconBarMargin margin, Graphics g, Point p) + { + DrawIcon(ClassBrowserIconService.GetIcon(field), g, p); + } + } + + public class EventBookmark : ClassMemberBookmark + { + IEvent @event; + + public EventBookmark(IDocument document, IEvent @event) : base(document, @event) + { + this.@event = @event; + } + + public override void Draw(IconBarMargin margin, Graphics g, Point p) + { + DrawIcon(ClassBrowserIconService.GetIcon(@event), g, p); + } + } } diff --git a/src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/AbstractPropertyCodeGenerator.cs b/src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/AbstractPropertyCodeGenerator.cs index bfe855ed07..752b3ced64 100644 --- a/src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/AbstractPropertyCodeGenerator.cs +++ b/src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/AbstractPropertyCodeGenerator.cs @@ -27,7 +27,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands } } - string GetPropertyName(string fieldName) + public static string GetPropertyName(string fieldName) { if (fieldName.StartsWith("_") && fieldName.Length > 1) return Char.ToUpper(fieldName[1]) + fieldName.Substring(2); diff --git a/src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/CodeGenerator.cs b/src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/CodeGenerator.cs index 2438fe6bae..c1a0177c51 100644 --- a/src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/CodeGenerator.cs +++ b/src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/CodeGenerator.cs @@ -1,4 +1,4 @@ -// +// // // // @@ -142,12 +142,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands protected void IndentLine() { - int delta = editActionHandler.Document.FormattingStrategy.IndentLine(editActionHandler, editActionHandler.Document.GetLineNumberForOffset(editActionHandler.Caret.Offset)); - if (delta != 0) { - ++numOps; - LineSegment caretLine = editActionHandler.Document.GetLineSegmentForOffset(editActionHandler.Caret.Offset); - editActionHandler.Caret.Position = editActionHandler.Document.OffsetToPosition(Math.Min(editActionHandler.Caret.Offset + delta, caretLine.Offset + caretLine.Length)); - } + editActionHandler.Document.FormattingStrategy.IndentLine(editActionHandler, editActionHandler.Caret.Line); } } } diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs index ef4d4ee481..d02819b7c2 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs @@ -1,4 +1,4 @@ -// +// // // // @@ -443,8 +443,8 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor { try { textAreaControl.Document.FoldingManager.UpdateFoldings(TitleName, parseInfo); - textAreaControl.ActiveTextAreaControl.TextArea.Refresh(textAreaControl.ActiveTextAreaControl.TextArea.FoldMargin); UpdateClassMemberBookmarks(parseInfo); + textAreaControl.ActiveTextAreaControl.TextArea.Refresh(textAreaControl.ActiveTextAreaControl.TextArea.FoldMargin); } catch (Exception ex) { MessageService.ShowError(ex); } @@ -464,6 +464,14 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor if (m.Region == null || m.Region.BeginLine <= 0) continue; bm.AddMark(new Bookmarks.PropertyBookmark(textAreaControl.Document, m)); } + foreach (IField f in c.Fields) { + if (f.Region == null || f.Region.BeginLine <= 0) continue; + bm.AddMark(new Bookmarks.FieldBookmark(textAreaControl.Document, f)); + } + foreach (IEvent e in c.Events) { + if (e.Region == null || e.Region.BeginLine <= 0) continue; + bm.AddMark(new Bookmarks.EventBookmark(textAreaControl.Document, e)); + } } }