mirror of https://github.com/icsharpcode/ILSpy.git
Browse Source
Note: due to massive conflicts, this merge effectively reverts Christoph's ILSpy.AddIn commits from 2017-03-05.pull/863/head
29 changed files with 309 additions and 25 deletions
After Width: | Height: | Size: 469 B |
Before Width: | Height: | Size: 262 B After Width: | Height: | Size: 417 B |
Before Width: | Height: | Size: 315 B After Width: | Height: | Size: 347 B |
After Width: | Height: | Size: 710 B |
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
using System.Windows; |
||||
using Mono.Cecil; |
||||
|
||||
namespace ICSharpCode.ILSpy.TreeNodes |
||||
{ |
||||
[ExportContextMenuEntry(Header = "Copy FQ Name", Icon = "images/Copy.png", Order = 9999)] |
||||
public class CopyFullyQualifiedTypeNameContextMenuEntry : IContextMenuEntry |
||||
{ |
||||
public bool IsVisible(TextViewContext context) |
||||
{ |
||||
return GetTypeNodeFromContext(context) != null; |
||||
} |
||||
|
||||
public bool IsEnabled(TextViewContext context) => true; |
||||
|
||||
public void Execute(TextViewContext context) |
||||
{ |
||||
var typeDefinition = GetTypeNodeFromContext(context)?.TypeDefinition; |
||||
if (typeDefinition == null) return; |
||||
|
||||
Clipboard.SetText(GetFullyQualifiedName(typeDefinition)); |
||||
} |
||||
|
||||
private TypeTreeNode GetTypeNodeFromContext(TextViewContext context) |
||||
{ |
||||
return context.SelectedTreeNodes?.Length == 1 ? context.SelectedTreeNodes[0] as TypeTreeNode : null; |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Resolve full type name using .NET type representation for nested types.
|
||||
/// </summary>
|
||||
private string GetFullyQualifiedName(TypeDefinition typeDefinition) |
||||
{ |
||||
if (typeDefinition.IsNested) |
||||
{ |
||||
return $"{GetFullyQualifiedName(typeDefinition.DeclaringType)}+{typeDefinition.Name}"; |
||||
} |
||||
|
||||
return $"{typeDefinition.Namespace}.{typeDefinition.Name}"; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Linq; |
||||
using System.Text; |
||||
using System.Windows.Automation; |
||||
using System.Windows.Automation.Peers; |
||||
|
||||
namespace ICSharpCode.TreeView |
||||
{ |
||||
class SharpTreeViewAutomationPeer : FrameworkElementAutomationPeer |
||||
{ |
||||
internal SharpTreeViewAutomationPeer(SharpTreeView owner ): base(owner) |
||||
{ |
||||
} |
||||
//private SharpTreeView SharpTreeView { get { return (SharpTreeView)base.Owner; } }
|
||||
protected override AutomationControlType GetAutomationControlTypeCore() |
||||
{ |
||||
return AutomationControlType.Tree; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,77 @@
@@ -0,0 +1,77 @@
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.ComponentModel; |
||||
using System.Linq; |
||||
using System.Text; |
||||
using System.Windows; |
||||
using System.Windows.Automation; |
||||
using System.Windows.Automation.Peers; |
||||
using System.Windows.Automation.Provider; |
||||
|
||||
namespace ICSharpCode.TreeView |
||||
{ |
||||
class SharpTreeViewItemAutomationPeer : FrameworkElementAutomationPeer, IExpandCollapseProvider |
||||
{ |
||||
internal SharpTreeViewItemAutomationPeer(SharpTreeViewItem owner) |
||||
: base(owner) |
||||
{ |
||||
SharpTreeViewItem.DataContextChanged += OnDataContextChanged; |
||||
SharpTreeNode node = SharpTreeViewItem.DataContext as SharpTreeNode; |
||||
if (node == null) return; |
||||
|
||||
node.PropertyChanged += OnPropertyChanged; |
||||
} |
||||
private SharpTreeViewItem SharpTreeViewItem { get { return (SharpTreeViewItem)base.Owner; } } |
||||
protected override AutomationControlType GetAutomationControlTypeCore() |
||||
{ |
||||
return AutomationControlType.TreeItem; |
||||
} |
||||
|
||||
public override object GetPattern(PatternInterface patternInterface) |
||||
{ |
||||
if (patternInterface == PatternInterface.ExpandCollapse) |
||||
return this; |
||||
return base.GetPattern(patternInterface); |
||||
} |
||||
|
||||
public void Collapse() |
||||
{ |
||||
} |
||||
|
||||
public void Expand() |
||||
{ |
||||
} |
||||
|
||||
public ExpandCollapseState ExpandCollapseState { |
||||
get { |
||||
SharpTreeNode node = SharpTreeViewItem.DataContext as SharpTreeNode; |
||||
if (node == null || !node.ShowExpander) |
||||
return ExpandCollapseState.LeafNode; |
||||
return node.IsExpanded ? ExpandCollapseState.Expanded : ExpandCollapseState.Collapsed; |
||||
} |
||||
} |
||||
|
||||
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) |
||||
{ |
||||
if (e.PropertyName != "IsExpanded") return; |
||||
SharpTreeNode node = sender as SharpTreeNode; |
||||
if (node == null || node.Children.Count == 0) return; |
||||
bool newValue = node.IsExpanded; |
||||
bool oldValue = !newValue; |
||||
RaisePropertyChangedEvent( |
||||
ExpandCollapsePatternIdentifiers.ExpandCollapseStateProperty, |
||||
oldValue ? ExpandCollapseState.Expanded : ExpandCollapseState.Collapsed, |
||||
newValue ? ExpandCollapseState.Expanded : ExpandCollapseState.Collapsed); |
||||
} |
||||
|
||||
private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e) |
||||
{ |
||||
SharpTreeNode oldNode = e.OldValue as SharpTreeNode; |
||||
if (oldNode != null) |
||||
oldNode.PropertyChanged -= OnPropertyChanged; |
||||
SharpTreeNode newNode = e.NewValue as SharpTreeNode; |
||||
if (newNode != null) |
||||
newNode.PropertyChanged += OnPropertyChanged; |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue