Browse Source

Use SharpTreeNode.IsHidden for filtering.

pull/10/head
Daniel Grunwald 15 years ago
parent
commit
0e47eaf60c
  1. 16
      ILSpy/AssemblyList.cs
  2. 31
      ILSpy/TreeNodes/ILSpyTreeNode.cs

16
ILSpy/AssemblyList.cs

@ -143,7 +143,7 @@ namespace ICSharpCode.ILSpy @@ -143,7 +143,7 @@ namespace ICSharpCode.ILSpy
TypeTreeNode decl = FindTypeNode(def.DeclaringType);
if (decl != null) {
decl.EnsureLazyChildren();
return decl.VisibleChildren.OfType<TypeTreeNode>().FirstOrDefault(t => t.TypeDefinition == def);
return decl.Children.OfType<TypeTreeNode>().FirstOrDefault(t => t.TypeDefinition == def && !t.IsHidden);
}
} else {
TypeTreeNode node;
@ -168,13 +168,15 @@ namespace ICSharpCode.ILSpy @@ -168,13 +168,15 @@ namespace ICSharpCode.ILSpy
return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
typeNode.EnsureLazyChildren();
MethodTreeNode methodNode = typeNode.VisibleChildren.OfType<MethodTreeNode>().FirstOrDefault(m => m.MethodDefinition == def);
MethodTreeNode methodNode = typeNode.Children.OfType<MethodTreeNode>().FirstOrDefault(m => m.MethodDefinition == def && !m.IsHidden);
if (methodNode != null)
return methodNode;
foreach (var p in typeNode.VisibleChildren.OfType<ILSpyTreeNode>()) {
foreach (var p in typeNode.Children.OfType<ILSpyTreeNode>()) {
if (p.IsHidden)
continue;
// method might be a child or a property or events
p.EnsureLazyChildren();
methodNode = p.Children.OfType<MethodTreeNode>().FirstOrDefault(m => m.MethodDefinition == def);
methodNode = p.Children.OfType<MethodTreeNode>().FirstOrDefault(m => m.MethodDefinition == def && !m.IsHidden);
if (methodNode != null)
return methodNode;
}
@ -192,7 +194,7 @@ namespace ICSharpCode.ILSpy @@ -192,7 +194,7 @@ namespace ICSharpCode.ILSpy
return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
typeNode.EnsureLazyChildren();
return typeNode.VisibleChildren.OfType<FieldTreeNode>().FirstOrDefault(m => m.FieldDefinition == def);
return typeNode.Children.OfType<FieldTreeNode>().FirstOrDefault(m => m.FieldDefinition == def && !m.IsHidden);
}
/// <summary>
@ -205,7 +207,7 @@ namespace ICSharpCode.ILSpy @@ -205,7 +207,7 @@ namespace ICSharpCode.ILSpy
return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
typeNode.EnsureLazyChildren();
return typeNode.VisibleChildren.OfType<PropertyTreeNode>().FirstOrDefault(m => m.PropertyDefinition == def);
return typeNode.Children.OfType<PropertyTreeNode>().FirstOrDefault(m => m.PropertyDefinition == def && !m.IsHidden);
}
/// <summary>
@ -218,7 +220,7 @@ namespace ICSharpCode.ILSpy @@ -218,7 +220,7 @@ namespace ICSharpCode.ILSpy
return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
typeNode.EnsureLazyChildren();
return typeNode.VisibleChildren.OfType<EventTreeNode>().FirstOrDefault(m => m.EventDefinition == def);
return typeNode.Children.OfType<EventTreeNode>().FirstOrDefault(m => m.EventDefinition == def && !m.IsHidden);
}
#endregion

31
ILSpy/TreeNodes/ILSpyTreeNode.cs

@ -20,7 +20,7 @@ using System; @@ -20,7 +20,7 @@ using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using ICSharpCode.Decompiler;
using ICSharpCode.TreeView;
@ -47,10 +47,6 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -47,10 +47,6 @@ namespace ICSharpCode.ILSpy.TreeNodes
get { return filterSettings != null ? filterSettings.Language : Languages.AllLanguages[0]; }
}
public SharpTreeNodeCollection VisibleChildren {
get { return base.Children; }
}
public virtual FilterResult Filter(FilterSettings settings)
{
if (string.IsNullOrEmpty(settings.SearchTerm))
@ -87,7 +83,16 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -87,7 +83,16 @@ namespace ICSharpCode.ILSpy.TreeNodes
return false;
}
bool FilterChild(ILSpyTreeNode child)
protected override void OnChildrenChanged(NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null) {
foreach (ILSpyTreeNode node in e.NewItems)
ApplyFilterToChild(node);
}
base.OnChildrenChanged(e);
}
void ApplyFilterToChild(ILSpyTreeNode child)
{
FilterResult r;
if (this.FilterSettings == null)
@ -96,18 +101,22 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -96,18 +101,22 @@ namespace ICSharpCode.ILSpy.TreeNodes
r = child.Filter(this.FilterSettings);
switch (r) {
case FilterResult.Hidden:
return false;
child.IsHidden = true;
break;
case FilterResult.Match:
child.FilterSettings = StripSearchTerm(this.FilterSettings);
return true;
child.IsHidden = false;
break;
case FilterResult.Recurse:
child.FilterSettings = this.FilterSettings;
child.EnsureLazyChildren();
return child.VisibleChildren.Count > 0;
child.IsHidden = child.Children.All(c => c.IsHidden);
break;
case FilterResult.MatchAndRecurse:
child.FilterSettings = StripSearchTerm(this.FilterSettings);
child.EnsureLazyChildren();
return child.VisibleChildren.Count > 0;
child.IsHidden = child.Children.All(c => c.IsHidden);
break;
default:
throw new InvalidEnumArgumentException();
}
@ -127,6 +136,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -127,6 +136,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
protected virtual void OnFilterSettingsChanged()
{
RaisePropertyChanged("Text");
foreach (ILSpyTreeNode node in this.Children.OfType<ILSpyTreeNode>())
ApplyFilterToChild(node);
}
}

Loading…
Cancel
Save