예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
                        }
                    }
                }
            }
        }
예제 #3
0
 /// <summary>
 /// Gets sub-frames
 /// </summary>
 /// <param name="relation">Relation to query</param>
 /// <returns>Sub-frames</returns>
 public FrameSet GetSubFrames(FrameRelation relation)
 {
     return(_relationSubFrames[relation]);
 }