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. 32
      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 @@ -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)
{
InitMemberNode(method);

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

@ -63,6 +63,22 @@ namespace ICSharpCode.Core @@ -63,6 +63,22 @@ namespace ICSharpCode.Core
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)
{
return MethodIndex + GetModifierOffset(method.Modifiers);
@ -117,9 +133,9 @@ namespace ICSharpCode.Core @@ -117,9 +133,9 @@ namespace ICSharpCode.Core
return MethodIndex + internalModifierOffset;
}
if (methodinfo.IsPrivate) {
return MethodIndex + privateModifierOffset;
return MethodIndex + privateModifierOffset;
}
if (!(methodinfo.IsPrivate || methodinfo.IsPublic)) {
if (!(methodinfo.IsPrivate || methodinfo.IsPublic)) {
return MethodIndex + protectedModifierOffset;
}
@ -157,7 +173,7 @@ namespace ICSharpCode.Core @@ -157,7 +173,7 @@ namespace ICSharpCode.Core
return FieldIndex;
}
public static int GetIcon(EventInfo eventinfo)
{
if (eventinfo.GetAddMethod(true) != null) {
@ -185,11 +201,11 @@ namespace ICSharpCode.Core @@ -185,11 +201,11 @@ namespace ICSharpCode.Core
if (type.IsNestedPrivate) {
return BASE + 3;
}
}
if (type.IsNotPublic || type.IsNestedAssembly) {
return BASE + 1;
}
}
if (type.IsNestedFamily) {
return BASE + 2;
@ -228,17 +244,17 @@ namespace ICSharpCode.Core @@ -228,17 +244,17 @@ namespace ICSharpCode.Core
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.ProtectedClass"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.PrivateClass"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Struct"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Struct"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.InternalStruct"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.ProtectedStruct"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.PrivateStruct"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Interface"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Interface"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.InternalInterface"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.ProtectedInterface"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.PrivateInterface"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Enum"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Enum"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.InternalEnum"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.ProtectedEnum"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.PrivateEnum"));

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

@ -13,6 +13,7 @@ using ICSharpCode.Core; @@ -13,6 +13,7 @@ using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Bookmarks;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document;
@ -23,12 +24,6 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -23,12 +24,6 @@ namespace ICSharpCode.SharpDevelop.Refactoring
/// </summary>
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)
{
TextEditorControl textEditorControl = (TextEditorControl)owner;
@ -38,6 +33,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -38,6 +33,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring
TextArea textArea = textEditorControl.ActiveTextAreaControl.TextArea;
IDocument doc = textArea.Document;
int caretLine = textArea.Caret.Line;
bool lineHasDefinitions = false;
// Include definitions (use the bookmarks which should already be present)
foreach (Bookmark mark in doc.BookmarkManager.Marks) {
if (mark != null && mark.LineNumber == caretLine) {
@ -56,6 +54,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -56,6 +54,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
name = cb.Class.Name;
}
if (path != null) {
lineHasDefinitions = true;
ToolStripMenuItem item = new ToolStripMenuItem(name, ClassBrowserIconService.ImageList.Images[iconIndex]);
MenuService.AddItemsToMenu(item.DropDown.Items, mark, path);
resultItems.Add(item);
@ -63,12 +62,15 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -63,12 +62,15 @@ namespace ICSharpCode.SharpDevelop.Refactoring
}
}
/*
ResolveResult rr = ResolveAtCaret(textEditorControl, textArea);
if (rr != null) {
//XML.TextAreaContextMenu.Refactoring
if (!lineHasDefinitions) {
ResolveResult rr = ResolveAtCaret(textEditorControl, textArea);
MemberResolveResult mrr = rr as MemberResolveResult;
if (mrr != null) {
resultItems.Add(MakeItem(mrr.ResolvedMember));
}
}
*/
// TODO XML.TextAreaContextMenu.Refactoring
if (resultItems.Count == 0) {
return new ToolStripItem[0];
@ -78,6 +80,34 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -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)
{
IExpressionFinder expressionFinder = ParserService.GetExpressionFinder(textEditorControl.FileName);

Loading…
Cancel
Save