Browse Source

Right click on class and member names (and method invocations) in the text editor now shows the "go to definition" command and the class browser context menu of that item.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@433 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
34e50f3fb2
  1. 14
      src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs
  2. 16
      src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs
  3. 52
      src/Main/Base/Project/Src/Services/RefactoringService/RefactoringMenuBuilder.cs

14
src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs

@ -69,6 +69,20 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} }
public static MemberNode Create(IMember member)
{
if (member is IMethod)
return new MemberNode(member as IMethod);
else if (member is IProperty)
return new MemberNode(member as IProperty);
else if (member is IField)
return new MemberNode(member as IField);
else if (member is IEvent)
return new MemberNode(member as IEvent);
else
throw new ArgumentException("unknown member type");
}
public MemberNode(IMethod method) public MemberNode(IMethod method)
{ {
InitMemberNode(method); InitMemberNode(method);

16
src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs

@ -63,6 +63,22 @@ namespace ICSharpCode.Core
return privateModifierOffset; return privateModifierOffset;
} }
public static int GetIcon(IMember member)
{
if (member is IMethod)
return GetIcon(member as IMethod);
else if (member is IIndexer)
return GetIcon(member as IIndexer);
else if (member is IProperty)
return GetIcon(member as IProperty);
else if (member is IField)
return GetIcon(member as IField);
else if (member is IEvent)
return GetIcon(member as IEvent);
else
throw new ArgumentException("unknown member type");
}
public static int GetIcon(IMethod method) public static int GetIcon(IMethod method)
{ {
return MethodIndex + GetModifierOffset(method.Modifiers); return MethodIndex + GetModifierOffset(method.Modifiers);

52
src/Main/Base/Project/Src/Services/RefactoringService/RefactoringMenuBuilder.cs

@ -13,6 +13,7 @@ using ICSharpCode.Core;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Bookmarks; using ICSharpCode.SharpDevelop.Bookmarks;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.TextEditor; using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document; using ICSharpCode.TextEditor.Document;
@ -23,12 +24,6 @@ namespace ICSharpCode.SharpDevelop.Refactoring
/// </summary> /// </summary>
public class RefactoringMenuBuilder : ISubmenuBuilder public class RefactoringMenuBuilder : ISubmenuBuilder
{ {
/*
<MenuItem id = "GoToDefinition"
label = "${res:ICSharpCode.NAntAddIn.GotoDefinitionMenuLabel}"
shortcut = "Control|Enter"
class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.GoToDefinition" />
*/
public ToolStripItem[] BuildSubmenu(Codon codon, object owner) public ToolStripItem[] BuildSubmenu(Codon codon, object owner)
{ {
TextEditorControl textEditorControl = (TextEditorControl)owner; TextEditorControl textEditorControl = (TextEditorControl)owner;
@ -38,6 +33,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring
TextArea textArea = textEditorControl.ActiveTextAreaControl.TextArea; TextArea textArea = textEditorControl.ActiveTextAreaControl.TextArea;
IDocument doc = textArea.Document; IDocument doc = textArea.Document;
int caretLine = textArea.Caret.Line; int caretLine = textArea.Caret.Line;
bool lineHasDefinitions = false;
// Include definitions (use the bookmarks which should already be present) // Include definitions (use the bookmarks which should already be present)
foreach (Bookmark mark in doc.BookmarkManager.Marks) { foreach (Bookmark mark in doc.BookmarkManager.Marks) {
if (mark != null && mark.LineNumber == caretLine) { if (mark != null && mark.LineNumber == caretLine) {
@ -56,6 +54,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
name = cb.Class.Name; name = cb.Class.Name;
} }
if (path != null) { if (path != null) {
lineHasDefinitions = true;
ToolStripMenuItem item = new ToolStripMenuItem(name, ClassBrowserIconService.ImageList.Images[iconIndex]); ToolStripMenuItem item = new ToolStripMenuItem(name, ClassBrowserIconService.ImageList.Images[iconIndex]);
MenuService.AddItemsToMenu(item.DropDown.Items, mark, path); MenuService.AddItemsToMenu(item.DropDown.Items, mark, path);
resultItems.Add(item); resultItems.Add(item);
@ -63,12 +62,15 @@ namespace ICSharpCode.SharpDevelop.Refactoring
} }
} }
/* if (!lineHasDefinitions) {
ResolveResult rr = ResolveAtCaret(textEditorControl, textArea); ResolveResult rr = ResolveAtCaret(textEditorControl, textArea);
if (rr != null) { MemberResolveResult mrr = rr as MemberResolveResult;
//XML.TextAreaContextMenu.Refactoring if (mrr != null) {
resultItems.Add(MakeItem(mrr.ResolvedMember));
}
} }
*/
// TODO XML.TextAreaContextMenu.Refactoring
if (resultItems.Count == 0) { if (resultItems.Count == 0) {
return new ToolStripItem[0]; return new ToolStripItem[0];
@ -78,6 +80,34 @@ namespace ICSharpCode.SharpDevelop.Refactoring
} }
} }
ToolStripMenuItem MakeItem(IMember member)
{
return MakeItem(MemberNode.Create(member), member.DeclaringType.CompilationUnit, member.Region);
}
ToolStripMenuItem MakeItem(IClass c)
{
return MakeItem(new ClassNode(c.ProjectContent.Project, c), c.CompilationUnit, c.Region);
}
ToolStripMenuItem MakeItem(ExtTreeNode classBrowserTreeNode, ICompilationUnit cu, IRegion region)
{
ToolStripMenuItem item = new ToolStripMenuItem(classBrowserTreeNode.Text, ClassBrowserIconService.ImageList.Images[classBrowserTreeNode.ImageIndex]);
if (cu.FileName != null && region != null) {
ToolStripMenuItem gotoDefinitionItem = new ToolStripMenuItem(StringParser.Parse("${res:ICSharpCode.NAntAddIn.GotoDefinitionMenuLabel}"),
ClassBrowserIconService.ImageList.Images[ClassBrowserIconService.GotoArrowIndex]);
gotoDefinitionItem.ShortcutKeys = Keys.Control | Keys.Enter;
gotoDefinitionItem.Click += delegate {
FileService.JumpToFilePosition(cu.FileName, region.BeginLine - 1, region.BeginColumn - 1);
};
item.DropDown.Items.Add(gotoDefinitionItem);
item.DropDown.Items.Add(new ToolStripSeparator());
}
MenuService.AddItemsToMenu(item.DropDown.Items, classBrowserTreeNode, classBrowserTreeNode.ContextmenuAddinTreePath);
return item;
}
ResolveResult ResolveAtCaret(TextEditorControl textEditorControl, TextArea textArea) ResolveResult ResolveAtCaret(TextEditorControl textEditorControl, TextArea textArea)
{ {
IExpressionFinder expressionFinder = ParserService.GetExpressionFinder(textEditorControl.FileName); IExpressionFinder expressionFinder = ParserService.GetExpressionFinder(textEditorControl.FileName);

Loading…
Cancel
Save