|
using System.Collections.Generic;
using System.Linq;
namespace System.Windows.Controls.WpfPropertyGrid
{
/// <summary>
/// Specifies a default property filter.
/// </summary>
public class PropertyFilter
{
private List<PropertyFilterPredicate> _predicates;
/// <summary>
/// Initializes a new instance of the <see cref="PropertyFilter"/> class.
/// </summary>
/// <param name="predicates">The predicates.</param>
public PropertyFilter(IEnumerable<PropertyFilterPredicate> predicates)
{
_predicates = new List<PropertyFilterPredicate>();
SetPredicates(predicates);
}
/// <summary>
/// Initializes a new instance of the <see cref="PropertyFilter"/> class.
/// </summary>
/// <param name="filterText">The filter text.</param>
public PropertyFilter(string filterText)
{
_predicates = new List<PropertyFilterPredicate>();
SetPredicates(filterText);
}
/// <summary>
/// Matches the specified target.
/// </summary>
/// <param name="target">The target.</param>
/// <returns><c>true</c> if target matches filter; otherwise, <c>false</c>.</returns>
public bool Match(IPropertyFilterTarget target)
{
if (target == null) throw new ArgumentNullException("target");
if (IsEmpty) return true;
for (int i = 0; i < _predicates.Count; i++)
if (target.MatchesPredicate(_predicates[i]))
return true;
return false;
}
private void SetPredicates(IEnumerable<PropertyFilterPredicate> predicates)
{
if (predicates == null) return;
foreach (var predicate in predicates.Where(predicate => predicate != null))
_predicates.Add(predicate);
}
private void SetPredicates(string filterText)
{
if (!string.IsNullOrEmpty(filterText))
{
string[] strArray = filterText.Split(new[] { ' ' });
for (int i = 0; i < strArray.Length; i++)
if (!string.IsNullOrEmpty(strArray[i]))
_predicates.Add(new PropertyFilterPredicate(strArray[i]));
}
}
/// <summary>
/// Gets a value indicating whether this instance is empty.
/// </summary>
/// <value><c>true</c> if this instance is empty; otherwise, <c>false</c>.</value>
public bool IsEmpty
{
get
{
return (_predicates.Count == 0);
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Chief Architect - Sea Surveillance AS.
Specializing in integrated operations and high performance computing solutions.
I’ve been fooling around with computers since the early eighties, I’ve even done work on CP/M and MP/M.
Wrote my first “real” program on a BBC micro model B based on a series in a magazine at that time. It was fun and I got hooked on this thing called programming ...
A few Highlights:
- High performance application server development
- Model Driven Architecture and Code generators
- Real-Time Distributed Solutions
- C, C++, C#, Java, TSQL, PL/SQL, Delphi, ActionScript, Perl, Rexx
- Microsoft SQL Server, Oracle RDBMS, IBM DB2, PostGreSQL
- AMQP, Apache qpid, RabbitMQ, Microsoft Message Queuing, IBM WebSphereMQ, Oracle TuxidoMQ
- Oracle WebLogic, IBM WebSphere
- Corba, COM, DCE, WCF
- AspenTech InfoPlus.21(IP21), OsiSoft PI
More information about what I do for a living can be found at:
harlinn.com or
LinkedIn
You can contact me at
espen@harlinn.no