예제 #1
0
        private bool CopyItem(ResourceEntryItem primaryResource, ResourceContainer destinationContainer, int destinationIndex, bool skipReferencedResourceCopy)
        {
            ResourceConflictResolution conflictResolution = ResourceConflictResolution.UseExisting;
            DocumentNode               node1              = primaryResource.Resource.ResourceNode.Clone(destinationContainer.ViewModel.Document.DocumentContext);
            DictionaryEntryNode        primaryResource1   = (DictionaryEntryNode)destinationContainer.ViewModel.GetSceneNode(node1);
            ResourceEvaluation         resourceEvaluation = Microsoft.Expression.DesignSurface.Utility.ResourceHelper.EvaluateResource(primaryResource1, destinationContainer.Node);
            List <DictionaryEntryNode> list1              = new List <DictionaryEntryNode>();

            if (!skipReferencedResourceCopy)
            {
                List <DocumentNode> foundResources = new List <DocumentNode>();
                Microsoft.Expression.DesignSurface.Utility.ResourceHelper.FindAllReferencedResources(primaryResource.DocumentNode, foundResources, (Microsoft.Expression.DesignSurface.Utility.ResourceHelper.PostOrderOperation)null);
                foreach (DocumentNode documentNode in foundResources)
                {
                    DocumentNode node2 = documentNode.Parent.Clone(destinationContainer.ViewModel.Document.DocumentContext);
                    list1.Add((DictionaryEntryNode)destinationContainer.ViewModel.GetSceneNode(node2));
                }
            }
            IList <ResourceEvaluation> list2 = Microsoft.Expression.DesignSurface.Utility.ResourceHelper.EvaluateResources((IList <DictionaryEntryNode>)list1, destinationContainer.Node);

            if (!Microsoft.Expression.DesignSurface.Utility.ResourceHelper.CheckEvaluationResults(list2, (ResourceEvaluationResult)7))
            {
                if (!Microsoft.Expression.DesignSurface.Utility.ResourceHelper.CheckEvaluationResult(resourceEvaluation, ResourceEvaluationResult.ConflictingResourceExists, ResourceEvaluationResult.IdenticalResourceExists))
                {
                    goto label_10;
                }
            }
            conflictResolution = Microsoft.Expression.DesignSurface.Utility.ResourceHelper.PromptForResourceConflictResolution(ResourceConflictResolution.UseExisting | ResourceConflictResolution.RenameNew | ResourceConflictResolution.OverwriteOld);
            if (conflictResolution == ResourceConflictResolution.Undetermined)
            {
                return(false);
            }
label_10:
            using (SceneEditTransaction editTransaction = destinationContainer.ViewModel.CreateEditTransaction(StringTable.UndoUnitCopyResource))
            {
                int num = Microsoft.Expression.DesignSurface.Utility.ResourceHelper.AddResources(list2, (IList <SceneNode>)null, conflictResolution, destinationContainer.Node, destinationIndex);
                Microsoft.Expression.DesignSurface.Utility.ResourceHelper.AddPrimaryResource(resourceEvaluation, (IList <SceneNode>)null, conflictResolution, destinationContainer.Node, destinationIndex + num);
                ExpressionEvaluator expressionEvaluator = new ExpressionEvaluator(destinationContainer.ViewModel.DocumentRootResolver);
                SceneNode           keyNode             = primaryResource1.KeyNode;
                if (keyNode != null)
                {
                    DocumentNode documentNode = expressionEvaluator.EvaluateResource(destinationContainer.Node.DocumentNodePath, keyNode.DocumentNode);
                    foreach (DictionaryEntryNode dictionaryEntryNode in destinationContainer.ResourceDictionaryNode)
                    {
                        if (dictionaryEntryNode.Value.DocumentNode == documentNode)
                        {
                            this.ResourceManager.SelectedItems.SetSelection((ResourceEntryBase)this.ResourceManager.GetResourceItem(destinationContainer, dictionaryEntryNode.DocumentNode as DocumentCompositeNode));
                            editTransaction.Commit();
                            return(true);
                        }
                    }
                }
                else
                {
                    editTransaction.Commit();
                    return(true);
                }
            }
            return(false);
        }
 public ResourceConflictResolutionDialog(ResourceConflictResolution itemsToDisplay)
 {
     this.InitializeComponent();
     this.tbDiscard.IsEnabled      = (itemsToDisplay & ResourceConflictResolution.UseExisting) == ResourceConflictResolution.UseExisting;
     this.radioDiscard.IsEnabled   = (itemsToDisplay & ResourceConflictResolution.UseExisting) == ResourceConflictResolution.UseExisting;
     this.tbOverwrite.IsEnabled    = (itemsToDisplay & ResourceConflictResolution.OverwriteOld) == ResourceConflictResolution.OverwriteOld;
     this.radioOverwrite.IsEnabled = (itemsToDisplay & ResourceConflictResolution.OverwriteOld) == ResourceConflictResolution.OverwriteOld;
     this.tbAdd.IsEnabled          = (itemsToDisplay & ResourceConflictResolution.RenameNew) == ResourceConflictResolution.RenameNew;
     this.radioAdd.IsEnabled       = (itemsToDisplay & ResourceConflictResolution.RenameNew) == ResourceConflictResolution.RenameNew;
     this.Title = StringTable.ResourceConflictResolutionDialogTitle;
 }
예제 #3
0
        internal static ResourceConflictResolution PromptForResourceConflictResolution(ResourceConflictResolution itemsToDisplay)
        {
            ResourceConflictResolution       conflictResolution = ResourceConflictResolution.Undetermined;
            ResourceConflictResolutionDialog resolutionDialog   = new ResourceConflictResolutionDialog(itemsToDisplay);

            if (resolutionDialog.ShowDialog().GetValueOrDefault(false))
            {
                conflictResolution = resolutionDialog.Resolution;
            }
            return(conflictResolution);
        }
예제 #4
0
        internal static bool PasteResources(PastePackage pastePackage, IDictionary <DocumentNode, string> imageMap, ResourceConflictResolution itemsToDisplay, SceneNode destination, int index, bool lastResourceIsPrimary)
        {
            SceneViewModel             viewModel = destination.ViewModel;
            List <DictionaryEntryNode> list1     = new List <DictionaryEntryNode>((IEnumerable <DictionaryEntryNode>)pastePackage.Resources);

            if (list1.Count == 0)
            {
                return(true);
            }
            bool flag = true;
            IList <ResourceEvaluation> list2 = ResourceHelper.EvaluateResources((IList <DictionaryEntryNode>)list1, destination);
            ResourceConflictResolution conflictResolution = ResourceConflictResolution.Undetermined;

            if (ResourceHelper.CheckEvaluationResults(list2, ResourceEvaluationResult.ConflictingResourceExists, ResourceEvaluationResult.ConflictingResourceIsMasked))
            {
                conflictResolution = ResourceHelper.PromptForResourceConflictResolution(itemsToDisplay);
                if (conflictResolution == ResourceConflictResolution.Undetermined)
                {
                    flag = false;
                }
            }
            if (flag)
            {
                foreach (ResourceEvaluation resourceEvaluation in (IEnumerable <ResourceEvaluation>)list2)
                {
                    ResourceHelper.UpdateImageReferences(resourceEvaluation.OriginalResource.Value.DocumentNode, imageMap, pastePackage, viewModel);
                }
                List <SceneNode> list3 = new List <SceneNode>(pastePackage.Elements.Count);
                foreach (SceneElement sceneElement in pastePackage.Elements)
                {
                    list3.Add((SceneNode)sceneElement);
                }
                ResourceEvaluation resourceEvaluation1 = list2[list2.Count - 1];
                if (lastResourceIsPrimary)
                {
                    list2.RemoveAt(list2.Count - 1);
                    int num = ResourceHelper.AddResources(list2, (IList <SceneNode>)list3, conflictResolution, destination, index);
                    if (ResourceHelper.CheckEvaluationResult(resourceEvaluation1, ResourceEvaluationResult.IdenticalResourceExists))
                    {
                        conflictResolution = ResourceConflictResolution.RenameNew;
                    }
                    ResourceHelper.AddPrimaryResource(resourceEvaluation1, (IList <SceneNode>)list3, conflictResolution, destination, index + num);
                }
                else
                {
                    ResourceHelper.AddResources(list2, (IList <SceneNode>)list3, conflictResolution, destination, index);
                }
            }
            return(flag);
        }
예제 #5
0
        internal static bool CopyResourcesToNewResourceSite(IList <DocumentCompositeNode> auxillaryResources, SceneViewModel resourcesHostViewModel, DocumentCompositeNode resourcesHostNode, DocumentCompositeNode insertedResourceNode, int indexInResourceSite)
        {
            if (auxillaryResources == null || auxillaryResources.Count <= 0)
            {
                return(true);
            }
            bool flag = true;
            ResourceConflictResolution conflictResolution = ResourceConflictResolution.Undetermined;
            SceneNode sceneNode = resourcesHostViewModel.GetSceneNode((DocumentNode)resourcesHostNode);
            List <DictionaryEntryNode> list1 = new List <DictionaryEntryNode>();
            List <SceneNode>           list2 = new List <SceneNode>();

            foreach (DocumentNode documentNode in (IEnumerable <DocumentCompositeNode>)auxillaryResources)
            {
                DocumentNode        node = documentNode.Clone(resourcesHostViewModel.Document.DocumentContext);
                DictionaryEntryNode dictionaryEntryNode = (DictionaryEntryNode)resourcesHostViewModel.GetSceneNode(node);
                list1.Add(dictionaryEntryNode);
                if (dictionaryEntryNode.Value != null)
                {
                    list2.Add(dictionaryEntryNode.Value);
                }
            }
            if (insertedResourceNode != null)
            {
                list2.Add(resourcesHostViewModel.GetSceneNode((DocumentNode)insertedResourceNode));
            }
            IList <ResourceEvaluation> list3 = ResourceHelper.EvaluateResources((IList <DictionaryEntryNode>)list1, sceneNode);

            if (ResourceHelper.CheckEvaluationResults(list3, ResourceEvaluationResult.ConflictingResourceExists, ResourceEvaluationResult.ConflictingResourceIsMasked))
            {
                conflictResolution = ResourceHelper.PromptForResourceConflictResolution(ResourceConflictResolution.RenameNew | ResourceConflictResolution.OverwriteOld);
                if (conflictResolution == ResourceConflictResolution.Undetermined)
                {
                    flag = false;
                }
            }
            if (flag)
            {
                ResourceHelper.EnsureResourceDictionaryNode(sceneNode);
                ResourceHelper.AddResources(list3, (IList <SceneNode>)list2, conflictResolution, sceneNode, indexInResourceSite);
            }
            return(flag);
        }
 private void HandleOverwriteOld(object sender, EventArgs e)
 {
     this.Resolution = ResourceConflictResolution.OverwriteOld;
 }
 private void HandleRenameNew(object sender, EventArgs e)
 {
     this.Resolution = ResourceConflictResolution.RenameNew;
 }
 private void HandleUseExisting(object sender, EventArgs e)
 {
     this.Resolution = ResourceConflictResolution.UseExisting;
 }
예제 #9
0
        internal static void AddPrimaryResource(ResourceEvaluation evaluatedPrimaryResource, IList <SceneNode> referringElements, ResourceConflictResolution conflictResolution, SceneNode destination, int insertionIndex)
        {
            SceneViewModel         viewModel             = destination.ViewModel;
            ResourceDictionaryNode destinationDictionary = ResourceHelper.EnsureResourceDictionaryNode(destination);
            DictionaryEntryNode    resourceToAdd;

            switch (evaluatedPrimaryResource.ConflictType)
            {
            case ResourceEvaluationResult.NoExistingResource:
                resourceToAdd = evaluatedPrimaryResource.OriginalResource;
                break;

            case ResourceEvaluationResult.IdenticalResourceExists:
                resourceToAdd = ResourceHelper.ResolveResourceConflict(evaluatedPrimaryResource, referringElements, destination, conflictResolution);
                break;

            case ResourceEvaluationResult.IdenticalResourceIsMasked:
                resourceToAdd = evaluatedPrimaryResource.OriginalResource;
                break;

            case ResourceEvaluationResult.ConflictingResourceExists:
                resourceToAdd = ResourceHelper.ResolveResourceConflict(evaluatedPrimaryResource, referringElements, destination, conflictResolution);
                break;

            case ResourceEvaluationResult.ConflictingResourceIsMasked:
                resourceToAdd = evaluatedPrimaryResource.OriginalResource;
                break;

            default:
                throw new InvalidEnumArgumentException("ConflictType", (int)evaluatedPrimaryResource.ConflictType, typeof(ResourceEvaluationResult));
            }
            if (resourceToAdd == null)
            {
                return;
            }
            ResourceHelper.AddResource(resourceToAdd, destinationDictionary, insertionIndex);
        }
예제 #10
0
        private static DictionaryEntryNode ResolveResourceConflict(ResourceEvaluation resourceEvaluation, IList <SceneNode> elements, SceneNode destination, ResourceConflictResolution resolution)
        {
            DictionaryEntryNode originalResource    = resourceEvaluation.OriginalResource;
            DocumentNode        evaluatedResource   = resourceEvaluation.EvaluatedResource;
            DictionaryEntryNode dictionaryEntryNode = (DictionaryEntryNode)null;

            if (resolution == ResourceConflictResolution.RenameNew)
            {
                DocumentNode newKey = ResourceHelper.GenerateUniqueResourceKey(originalResource.Key.ToString(), destination);
                ResourceHelper.ChangeKey(elements, originalResource, originalResource.KeyNode.DocumentNode, newKey);
                dictionaryEntryNode = originalResource;
            }
            else if (resolution == ResourceConflictResolution.OverwriteOld)
            {
                DocumentCompositeNode parent = evaluatedResource.Parent;
                if (parent != null && typeof(DictionaryEntry).IsAssignableFrom(parent.TargetType))
                {
                    SceneViewModel viewModel = SceneViewModel.GetViewModel((ISceneViewHost)destination.ProjectContext.GetService(typeof(ISceneViewHost)), parent.DocumentRoot, false);
                    if (viewModel != null)
                    {
                        using (SceneEditTransaction editTransaction = viewModel.CreateEditTransaction(StringTable.UndoResourceOverwrite))
                        {
                            ((DictionaryEntryNode)viewModel.GetSceneNode((DocumentNode)parent)).Value = viewModel.GetSceneNode(originalResource.Value.DocumentNode.Clone(viewModel.Document.DocumentContext));
                            editTransaction.Commit();
                        }
                    }
                }
                dictionaryEntryNode = (DictionaryEntryNode)null;
            }
            else if (resolution == ResourceConflictResolution.UseExisting)
            {
                dictionaryEntryNode = (DictionaryEntryNode)null;
            }
            return(dictionaryEntryNode);
        }
예제 #11
0
        internal static int AddResources(IList <ResourceEvaluation> referencedResources, IList <SceneNode> referringElements, ResourceConflictResolution conflictResolution, SceneNode destination, int insertionIndex)
        {
            SceneViewModel         viewModel             = destination.ViewModel;
            ResourceDictionaryNode destinationDictionary = ResourceHelper.EnsureResourceDictionaryNode(destination);
            int num = insertionIndex;

            foreach (ResourceEvaluation resourceEvaluation in (IEnumerable <ResourceEvaluation>)referencedResources)
            {
                DictionaryEntryNode resourceToAdd = (DictionaryEntryNode)null;
                switch (resourceEvaluation.ConflictType)
                {
                case ResourceEvaluationResult.NoExistingResource:
                    resourceToAdd = resourceEvaluation.OriginalResource;
                    goto case 1;

                case ResourceEvaluationResult.IdenticalResourceExists:
                case ResourceEvaluationResult.IdenticalResourceIsMasked:
                    if (resourceToAdd != null)
                    {
                        ResourceHelper.AddResource(resourceToAdd, destinationDictionary, insertionIndex);
                        ++insertionIndex;
                        continue;
                    }
                    continue;

                case ResourceEvaluationResult.ConflictingResourceExists:
                    resourceToAdd = ResourceHelper.ResolveResourceConflict(resourceEvaluation, referringElements, destination, conflictResolution);
                    goto case 1;

                case ResourceEvaluationResult.ConflictingResourceIsMasked:
                    resourceToAdd = ResourceHelper.ResolveResourceConflict(resourceEvaluation, referringElements, destination, conflictResolution);
                    goto case 1;

                default:
                    throw new InvalidEnumArgumentException("ConflictType", (int)resourceEvaluation.ConflictType, typeof(ResourceEvaluationResult));
                }
            }
            return(insertionIndex - num);
        }