Browse Source

Simplified symbol context menu, now the menu entries are included directly inside of EntityContextMenu.

pull/59/merge
Andreas Weizel 12 years ago
parent
commit
e8bc3e5a91
  1. 12
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin
  2. 1
      src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyAddIn.addin
  3. 33
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  4. 39
      src/Main/Base/Project/Src/Editor/Commands/DeclaringTypeSubMenuBuilder.cs
  5. 43
      src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs

12
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin

@ -157,9 +157,15 @@ @@ -157,9 +157,15 @@
class = "ICSharpCode.AvalonEdit.AddIn.ContextActions.FindBaseClasses"/>
</Path>
<Path name = "/SharpDevelop/ViewContent/TextEditor/ContextMenu/TypeContextMenu">
<Include id="FindDerivedOrOverridesClasses" item="/SharpDevelop/Workbench/MainMenu/Search/FindDerivedOrOverridesClasses" />
<Include id="FindBaseClasses" item="/SharpDevelop/Workbench/MainMenu/Search/FindBaseClasses" />
<Path name = "/SharpDevelop/EntityContextMenu">
<Condition name="SymbolTypeAtCaret" type="type" action="Exclude">
<Include id="FindDerivedOrOverridesClasses"
insertafter="FindReferences"
item="/SharpDevelop/Workbench/MainMenu/Search/FindDerivedOrOverridesClasses" />
<Include id="FindBaseClasses"
insertafter="FindDerivedOrOverridesClasses"
item="/SharpDevelop/Workbench/MainMenu/Search/FindBaseClasses" />
</Condition>
</Path>
<Path name = "/SharpDevelop/Dialogs/OptionsDialog/CodingOptions">

1
src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyAddIn.addin

@ -22,6 +22,7 @@ @@ -22,6 +22,7 @@
<!-- Text editor context menu: Launch ILSpy command -->
<Path name="/SharpDevelop/EntityContextMenu">
<MenuItem id="ILSpySeparator" type="Separator" />
<MenuItem id="ILSpy" icon="ILSpy" type="Item" label="${res:ILSpyAddIn.OpenILSpyCommand}" class="ICSharpCode.ILSpyAddIn.OpenInILSpyCommand"/>
</Path>
</AddIn>

33
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -1994,9 +1994,13 @@ @@ -1994,9 +1994,13 @@
<!-- TEXT EDITOR -->
<Path name = "/SharpDevelop/EntityContextMenu">
<Include id="GotoDefinition" item="/SharpDevelop/Workbench/MainMenu/Search/GotoDefinition" />
<Include id="Rename" item="/SharpDevelop/Workbench/MainMenu/Search/Rename" />
<MenuItem id = "FindReferences"
label = "${res:SharpDevelop.Refactoring.FindReferencesCommand}"
class = "ICSharpCode.SharpDevelop.Editor.Commands.FindReferencesCommand"/>
<MenuItem id="DeclaringTypeContextMenu" type="Builder" class="ICSharpCode.SharpDevelop.Editor.Commands.DeclaringTypeSubMenuBuilder" />
</Path>
<!--
@ -2025,38 +2029,11 @@ @@ -2025,38 +2029,11 @@
<Include id = "Common" path = "/SharpDevelop/ViewContent/DefaultTextEditor/Refactoring/Common"/>
</Path>-->
<Path name = "/SharpDevelop/ViewContent/TextEditor/ContextMenu/MemberContextMenu">
<Include id="GotoDefinition" item="/SharpDevelop/Workbench/MainMenu/Search/GotoDefinition" />
<Include id="Rename" item="/SharpDevelop/Workbench/MainMenu/Search/Rename" />
</Path>
<Path name = "/SharpDevelop/ViewContent/TextEditor/ContextMenu/TypeContextMenu">
<Include id="GotoDefinition" item="/SharpDevelop/Workbench/MainMenu/Search/GotoDefinition" />
<Include id="Rename" item="/SharpDevelop/Workbench/MainMenu/Search/Rename" />
</Path>
<Path name = "/SharpDevelop/ViewContent/TextEditor/ContextMenu/LocalContextMenu">
<Include id="GotoDefinition" item="/SharpDevelop/Workbench/MainMenu/Search/GotoDefinition" />
<Include id="Rename" item="/SharpDevelop/Workbench/MainMenu/Search/Rename" />
</Path>
<Path name = "/SharpDevelop/ViewContent/TextEditor/ContextMenu">
<Condition name="SymbolTypeAtCaret" type="member" action="Exclude">
<Include id="MemberContextMenu" path="/SharpDevelop/ViewContent/TextEditor/ContextMenu/MemberContextMenu" />
<Condition name="SymbolTypeAtCaret" type="member,type,local" action="Exclude">
<Include id="EntityContextMenu" path="/SharpDevelop/EntityContextMenu" />
<MenuItem id="Separator1" type="Separator" />
</Condition>
<Condition name="SymbolTypeAtCaret" type="type" action="Exclude">
<Include id="TypeContextMenu" path="/SharpDevelop/ViewContent/TextEditor/ContextMenu/TypeContextMenu" />
<Include id="EntityContextMenu" path="/SharpDevelop/EntityContextMenu" />
<MenuItem id="Separator1" type="Separator" />
</Condition>
<Condition name="SymbolTypeAtCaret" type="local" action="Exclude">
<Include id="LocalContextMenu" path="/SharpDevelop/ViewContent/TextEditor/ContextMenu/LocalContextMenu" />
<MenuItem id="Separator1" type="Separator" />
</Condition>
<MenuItem id="DeclaringTypeContextMenu" type="Builder" class="ICSharpCode.SharpDevelop.Editor.Commands.DeclaringTypeSubMenuBuilder" />
<Include id = "Cut" item = "/SharpDevelop/Workbench/MainMenu/Edit/Cut"/>
<Include id = "Copy" item = "/SharpDevelop/Workbench/MainMenu/Edit/Copy"/>

39
src/Main/Base/Project/Src/Editor/Commands/DeclaringTypeSubMenuBuilder.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Linq;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
@ -9,6 +10,7 @@ using ICSharpCode.Core; @@ -9,6 +10,7 @@ using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.Editor.Commands
{
@ -19,12 +21,28 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -19,12 +21,28 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
{
public IEnumerable<object> BuildItems(Codon codon, object parameter)
{
MemberResolveResult resolveResult = GetResolveResult() as MemberResolveResult;
if (resolveResult == null) {
return null;
IMember member = null;
if (parameter is IMemberModel) {
// Menu is directly created from a member model (e.g. bookmarks etc.)
member = ((IMemberModel) parameter).Resolve();
} else if (parameter is ResolveResult) {
MemberResolveResult resolveResult = parameter as MemberResolveResult;
if (resolveResult != null) {
member = resolveResult.Member;
}
} else if (parameter is ITextEditor) {
// Shown in context menu of a text editor
MemberResolveResult resolveResult = GetResolveResult((ITextEditor) parameter) as MemberResolveResult;
if (resolveResult != null) {
member = resolveResult.Member;
}
}
IMember member = resolveResult.Member;
if (member == null) {
return null;
}
IType declaringType = member.DeclaringTypeDefinition;
if (declaringType == null) {
return null;
@ -33,31 +51,28 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -33,31 +51,28 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
var items = new List<object>();
var declaringTypeItem = new MenuItem() {
Header = "Declaring type: " + declaringType.Name,
Icon = ClassBrowserIconService.GetIcon(declaringType).ImageSource
Icon = new Image() { Source = ClassBrowserIconService.GetIcon(declaringType).ImageSource }
};
var subItems = MenuService.CreateMenuItems(
null, new TypeResolveResult(declaringType), "/SharpDevelop/ViewContent/TextEditor/ContextMenu/TypeContextMenu");
null, new TypeResolveResult(declaringType), "/SharpDevelop/EntityContextMenu");
if (subItems != null) {
foreach (var item in subItems) {
declaringTypeItem.Items.Add(item);
}
}
items.Add(declaringTypeItem);
items.Add(new Separator());
return items;
}
static ResolveResult GetResolveResult()
static ResolveResult GetResolveResult(ITextEditor currentEditor)
{
ITextEditor currentEditor = SD.GetActiveViewContentService<ITextEditor>();
if (currentEditor != null) {
return SD.ParserService.Resolve(currentEditor, currentEditor.Caret.Location);
} else {
return ErrorResolveResult.UnknownError;
}
return ErrorResolveResult.UnknownError;
}
}
}

43
src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs

@ -4,7 +4,10 @@ @@ -4,7 +4,10 @@
using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.Commands;
namespace ICSharpCode.SharpDevelop.Internal.ConditionEvaluators
{
@ -15,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Internal.ConditionEvaluators @@ -15,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Internal.ConditionEvaluators
{
public bool IsValid(object parameter, Condition condition)
{
ResolveResult resolveResult = GetResolveResult();
ResolveResult resolveResult = GetResolveResult(parameter);
if ((resolveResult != null) && !resolveResult.IsError) {
// Check type of symbol
string typesList = condition.Properties["type"];
@ -53,14 +56,46 @@ namespace ICSharpCode.SharpDevelop.Internal.ConditionEvaluators @@ -53,14 +56,46 @@ namespace ICSharpCode.SharpDevelop.Internal.ConditionEvaluators
return false;
}
static ResolveResult GetResolveResult()
static ResolveResult GetResolveResult(object parameter)
{
if (parameter == null)
return GetResolveResultFromCurrentEditor();
if (parameter is ITextEditor)
return GetResolveResultFromCurrentEditor((ITextEditor) parameter);
if (parameter is ResolveResult)
return (ResolveResult) parameter;
if (parameter is IEntityModel)
return GetResolveResultFromEntityModel((IEntityModel) parameter);
return null;
}
static ResolveResult GetResolveResultFromEntityModel(IEntityModel entityModel)
{
IEntity entity = entityModel.Resolve();
if (entity is IMember)
return new MemberResolveResult(null, (IMember) entity);
if (entity is ITypeDefinition)
return new TypeResolveResult((ITypeDefinition) entity);
return ErrorResolveResult.UnknownError;
}
static ResolveResult GetResolveResultFromCurrentEditor()
{
ITextEditor currentEditor = SD.GetActiveViewContentService<ITextEditor>();
return GetResolveResultFromCurrentEditor(currentEditor);
}
static ResolveResult GetResolveResultFromCurrentEditor(ITextEditor currentEditor)
{
if (currentEditor != null) {
return SD.ParserService.Resolve(currentEditor, currentEditor.Caret.Location);
} else {
return ErrorResolveResult.UnknownError;
}
return ErrorResolveResult.UnknownError;
}
}
}

Loading…
Cancel
Save