|
|
|
@ -15,6 +15,7 @@ using System.Linq;
@@ -15,6 +15,7 @@ using System.Linq;
|
|
|
|
|
using System.Threading; |
|
|
|
|
using System.Windows; |
|
|
|
|
using System.Windows.Controls; |
|
|
|
|
using System.Windows.Controls.Primitives; |
|
|
|
|
using System.Windows.Input; |
|
|
|
|
using ICSharpCode.Core; |
|
|
|
|
using ICSharpCode.Core.Presentation; |
|
|
|
@ -177,8 +178,8 @@ namespace ICSharpCode.SharpDevelop.Refactoring
@@ -177,8 +178,8 @@ namespace ICSharpCode.SharpDevelop.Refactoring
|
|
|
|
|
if (context.ResolveResult is MemberResolveResult) { |
|
|
|
|
IMember member = ((MemberResolveResult)context.ResolveResult).ResolvedMember as IMember; |
|
|
|
|
if (member != null && member.IsVirtual || member.IsAbstract || (member.IsOverride && !member.DeclaringType.IsSealed) |
|
|
|
|
// Interface members have IsVirtual == IsAbstract == false. These properties are based on modifiers only.
|
|
|
|
|
|| (member.DeclaringType != null && member.DeclaringType.ClassType == ClassType.Interface)) { |
|
|
|
|
// Interface members have IsVirtual == IsAbstract == false. These properties are based on modifiers only.
|
|
|
|
|
|| (member.DeclaringType != null && member.DeclaringType.ClassType == ClassType.Interface)) { |
|
|
|
|
contextItems.AddIfNotNull(MakeFindOverridesItem(member, context)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -192,11 +193,8 @@ namespace ICSharpCode.SharpDevelop.Refactoring
@@ -192,11 +193,8 @@ namespace ICSharpCode.SharpDevelop.Refactoring
|
|
|
|
|
var item = new MenuItem { Header = MenuService.ConvertLabel(StringParser.Parse("${res:SharpDevelop.Refactoring.FindDerivedClassesCommand}")) }; |
|
|
|
|
item.Icon = ClassBrowserIconService.Class.CreateImage(); |
|
|
|
|
item.InputGestureText = new KeyGesture(Key.F11).GetDisplayStringForCulture(Thread.CurrentThread.CurrentUICulture); |
|
|
|
|
item.Click += delegate { |
|
|
|
|
var derivedClassesPopup = ContextActionsHelper.MakePopupWithDerivedClasses(baseClass); |
|
|
|
|
// position popup to caret - how?
|
|
|
|
|
derivedClassesPopup.Open(); |
|
|
|
|
derivedClassesPopup.Focus(); |
|
|
|
|
item.Click += delegate { |
|
|
|
|
OpenPopup(ContextActionsHelper.MakePopupWithDerivedClasses(baseClass), context); |
|
|
|
|
}; |
|
|
|
|
return item; |
|
|
|
|
} |
|
|
|
@ -209,10 +207,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
@@ -209,10 +207,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
|
|
|
|
|
item.Icon = ClassBrowserIconService.Interface.CreateImage(); |
|
|
|
|
item.InputGestureText = new KeyGesture(Key.F10).GetDisplayStringForCulture(Thread.CurrentThread.CurrentUICulture); |
|
|
|
|
item.Click += delegate { |
|
|
|
|
var baseClassesPopup = ContextActionsHelper.MakePopupWithBaseClasses(@class); |
|
|
|
|
// position popup to caret - how?
|
|
|
|
|
baseClassesPopup.Open(); |
|
|
|
|
baseClassesPopup.Focus(); |
|
|
|
|
OpenPopup(ContextActionsHelper.MakePopupWithBaseClasses(@class), context); |
|
|
|
|
}; |
|
|
|
|
return item; |
|
|
|
|
} |
|
|
|
@ -225,14 +220,36 @@ namespace ICSharpCode.SharpDevelop.Refactoring
@@ -225,14 +220,36 @@ namespace ICSharpCode.SharpDevelop.Refactoring
|
|
|
|
|
item.Icon = ClassBrowserIconService.Method.CreateImage(); |
|
|
|
|
item.InputGestureText = new KeyGesture(Key.F11).GetDisplayStringForCulture(Thread.CurrentThread.CurrentUICulture); |
|
|
|
|
item.Click += delegate { |
|
|
|
|
var overridesPopup = ContextActionsHelper.MakePopupWithOverrides(member); |
|
|
|
|
// position popup to caret - how?
|
|
|
|
|
overridesPopup.Open(); |
|
|
|
|
overridesPopup.Focus(); |
|
|
|
|
OpenPopup(ContextActionsHelper.MakePopupWithOverrides(member), context); |
|
|
|
|
}; |
|
|
|
|
return item; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void OpenPopup(ContextActionsPopup popup, RefactoringMenuContext context) |
|
|
|
|
{ |
|
|
|
|
var editorUIService = context.Editor.GetService(typeof(IEditorUIService)) as IEditorUIService; |
|
|
|
|
if (editorUIService != null) { |
|
|
|
|
int line = context.Editor.Caret.Line; |
|
|
|
|
int column = context.Editor.Caret.Column; |
|
|
|
|
int offset = context.Editor.Document.PositionToOffset(line, column); |
|
|
|
|
int wordStart = context.Editor.Document.FindPrevWordStart(offset); |
|
|
|
|
if (wordStart != -1) { |
|
|
|
|
var wordStartLocation = context.Editor.Document.OffsetToPosition(wordStart); |
|
|
|
|
line = wordStartLocation.Line; |
|
|
|
|
column = wordStartLocation.Column; |
|
|
|
|
} |
|
|
|
|
var caretScreenPos = editorUIService.GetScreenPosition(line, column); |
|
|
|
|
popup.Placement = PlacementMode.Absolute; |
|
|
|
|
popup.HorizontalOffset = caretScreenPos.X; |
|
|
|
|
popup.VerticalOffset = caretScreenPos.Y; |
|
|
|
|
} else { |
|
|
|
|
popup.HorizontalOffset = 200; |
|
|
|
|
popup.VerticalOffset = 200; |
|
|
|
|
} |
|
|
|
|
popup.Open(); |
|
|
|
|
popup.Focus(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
MenuItem MakeItemForResolveError(UnknownIdentifierResolveResult rr, ExpressionContext context, ITextEditor textArea) |
|
|
|
|