/// <summary> /// Gets indexes for all nodes in the inner. /// </summary> public virtual IReadOnlyBrowsingBlockNodeIndexList AllIndexes() { IReadOnlyBrowsingBlockNodeIndexList Result = CreateBlockNodeIndexList(); foreach (IReadOnlyBlockState BlockState in BlockStateList) { foreach (IReadOnlyPlaceholderNodeState NodeState in BlockState.StateList) { IReadOnlyBrowsingBlockNodeIndex ParentIndex = NodeState.ParentIndex as IReadOnlyBrowsingBlockNodeIndex; Debug.Assert(ParentIndex != null); Result.Add(ParentIndex); } } return(Result); }
private protected virtual void BrowseBlock(IReadOnlyBrowseContext browseNodeContext, INode node, string propertyName, int blockIndex, INodeTreeBlock childBlock, IReadOnlyBrowsingBlockNodeIndexList nodeIndexList) { Debug.Assert(!string.IsNullOrEmpty(propertyName)); for (int Index = 0; Index < childBlock.NodeList.Count; Index++) { INode ChildNode = childBlock.NodeList[Index]; IReadOnlyBrowsingBlockNodeIndex NewNodeIndex; if (Index == 0) // For the first node, we use a IxxxBrowsingNewBlockNodeIndex, otherwise a IxxxBrowsingExistingBlockNodeIndex. { NewNodeIndex = CreateNewBlockNodeIndex(browseNodeContext, node, propertyName, blockIndex, ChildNode); } else { NewNodeIndex = CreateExistingBlockNodeIndex(browseNodeContext, node, propertyName, blockIndex, Index, ChildNode); } nodeIndexList.Add(NewNodeIndex); } }