private void AddExternalDictionaries(ResourceManager resourceManager, ResourceContainer resourceContainer)
        {
            List <ResourceDictionaryItem> list = new List <ResourceDictionaryItem>();

            resourceManager.FindAllReachableDictionaries(resourceContainer, (ICollection <ResourceDictionaryItem>)list);
            foreach (ResourceDictionaryItem resourceDictionaryItem in list)
            {
                DocumentResourceContainer resourceContainer1 = resourceManager.FindResourceContainer(resourceDictionaryItem.DesignTimeSource) as DocumentResourceContainer;
                if (resourceContainer1 != null && !this.externalResourceDictionaries.Contains((ResourceContainer)resourceContainer1) && PlatformTypes.PlatformsCompatible(this.viewModel.ProjectContext.PlatformMetadata, resourceContainer1.ProjectContext.PlatformMetadata))
                {
                    this.externalResourceDictionaries.Add((ResourceContainer)resourceContainer1);
                }
            }
            if (this.selectedExternalResourceDictionaryFile != null || this.externalResourceDictionaries.Count <= 0)
            {
                return;
            }
            this.selectedExternalResourceDictionaryFile = this.externalResourceDictionaries[0];
        }
        public bool TryCreateDesignTimeResourceReference()
        {
            bool?nullable = this.doNotAskAgain;

            if ((!nullable.GetValueOrDefault() ? 0 : (nullable.HasValue ? true : false)) != 0)
            {
                this.solutionSettingsManager.SetProjectProperty((INamedProject)this.rootProject, EditDesignTimeResourceModel.DoNotAskForDesignTimeResourcesAgain, (object)true);
            }
            else
            {
                this.solutionSettingsManager.ClearProjectProperty((INamedProject)this.rootProject, EditDesignTimeResourceModel.DoNotAskForDesignTimeResourcesAgain);
            }
            if (this.Selected != null)
            {
                try
                {
                    List <IProjectItem> itemsToOpen = new List <IProjectItem>();
                    if (this.designTimeResources == null)
                    {
                        TemplateItemHelper   templateItemHelper = new TemplateItemHelper(this.rootProject, (IList <string>)null, (IServiceProvider)this.context.Services);
                        IProjectItemTemplate templateItem       = templateItemHelper.FindTemplateItem("Resource Dictionary");
                        string availableFilePath = ProjectPathHelper.GetAvailableFilePath(EditDesignTimeResourceModel.TargetName, this.targetPath, this.rootProject, true);
                        this.designTimeResources = Enumerable.SingleOrDefault <IProjectItem>(templateItemHelper.AddProjectItemsForTemplateItem(templateItem, Path.GetFileName(availableFilePath), this.targetPath, CreationOptions.DoNotSelectCreatedItems | CreationOptions.DesignTimeResource, out itemsToOpen));
                    }
                    if (this.designTimeResources == null)
                    {
                        return(false);
                    }
                    DocumentResourceContainer resourceContainer = new DocumentResourceContainer(this.context.ResourceManager, this.designTimeResources);
                    try
                    {
                        if (resourceContainer.ProjectItem.Document == null)
                        {
                            return(false);
                        }
                        IProject project = this.Selected.Container.ProjectItem.Project;
                        if (project != this.rootProject && !Enumerable.Contains <IProject>(this.rootProject.ReferencedProjects, project))
                        {
                            IProjectItem projectItem = this.rootProject.AddProjectReference(project);
                            if (projectItem == null)
                            {
                                return(false);
                            }
                            projectItem.ContainsDesignTimeResources = true;
                        }
                        uint resourceChangeStamp = this.context.ResourceManager.ResourceChangeStamp;
                        this.context.ResourceManager.LinkToResource((ResourceContainer)resourceContainer, this.Selected.Container.DocumentReference);
                        this.context.ViewUpdateManager.RefreshViewUpdatesForDesignTimeResources(true);
                        return(this.context.ResourceManager.ResourceChangeStamp > resourceChangeStamp);
                    }
                    finally
                    {
                        resourceContainer.Close();
                    }
                }
                catch (Exception ex)
                {
                    if (ex is NotSupportedException || ErrorHandling.ShouldHandleExceptions(ex))
                    {
                        this.context.Services.GetService <IMessageDisplayService>().ShowError(new ErrorArgs()
                        {
                            Exception = ex
                        });
                    }
                    else
                    {
                        throw;
                    }
                }
            }
            return(false);
        }
        public EditDesignTimeResourceModel(IProject rootProject, DesignerContext context, string fileName, EditDesignTimeResourceModelMode mode = EditDesignTimeResourceModelMode.Warning, string missingResourceName = null)
        {
            EditDesignTimeResourceModel timeResourceModel = this;

            if (rootProject == null)
            {
                throw new ArgumentNullException("rootProject");
            }
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            this.mode                = mode;
            this.rootProject         = rootProject;
            this.context             = context;
            this.fileName            = fileName;
            this.missingResourceName = missingResourceName;
            IProjectManager service = this.context.Services.GetService <IProjectManager>();

            if (service != null)
            {
                ISolution currentSolution = service.CurrentSolution;
                if (currentSolution != null)
                {
                    this.solutionSettingsManager = currentSolution.SolutionSettingsManager;
                }
            }
            this.targetPath = Path.Combine(rootProject.ProjectRoot.Path, rootProject.PropertiesPath);
            foreach (DocumentResourceContainer container in Enumerable.Select(Enumerable.ThenBy(Enumerable.OrderBy(Enumerable.Where(Enumerable.Select(Enumerable.Distinct <DocumentResourceContainer>((IEnumerable <DocumentResourceContainer>)context.ResourceManager.DocumentResourceContainers), container => new
            {
                container = container,
                doc = container.Document.XamlDocument
            }), param0 =>
            {
                if (param0.container.Document.ProjectDocumentType == ProjectDocumentType.ResourceDictionary && !param0.container.ProjectItem.ContainsDesignTimeResources && param0.doc != null)
                {
                    return(param0.doc.IsEditable);
                }
                return(false);
            }), param0 => param0.container.ProjectItem.Project.Name), param0 => param0.container.Name), param0 => param0.container))
            {
                this.designTimeResourceContainers.Add(new DesignTimeResourceContainer(container));
            }
            this.designTimeResources = Enumerable.FirstOrDefault <IProjectItem>((IEnumerable <IProjectItem>)rootProject.Items, (Func <IProjectItem, bool>)(item =>
            {
                bool flag = Enumerable.Any <IProject>(rootProject.ReferencedProjects, (Func <IProject, bool>)(p => p.DocumentReference.GetHashCode() == item.DocumentReference.GetHashCode()));
                if (item.ContainsDesignTimeResources)
                {
                    return(!flag);
                }
                return(false);
            }));
            if (this.designTimeResources == null)
            {
                return;
            }
            DocumentResourceContainer resourceContainer1 = Enumerable.FirstOrDefault <DocumentResourceContainer>((IEnumerable <DocumentResourceContainer>)context.ResourceManager.DocumentResourceContainers, (Func <DocumentResourceContainer, bool>)(container => container.ProjectItem == this.designTimeResources));

            if (resourceContainer1 == null)
            {
                return;
            }
            List <ResourceDictionaryItem> list = new List <ResourceDictionaryItem>();

            context.ResourceManager.FindAllReachableDictionaries((ResourceContainer)resourceContainer1, (ICollection <ResourceDictionaryItem>)list);
            foreach (ResourceDictionaryItem resourceDictionaryItem in list)
            {
                DocumentResourceContainer container = context.ResourceManager.FindResourceContainer(resourceDictionaryItem.DesignTimeSource) as DocumentResourceContainer;
                if (container != null)
                {
                    DesignTimeResourceContainer resourceContainer2 = Enumerable.FirstOrDefault <DesignTimeResourceContainer>((IEnumerable <DesignTimeResourceContainer>) this.designTimeResourceContainers, (Func <DesignTimeResourceContainer, bool>)(c => c.Container == container));
                    if (resourceContainer2 != null)
                    {
                        this.designTimeResourceContainers.Remove(resourceContainer2);
                    }
                }
            }
        }
 public DesignTimeResourceContainer(DocumentResourceContainer container)
 {
     this.Container     = container;
     this.ContainerName = container.Name;
     this.ProjectName   = container.ProjectItem.Project.Name;
 }