private static void FindAllReferencedResources(DocumentNode node, List <DocumentNode> foundResources, Stack <DocumentNodePath> resourceReferenceTree, ResourceHelper.PostOrderOperation postOrderOperation) { foreach (DocumentNode documentNode1 in node.SelectDescendantNodes(new Predicate <DocumentNode>(ResourceHelper.FilterResources))) { DocumentNodePath context1 = new DocumentNodePath(node.DocumentRoot.RootNode, documentNode1); resourceReferenceTree.Push(context1); DocumentNode documentNode2 = (DocumentNode)null; if (DocumentNodeUtilities.IsDynamicResource(documentNode1)) { foreach (DocumentNodePath context2 in resourceReferenceTree) { documentNode2 = new ExpressionEvaluator((IDocumentRootResolver)context2.Node.Context).EvaluateExpression(context2, documentNode1); if (documentNode2 != null) { break; } } } else { documentNode2 = new ExpressionEvaluator((IDocumentRootResolver)context1.Node.Context).EvaluateExpression(context1, documentNode1); } if (documentNode2 != null && !ResourceHelper.IsResourceCached(documentNode2, foundResources)) { foundResources.Add(documentNode2); ResourceHelper.FindAllReferencedResources(documentNode2, foundResources, resourceReferenceTree, postOrderOperation); if (postOrderOperation != null) { postOrderOperation(documentNode2); } } resourceReferenceTree.Pop(); } }
private static IEnumerable <DocumentNode> FindPointAnimationDescendantNodes(this DocumentNode root) { return(root.SelectDescendantNodes((DocumentNode node) => { if (PlatformTypes.PointAnimationUsingKeyFrames.IsAssignableFrom(node.Type)) { return true; } return PlatformTypes.PointAnimation.IsAssignableFrom(node.Type); })); }
protected override void ProcessDocument(SceneDocument document) { DocumentNode rootNode = document.DocumentRoot.RootNode; foreach (ReferenceRepairer referenceRepairer in this.referenceChangeModel.ReferenceRepairers) { foreach (DocumentNode node in rootNode.SelectDescendantNodes(referenceRepairer.AppliesTo)) { referenceRepairer.Repair(node); } } }
private static void FindReferencedResourcesInternal(DocumentNode root, Dictionary <DocumentNode, bool> visited, IList <DocumentCompositeNode> resources) { foreach (DocumentNode documentNode in root.SelectDescendantNodes(new Predicate <DocumentNode>(ResourceHelper.FilterResources))) { DocumentNode index = new ExpressionEvaluator((IDocumentRootResolver)null).EvaluateExpression(new DocumentNodePath(root.DocumentRoot.RootNode, documentNode), documentNode); if (index != null && !visited.ContainsKey(index) && !root.IsAncestorOf(index)) { visited[index] = true; ResourceHelper.FindReferencedResourcesInternal(index, visited, resources); DocumentCompositeNode parent = index.Parent; resources.Add(parent); } } }
protected override void ProcessDocument(SceneDocument document) { DocumentNode rootNode = document.DocumentRoot.RootNode; foreach (ReferenceVerifier referenceVerifier in (IEnumerable <ReferenceVerifier>) this.referenceVerifiers) { foreach (DocumentNode node in rootNode.SelectDescendantNodes(referenceVerifier.ShouldVerify)) { if (!referenceVerifier.Verify(node)) { this.invalidReferences.Add(referenceVerifier.CreateInvalidReferenceModel(node)); } } } }
public void ApplyAmbientProperties(SceneNode node) { if (node == null || !Enumerable.Any <ITypeId>((IEnumerable <ITypeId>)AmbientPropertyManager.SupportedTypes, (Func <ITypeId, bool>)(type => type.IsAssignableFrom((ITypeId)node.Type))) || this.suppressApplyCount > 0) { return; } foreach (ReferenceStep referenceStep in this.GetResolvedAmbientProperties()) { bool strictTypeCheck = true; PropertyReference propertyReference = SceneNodeObjectSet.FilterProperty(node, new PropertyReference(referenceStep), strictTypeCheck); if (propertyReference != null) { object valueToSet = this.InternalGetAmbientValue(referenceStep, node); DocumentNode documentNode1 = valueToSet as DocumentNode; if (documentNode1 != null) { DocumentNode documentNode2 = documentNode1.Clone(node.DocumentContext); DocumentCompositeNode documentCompositeNode = documentNode2 as DocumentCompositeNode; if (documentCompositeNode != null) { documentCompositeNode.ClearValue((IPropertyId)documentCompositeNode.Type.Metadata.NameProperty); } foreach (DocumentNode documentNode3 in documentNode2.SelectDescendantNodes((Predicate <DocumentNode>)(nodePredicate => nodePredicate.Parent.IsNameProperty((IPropertyId)nodePredicate.SitePropertyKey)))) { documentNode3.Parent.ClearValue((IPropertyId)documentNode3.SitePropertyKey); } valueToSet = (object)documentNode2; } if (valueToSet == DependencyProperty.UnsetValue) { node.ClearValueAsWpf(propertyReference); } else { node.SetValueAsWpf(propertyReference, valueToSet); } } } }