private IResource SearchEnumerator(bool forward, JetListViewNode node, JetListViewNode stopNode, LocateMatchCallback callback, bool skipFirst) { IEnumerator enumerator = forward? EnumerateItemsForward(node) : EnumerateItemsBackward(node); if (skipFirst) { enumerator.MoveNext(); } while (enumerator.MoveNext()) { JetListViewNode childNode = (JetListViewNode)enumerator.Current; if (childNode == stopNode) { return(null); } IResource childResource = (IResource)childNode.Data; if (callback(childResource)) { return(childResource); } } return(null); }
private IResource LocateNextResourceInDirection(bool isForward, IResource start, LocateMatchCallback callback, bool skipFirst, bool searchBackAlso) { IResource result = null; JetListViewNode node = NodeFromItem(start); if (node != null) { lock (JetListView.NodeCollection) { result = SearchEnumerator(isForward, node, null, callback, skipFirst); if (result == null && searchBackAlso) { result = SearchEnumerator(isForward, null, node, callback, false); } } } return(result); }
public IResource LocatePrevResource(IResource startResource, LocateMatchCallback callback, bool skipFirst, bool searchBackAlso) { return(LocateNextResourceInDirection(false, startResource, callback, skipFirst, searchBackAlso)); }