protected static SearchScope GetSearchScope(SearchAxis axis) { switch (axis.axisType) { case SearchAxis.AxisType.DocumentAncestor: case SearchAxis.AxisType.DocumentParent: case SearchAxis.AxisType.Root: return(SearchScope.NodeTreeAncestor); case SearchAxis.AxisType.DocumentChild: case SearchAxis.AxisType.DocumentDescendant: case SearchAxis.AxisType.Animations: case SearchAxis.AxisType.KeyFrames: case SearchAxis.AxisType.Property: case SearchAxis.AxisType.CollectionChild: return(SearchScope.NodeTreeDescendant); case SearchAxis.AxisType.DocumentSelfAndDescendant: return((SearchScope)6); case SearchAxis.AxisType.Self: return(SearchScope.NodeTreeSelf); case SearchAxis.AxisType.StoryboardContainer: case SearchAxis.AxisType.StoryboardAncestor: case SearchAxis.AxisType.ActiveStoryboard: case SearchAxis.AxisType.SceneAncestor: case SearchAxis.AxisType.SceneParent: case SearchAxis.AxisType.SceneChild: case SearchAxis.AxisType.SceneDescendant: return(SearchScope.Unknown); default: return(SearchScope.Unknown); } }
public SearchStep(SearchAxis axis, ISearchPredicate predicate, ISearchPredicate continuePredicate) { this.axis = axis; this.predicate = predicate; this.continuePredicate = continuePredicate; }
public SearchStep(SearchAxis axis, ISearchPredicate predicate) : this(axis, predicate, (ISearchPredicate)null) { }
protected static IEnumerable <SceneNode> Enumerate(SceneNode pivot, SearchAxis axis, ISearchPredicate continueTester) { SceneViewModel viewModel = pivot.ViewModel; switch (axis.axisType) { case SearchAxis.AxisType.DocumentAncestor: foreach (DocumentNode node in pivot.DocumentNode.AncestorNodes) { SceneNode sceneNode = viewModel.GetSceneNode(node); yield return(sceneNode); if (continueTester != null && !continueTester.Test(sceneNode)) { break; } } break; case SearchAxis.AxisType.DocumentParent: DocumentNode parentNode = (DocumentNode)pivot.DocumentNode.Parent; if (parentNode == null) { break; } yield return(viewModel.GetSceneNode(parentNode)); break; case SearchAxis.AxisType.DocumentChild: foreach (DocumentNode node in pivot.DocumentNode.ChildNodes) { SceneNode sceneNode = viewModel.GetSceneNode(node); yield return(sceneNode); } break; case SearchAxis.AxisType.DocumentDescendant: foreach (DocumentNode node in SearchAxis.TraverseDocumentDescendants(pivot.DocumentNode, continueTester, viewModel)) { yield return(viewModel.GetSceneNode(node)); } break; case SearchAxis.AxisType.DocumentSelfAndDescendant: yield return(pivot); foreach (DocumentNode node in SearchAxis.TraverseDocumentDescendants(pivot.DocumentNode, continueTester, viewModel)) { yield return(viewModel.GetSceneNode(node)); } break; case SearchAxis.AxisType.Self: yield return(pivot); break; case SearchAxis.AxisType.Root: yield return(viewModel.GetSceneNode(pivot.DocumentNode.DocumentRoot.RootNode)); break; case SearchAxis.AxisType.StoryboardContainer: SceneNode thisStoryboardContainer = (SceneNode)pivot.StoryboardContainer; if (thisStoryboardContainer == null) { break; } yield return(thisStoryboardContainer); break; case SearchAxis.AxisType.StoryboardAncestor: for (IStoryboardContainer cur = pivot.StoryboardContainer; cur != null; cur = cur.TargetElement.StoryboardContainer) { yield return((SceneNode)cur); if (continueTester != null && !continueTester.Test((SceneNode)cur)) { break; } } break; case SearchAxis.AxisType.ActiveStoryboard: if (pivot.ViewModel.ActiveStoryboardTimeline == null) { break; } yield return((SceneNode)pivot.ViewModel.ActiveStoryboardTimeline); break; case SearchAxis.AxisType.Animations: StoryboardTimelineSceneNode storyboard = pivot as StoryboardTimelineSceneNode; if (storyboard == null) { break; } foreach (TimelineSceneNode timelineSceneNode in (IEnumerable <TimelineSceneNode>)storyboard.Children) { yield return((SceneNode)timelineSceneNode); } break; case SearchAxis.AxisType.KeyFrames: KeyFrameAnimationSceneNode keyFrameAnimation = pivot as KeyFrameAnimationSceneNode; if (keyFrameAnimation == null) { break; } foreach (KeyFrameSceneNode keyFrameSceneNode in keyFrameAnimation.KeyFrames) { yield return((SceneNode)keyFrameSceneNode); } break; case SearchAxis.AxisType.SceneAncestor: for (SceneNode parent = pivot.Parent; parent != null; parent = parent.Parent) { yield return(parent); if (continueTester != null && !continueTester.Test(parent)) { break; } } break; case SearchAxis.AxisType.SceneParent: SceneNode node1 = pivot.Parent; if (node1 == null) { break; } yield return(node1); break; case SearchAxis.AxisType.SceneChild: DocumentCompositeNode docNode = pivot.DocumentNode as DocumentCompositeNode; if (docNode == null) { break; } if (docNode.SupportsChildren) { ISceneNodeCollection <SceneNode> children = pivot.GetChildren(); for (int i = 0; i < children.Count; ++i) { yield return(children[i]); } break; } foreach (IPropertyId propertyKey in (IEnumerable <IProperty>)docNode.Properties.Keys) { SceneNode subNode = pivot.GetLocalValueAsSceneNode(propertyKey); yield return(subNode); } break; case SearchAxis.AxisType.SceneDescendant: IEnumerator <SceneNode> descendantEnumerator = (IEnumerator <SceneNode>) new SearchAxis.SceneDescendantTraversalEnumerator(pivot, continueTester); while (descendantEnumerator.MoveNext()) { yield return(descendantEnumerator.Current); } break; case SearchAxis.AxisType.Property: IProperty resolvedProperty = pivot.ProjectContext.ResolveProperty(axis.Property); if (resolvedProperty == null) { break; } SceneNode node2 = pivot.GetLocalValueAsSceneNode((IPropertyId)resolvedProperty); if (node2 == null) { break; } yield return(node2); break; case SearchAxis.AxisType.CollectionChild: SceneNode node3 = pivot.GetChildren()[axis.ChildIndex]; if (node3 == null) { break; } yield return(node3); break; } }
public virtual IEnumerable <SceneNode> Enumerate(SceneNode pivot, ISearchPredicate continueTester) { return(SearchAxis.Enumerate(pivot, this, continueTester)); }