/// <summary> /// Gets a list of related frames /// </summary> /// <param name="relation">Type of relation to fetch</param> /// <param name="relationDirection">Relation direction</param> /// <param name="recursive">Whether or not to get related frames recursively</param> /// <returns>Set of frames</returns> public FrameSet GetRelatedFrames(FrameRelation relation, FrameRelationDirection relationDirection, bool recursive) { FrameSet frames = new FrameSet(true); GetRelatedFrames(relation, relationDirection, recursive, frames); return(frames); }
/// <summary> /// Gets a list of related frames /// </summary> /// <param name="relation">Type of relation to fetch</param> /// <param name="relationDirection">Relation direction</param> /// <param name="recursive">Whether or not to get related frames recursively</param> /// <param name="currentFrames">Current set of frames</param> /// <returns>Set of frames</returns> private void GetRelatedFrames(FrameRelation relation, FrameRelationDirection relationDirection, bool recursive, FrameSet currentFrames) { // add sub-frames if (relationDirection == FrameRelationDirection.Sub || relationDirection == FrameRelationDirection.Both) { foreach (Frame subFrame in _relationSubFrames[relation]) { if (!currentFrames.Contains(subFrame)) { currentFrames.Add(subFrame); // recursively add sub-frames if (recursive) { subFrame.GetRelatedFrames(relation, relationDirection, recursive, currentFrames); } } } } // add super-frames if (relationDirection == FrameRelationDirection.Super || relationDirection == FrameRelationDirection.Both) { foreach (Frame superFrame in _relationSuperFrames[relation]) { if (!currentFrames.Contains(superFrame)) { currentFrames.Add(superFrame); // recursively add super-frames if (recursive) { superFrame.GetRelatedFrames(relation, relationDirection, recursive, currentFrames); } } } } }
/// <summary> /// Gets sub-frames /// </summary> /// <param name="relation">Relation to query</param> /// <returns>Sub-frames</returns> public FrameSet GetSubFrames(FrameRelation relation) { return(_relationSubFrames[relation]); }