public bool MoveToFollowing() { bool retval = false; GeneratorNodeHelper nodeHelper = new GeneratorNodeHelper(m_currentNode, m_index, m_sourceDataIndex); while (!retval) { retval = nodeHelper.MoveToNext(); if (!retval) { if (!nodeHelper.MoveToParent()) { //cannot move to parent and could not move to next, this is the end of the chain. break; } } } if (retval) { m_currentNode = nodeHelper.CurrentNode; m_index = nodeHelper.Index; m_sourceDataIndex = nodeHelper.SourceDataIndex; } return(retval); }
public bool ReverseCalculateIndex() { // index need to be 0, as I will use the value from the index once I backtracked all the way to the root. GeneratorNodeHelper nodeHelper = new GeneratorNodeHelper(this.CurrentNode, 0, 0); while ((nodeHelper.CurrentNode.Previous != null) || (nodeHelper.CurrentNode.Parent != null)) { if (!nodeHelper.MoveToPrevious()) { nodeHelper.MoveToParent(); } } m_index = System.Math.Abs(nodeHelper.Index); m_sourceDataIndex = System.Math.Abs(nodeHelper.SourceDataIndex); return(true); }
public bool MoveBackward() { bool recurseGroup = true; GeneratorNodeHelper nodeHelper = new GeneratorNodeHelper(m_currentNode, m_index, m_sourceDataIndex); do { GroupGeneratorNode groupNode = nodeHelper.CurrentNode as GroupGeneratorNode; if ((groupNode == null) && (nodeHelper.CurrentNode != m_currentNode) && (nodeHelper.CurrentNode.ItemCount != 0)) { m_currentNode = nodeHelper.CurrentNode; m_index = nodeHelper.Index; m_sourceDataIndex = nodeHelper.SourceDataIndex; return(true); } if ((recurseGroup) && (nodeHelper.MoveToChild())) { nodeHelper.MoveToEnd(); continue; } recurseGroup = true; if (nodeHelper.MoveToPrevious()) { continue; } if (nodeHelper.MoveToParent()) { recurseGroup = false; continue; } break; }while(true); return(false); }