From 7d4f14a9aa687c5f7753b7b877af1e6b09bc9552 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 12 Aug 2005 14:07:29 +0000 Subject: [PATCH] Add context menu to class browser. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@354 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- AddIns/ICSharpCode.SharpDevelop.addin | 23 +++--- .../Project/ICSharpCode.SharpDevelop.csproj | 2 +- .../Implementations/DefaultCompilationUnit.cs | 2 +- .../Gui/Pads/ClassBrowser/Nodes/ClassNode.cs | 13 ++-- .../Gui/Pads/ClassBrowser/Nodes/MemberNode.cs | 73 +++++++------------ .../Commands/ClassBookmarkMenuBuilder.cs | 18 +++-- .../Commands/ClassMemberMenuBuilder.cs | 32 +++++--- .../Commands/ParserBookmarkMenuBuilderBase.cs | 5 ++ .../TextEditor/Commands/ProjectCommands.cs | 8 +- .../Gui/Editor/TextEditorDisplayBinding.cs | 2 +- 10 files changed, 95 insertions(+), 83 deletions(-) rename src/Main/Base/Project/Src/{ => TextEditor}/Commands/ClassMemberMenuBuilder.cs (88%) diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index ac5cebafd7..902edc7738 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -1437,15 +1437,12 @@ - - - - - + + @@ -1463,6 +1460,14 @@ + + + + + + + + - + diff --git a/src/Main/Base/Project/Src/Dom/Implementations/DefaultCompilationUnit.cs b/src/Main/Base/Project/Src/Dom/Implementations/DefaultCompilationUnit.cs index becfd97225..2b110a51cf 100644 --- a/src/Main/Base/Project/Src/Dom/Implementations/DefaultCompilationUnit.cs +++ b/src/Main/Base/Project/Src/Dom/Implementations/DefaultCompilationUnit.cs @@ -24,7 +24,7 @@ namespace ICSharpCode.SharpDevelop.Dom bool errorsDuringCompile = false; object tag = null; - string fileName = ""; + string fileName = null; IProjectContent projectContent; public string FileName { diff --git a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ClassNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ClassNode.cs index c94746d1e7..74624c7277 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ClassNode.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ClassNode.cs @@ -40,6 +40,7 @@ namespace ICSharpCode.SharpDevelop.Gui { sortOrder = 3; + this.ContextmenuAddinTreePath = "/SharpDevelop/Pads/ClassBrowser/ClassContextMenu"; this.project = project; this.c = c; Text = c.Name; @@ -81,23 +82,19 @@ namespace ICSharpCode.SharpDevelop.Gui } foreach (IMethod method in c.Methods) { - new MemberNode(c, method).AddTo(this); + new MemberNode(method).AddTo(this); } foreach (IProperty property in c.Properties) { - new MemberNode(c, property).AddTo(this); - } - - foreach (IIndexer indexer in c.Indexer) { - new MemberNode(c, indexer).AddTo(this); + new MemberNode(property).AddTo(this); } foreach (IField field in c.Fields) { - new MemberNode(c, field).AddTo(this); + new MemberNode(field).AddTo(this); } foreach (IEvent e in c.Events) { - new MemberNode(c, e).AddTo(this); + new MemberNode(e).AddTo(this); } UpdateVisibility(); } diff --git a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs index df279cdabb..97598d28f2 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs @@ -49,75 +49,58 @@ namespace ICSharpCode.SharpDevelop.Gui } } - public MemberNode(IClass declaringType, IMethod method) + IMember member; + + public IMember Member { + get { + return member; + } + } + + void InitMemberNode(IMember member) + { + this.member = member; + this.ContextmenuAddinTreePath = "/SharpDevelop/Pads/ClassBrowser/MemberContextMenu"; + declaringType = member.DeclaringType; + modifiers = member.Modifiers; + if (member.Region != null) { + line = member.Region.BeginLine; + column = member.Region.BeginColumn; + } + } + + public MemberNode(IMethod method) { + InitMemberNode(method); sortOrder = 10; - - this.declaringType = declaringType; - modifiers = method.Modifiers; Text = AppendReturnType(GetAmbience().Convert(method), method.ReturnType); SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(method); - if (method.Region != null) { - line = method.Region.BeginLine; - column = method.Region.BeginColumn; - } } - public MemberNode(IClass declaringType, IProperty property) + public MemberNode(IProperty property) { + InitMemberNode(property); sortOrder = 12; - - this.declaringType = declaringType; - modifiers = property.Modifiers; Text = AppendReturnType(GetAmbience().Convert(property), property.ReturnType); SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(property); - if (property.Region != null) { - line = property.Region.BeginLine; - column = property.Region.BeginColumn; - } } - public MemberNode(IClass declaringType, IIndexer indexer) - { - sortOrder = 13; - this.declaringType = declaringType; - modifiers = indexer.Modifiers; - Text = AppendReturnType(GetAmbience().Convert(indexer), indexer.ReturnType); - SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(indexer); - if (indexer.Region != null) { - line = indexer.Region.BeginLine; - column = indexer.Region.BeginColumn; - } - } - - - public MemberNode(IClass declaringType, IField field) + public MemberNode(IField field) { + InitMemberNode(field); sortOrder = 11; - - this.declaringType = declaringType; - modifiers = field.Modifiers; Text = AppendReturnType(GetAmbience().Convert(field), field.ReturnType); SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(field); - if (field.Region != null) { - line = field.Region.BeginLine; - column = field.Region.BeginColumn; - } } - public MemberNode(IClass declaringType, IEvent e) + public MemberNode(IEvent e) { + InitMemberNode(e); sortOrder = 14; - this.declaringType = declaringType; - modifiers = e.Modifiers; Text = AppendReturnType(GetAmbience().Convert(e), e.ReturnType); SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(e); - if (e.Region != null) { - line = e.Region.BeginLine; - column = e.Region.BeginColumn; - } } IAmbience GetAmbience() diff --git a/src/Main/Base/Project/Src/TextEditor/Commands/ClassBookmarkMenuBuilder.cs b/src/Main/Base/Project/Src/TextEditor/Commands/ClassBookmarkMenuBuilder.cs index dc97b41c7c..70ac8f0514 100644 --- a/src/Main/Base/Project/Src/TextEditor/Commands/ClassBookmarkMenuBuilder.cs +++ b/src/Main/Base/Project/Src/TextEditor/Commands/ClassBookmarkMenuBuilder.cs @@ -30,13 +30,21 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands public ToolStripItem[] BuildSubmenu(Codon codon, object owner) { MenuCommand cmd; - ClassBookmark bookmark = (ClassBookmark)owner; - IClass c = bookmark.Class; + IClass c; + ClassNode classNode = owner as ClassNode; + if (classNode != null) { + c = classNode.Class; + } else { + ClassBookmark bookmark = (ClassBookmark)owner; + c = bookmark.Class; + } List list = new List(); - cmd = new MenuCommand("${res:SharpDevelop.Refactoring.RenameCommand}", Rename); - cmd.Tag = c; - list.Add(cmd); + if (!IsReadOnly(c)) { + cmd = new MenuCommand("${res:SharpDevelop.Refactoring.RenameCommand}", Rename); + cmd.Tag = c; + list.Add(cmd); + } if (c.BaseTypes.Count > 0) { cmd = new MenuCommand("${res:SharpDevelop.Refactoring.GoToBaseCommand}", GoToBase); diff --git a/src/Main/Base/Project/Src/Commands/ClassMemberMenuBuilder.cs b/src/Main/Base/Project/Src/TextEditor/Commands/ClassMemberMenuBuilder.cs similarity index 88% rename from src/Main/Base/Project/Src/Commands/ClassMemberMenuBuilder.cs rename to src/Main/Base/Project/Src/TextEditor/Commands/ClassMemberMenuBuilder.cs index 2c36805f36..9ad2fbbc18 100644 --- a/src/Main/Base/Project/Src/Commands/ClassMemberMenuBuilder.cs +++ b/src/Main/Base/Project/Src/TextEditor/Commands/ClassMemberMenuBuilder.cs @@ -30,15 +30,23 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands public ToolStripItem[] BuildSubmenu(Codon codon, object owner) { MenuCommand cmd; - ClassMemberBookmark bookmark = (ClassMemberBookmark)owner; - IMember member = bookmark.Member; + IMember member; + MemberNode memberNode = owner as MemberNode; + if (memberNode != null) { + member = memberNode.Member; + } else { + ClassMemberBookmark bookmark = (ClassMemberBookmark)owner; + member = bookmark.Member; + } IMethod method = member as IMethod; List list = new List(); if (method == null || !method.IsConstructor) { - cmd = new MenuCommand("${res:SharpDevelop.Refactoring.RenameCommand}", Rename); - cmd.Tag = member; - list.Add(cmd); + if (!IsReadOnly(member.DeclaringType)) { + cmd = new MenuCommand("${res:SharpDevelop.Refactoring.RenameCommand}", Rename); + cmd.Tag = member; + list.Add(cmd); + } } if (member.IsOverride) { cmd = new MenuCommand("${res:SharpDevelop.Refactoring.GoToBaseClassCommand}", GoToBase); @@ -70,12 +78,14 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands cmd.Tag = foundProperty; list.Add(cmd); } else { - cmd = new MenuCommand("${res:SharpDevelop.Refactoring.CreateGetter}", CreateGetter); - cmd.Tag = member; - list.Add(cmd); - cmd = new MenuCommand("${res:SharpDevelop.Refactoring.CreateProperty}", CreateProperty); - cmd.Tag = member; - list.Add(cmd); + if (!IsReadOnly(member.DeclaringType)) { + cmd = new MenuCommand("${res:SharpDevelop.Refactoring.CreateGetter}", CreateGetter); + cmd.Tag = member; + list.Add(cmd); + cmd = new MenuCommand("${res:SharpDevelop.Refactoring.CreateProperty}", CreateProperty); + cmd.Tag = member; + list.Add(cmd); + } } } diff --git a/src/Main/Base/Project/Src/TextEditor/Commands/ParserBookmarkMenuBuilderBase.cs b/src/Main/Base/Project/Src/TextEditor/Commands/ParserBookmarkMenuBuilderBase.cs index b6a998566e..1788d936a4 100644 --- a/src/Main/Base/Project/Src/TextEditor/Commands/ParserBookmarkMenuBuilderBase.cs +++ b/src/Main/Base/Project/Src/TextEditor/Commands/ParserBookmarkMenuBuilderBase.cs @@ -38,6 +38,11 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands return new ProvidedDocumentInformation(strategy, fileName, 0); } + protected bool IsReadOnly(IClass c) + { + return c.CompilationUnit.FileName == null; + } + protected TextEditorControl JumpToDefinition(IMember member) { IViewContent viewContent = null; diff --git a/src/Main/Base/Project/Src/TextEditor/Commands/ProjectCommands.cs b/src/Main/Base/Project/Src/TextEditor/Commands/ProjectCommands.cs index 0541b74811..5eeac55db3 100644 --- a/src/Main/Base/Project/Src/TextEditor/Commands/ProjectCommands.cs +++ b/src/Main/Base/Project/Src/TextEditor/Commands/ProjectCommands.cs @@ -26,10 +26,14 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands { public class ExportProjectToHtml : AbstractMenuCommand { + public override bool IsEnabled { + get { + return false; + } + } + public override void Run() { -// TODO: New Projectfile system. - // IProjectService projectService = (IProjectService)ICSharpCode.Core.ServiceManager.Services.GetService(typeof(IProjectService)); // if (projectService.CurrentSelectedProject != null) { // ExportProjectToHtmlDialog ephd = new ExportProjectToHtmlDialog(projectService.CurrentSelectedProject); 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 8b326bb488..701d0860ca 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs @@ -474,7 +474,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor bool IsClassMemberBookmark(Bookmark b) { - return b is Bookmarks.ClassMemberBookmark; + return b is Bookmarks.ClassMemberBookmark || b is Bookmarks.ClassBookmark; } #region ICSharpCode.SharpDevelop.Gui.IClipboardHandler interface implementation