public ImageResourceEditorDialog(IProject project, Type requiredResourceType, ProjectResourceInfo projectResource) : this(project, requiredResourceType, true) { if (projectResource == null) { throw new ArgumentNullException("projectResource"); } this.projectResourceRadioButton.Checked = true; this.originalImage = this.selectedImage = projectResource.OriginalValue; Image image = this.selectedImage as Image; if (image != null) { this.selectedImageIsProjectResource = true; this.SetPreviewImage(image); } else { Icon icon = this.selectedImage as Icon; if (icon != null) { this.selectedImageIsProjectResource = true; this.SetPreviewImage(icon.ToBitmap()); } } this.projectTreeScanningBackgroundWorker.RunWorkerAsync(projectResource); }
void ProjectTreeScanningBackgroundWorkerDoWork(object sender, DoWorkEventArgs e) { if (this.project == null) { return; } ProjectResourceInfo selectedProjectResource = e.Argument as ProjectResourceInfo; IProjectContent projectContent = ParserService.GetProjectContent(this.project); TreeNode root = new TreeNode(this.project.Name, 0, 0); TreeNode preSelection = null; TreeNode lastFileNode = null; int fileNodesCount = 0; foreach (FileProjectItem item in this.project.GetItemsOfType(ItemType.EmbeddedResource).OfType <FileProjectItem>().OrderBy(fpi => Path.GetFileName(fpi.VirtualName))) { if (this.projectTreeScanningBackgroundWorker.CancellationPending) { e.Cancel = true; break; } // Skip files where the generated class name // would conflict with an existing class. string namespaceName = item.GetEvaluatedMetadata("CustomToolNamespace"); if (string.IsNullOrEmpty(namespaceName)) { namespaceName = CustomToolsService.GetDefaultNamespace(item.Project, item.FileName); } IClass existingClass = projectContent.GetClass(namespaceName + "." + StronglyTypedResourceBuilder.VerifyResourceName(Path.GetFileNameWithoutExtension(item.FileName), projectContent.Language.CodeDomProvider), 0); if (existingClass != null) { if (!ProjectResourceService.IsGeneratedResourceClass(existingClass)) { continue; } } bool selectedFile = (selectedProjectResource != null) && FileUtility.IsEqualFileName(selectedProjectResource.ResourceFile, item.FileName); TreeNode file = null; try { foreach (KeyValuePair <string, object> r in this.GetResources(item.FileName).OrderBy(pair => pair.Key)) { if (this.projectTreeScanningBackgroundWorker.CancellationPending) { e.Cancel = true; break; } if (file == null) { file = CreateAndAddFileNode(root, item); } TreeNode resNode = new TreeNode(r.Key, 3, 3); resNode.Tag = r.Value; file.Nodes.Add(resNode); if (selectedFile) { if (String.Equals(r.Key, selectedProjectResource.ResourceKey, StringComparison.Ordinal)) { preSelection = resNode; } } } if (file != null) { lastFileNode = file; ++fileNodesCount; } } catch (Exception ex) { if (file == null) { file = CreateAndAddFileNode(root, item); } TreeNode error = new TreeNode(ex.Message, 4, 4); file.Nodes.Add(error); } } if (e.Cancel) { DisposeNodeImages(root); } else { // Preselect the file node if there is only one if (preSelection == null && fileNodesCount == 1) { preSelection = lastFileNode; } e.Result = new TreeScanResult(root, preSelection); } }