コード例 #1
0
        public void ResetOverride(Index indexToReset)
        {
            // TODO: comment

            if (indexToReset.IsEmpty)
            {
                OverrideContent(false);
            }
            else
            {
                OverrideItem(false, indexToReset);
            }
            var visitor = new GraphVisitorBase {
                SkipRootNode = true
            };

            visitor.Visiting += (node, path) =>
            {
                var childNode = (AssetNode)node;
                childNode.OverrideContent(false);
                foreach (var overrideItem in childNode.GetOverriddenItemIndices())
                {
                    childNode.OverrideItem(false, overrideItem);
                }
                foreach (var overrideKey in childNode.GetOverriddenKeyIndices())
                {
                    childNode.OverrideKey(false, overrideKey);
                }
            };
            visitor.Visit(this);

            // TODO: we should reconcile directly only assetNode, not the whole asset
            PropertyGraph.ReconcileWithBase();
        }
コード例 #2
0
        protected override IEnumerable <ReferenceReplacementViewModel <AssetViewModel> > GetReplacementsForReferencer(AssetViewModel referencer, object referencedMember)
        {
            var rootNode = SessionViewModel.Instance.AssetNodeContainer.GetNode(referencer.Asset);
            var visitor  = new GraphVisitorBase {
                SkipRootNode = true
            };
            var result = new List <ReferenceReplacementViewModel <AssetViewModel> >();

            visitor.Visiting += (node, path) =>
            {
                var memberNode = node as IAssetMemberNode;
                if (memberNode != null)
                {
                    if (AssetRegistry.IsContentType(memberNode.Descriptor.GetInnerCollectionType()))
                    {
                        if (memberNode.Target?.IsEnumerable ?? false)
                        {
                            foreach (var index in memberNode.Target.Indices)
                            {
                                // If this property is inherited it will be updated by the standard propagation
                                if (memberNode.Target.IsItemInherited(index))
                                {
                                    continue;
                                }

                                var target = ContentReferenceHelper.GetReferenceTarget(referencer.Session, memberNode.Target.Retrieve(index));
                                if (target == CurrentObjectToReplace)
                                {
                                    // If so, prepare a replacement for it.
                                    var viewModel = new AssetReferenceReplacementViewModel(this, CurrentObjectToReplace, referencer, referencedMember, memberNode.Target, index);
                                    result.Add(viewModel);
                                }
                            }
                        }
                        else
                        {
                            // If this property is inherited it will be updated by the standard propagation
                            if (memberNode.IsContentInherited())
                            {
                                return;
                            }

                            var target = ContentReferenceHelper.GetReferenceTarget(referencer.Session, memberNode.Retrieve());
                            if (target == CurrentObjectToReplace)
                            {
                                // If so, prepare a replacement for it.
                                var viewModel = new AssetReferenceReplacementViewModel(this, CurrentObjectToReplace, referencer, referencedMember, memberNode, NodeIndex.Empty);
                                result.Add(viewModel);
                            }
                        }
                    }
                }
            };
            visitor.Visit(rootNode);
            return(result);
        }
コード例 #3
0
        public List <NodeOverride> ClearAllOverrides()
        {
            // Unregister handlers - must be done first!
            foreach (var linkedNode in baseLinkedNodes.Where(x => x.Value != null))
            {
                var member = linkedNode.Key.BaseContent as IMemberNode;
                if (member != null)
                {
                    member.Changed -= linkedNode.Value;
                }
            }
            baseLinkedNodes.Clear();

            var clearedOverrides = new List <NodeOverride>();

            // Clear override and base from node
            if (RootNode != null)
            {
                var visitor = new GraphVisitorBase {
                    SkipRootNode = true
                };
                visitor.Visiting += (node, path) =>
                {
                    var assetNode = node as AssetMemberNode;
                    if (assetNode == null)
                    {
                        return;
                    }

                    if (assetNode.IsContentOverridden())
                    {
                        assetNode.OverrideContent(false);
                        clearedOverrides.Add(new NodeOverride(assetNode, Index.Empty, OverrideTarget.Content));
                    }
                    foreach (var index in assetNode.GetOverriddenItemIndices())
                    {
                        assetNode.OverrideItem(false, index);
                        clearedOverrides.Add(new NodeOverride(assetNode, index, OverrideTarget.Item));
                    }
                    foreach (var index in assetNode.GetOverriddenKeyIndices())
                    {
                        assetNode.OverrideKey(false, index);
                        clearedOverrides.Add(new NodeOverride(assetNode, index, OverrideTarget.Key));
                    }
                };
                visitor.Visit(RootNode);
            }

            return(clearedOverrides);
        }