public IVisibleNodeEnumerator GetDirectionalEnumerator(IViewNode startNode, MoveDirection direction) { Guard.NullArgument(startNode, "startNode"); JetListViewNode startLvNode = startNode as JetListViewNode; if (startLvNode != null) { return(new GroupedItemEnumerator(this, _nodeCollection.GetDirectionalEnumerator(startLvNode, direction), direction, (direction == MoveDirection.Down))); } GroupHeaderNode startHeaderNode = startNode as GroupHeaderNode; Debug.Assert(startHeaderNode.TopNode != null); if (startHeaderNode.TopNode == null) { return(new GroupedItemEnumerator(this, new EmptyEnumerator(), direction, false)); } GroupedItemEnumerator enumerator = new GroupedItemEnumerator(this, _nodeCollection.GetDirectionalEnumerator(startHeaderNode.TopNode, direction), direction, false); if (direction == MoveDirection.Up) { // move from first node of current group to last node of previous group enumerator.MoveNext(); } return(enumerator); }
public bool IncrementalSearchNext(string text, MoveDirection dir) { JetListViewNode curNode = _selection.ActiveNode; IEnumerator enumerator = (dir == MoveDirection.Down) ? _nodeCollection.EnumerateNodesForward(curNode) : _nodeCollection.EnumerateNodesBackward(curNode); enumerator.MoveNext(); if (SearchEnumerator(text, enumerator, null)) { return(true); } JetListViewNode startNode = (dir == MoveDirection.Down) ? _nodeCollection.Nodes [0] : _nodeCollection.LastNode; if (curNode == startNode) { return(false); } enumerator = _nodeCollection.GetDirectionalEnumerator(startNode, dir); return(SearchEnumerator(text, enumerator, curNode)); }