コード例 #1
0
        List <ProjectItem> CreateProjectItems()
        {
            List <ProjectItem> items = new List <ProjectItem>();

            // Web references item.
            if (!ProjectContainsWebReferencesFolder(project))
            {
                WebReferencesProjectItem webReferencesItem = new WebReferencesProjectItem(project);
                webReferencesItem.Include = "Web References\\";
                items.Add(webReferencesItem);
            }

            // Web reference url.
            webReferenceUrl               = new WebReferenceUrl(project);
            webReferenceUrl.Include       = url;
            webReferenceUrl.UpdateFromURL = url;
            webReferenceUrl.RelPath       = relativePath;
            webReferenceUrl.Namespace     = proxyNamespace;
            items.Add(webReferenceUrl);

            // References.
            foreach (DictionaryEntry entry in protocol.References)
            {
                DiscoveryReference discoveryRef = entry.Value as DiscoveryReference;
                if (discoveryRef != null)
                {
                    FileProjectItem item = new FileProjectItem(project, ItemType.None);
                    item.Include = Path.Combine(relativePath, discoveryRef.DefaultFilename);
                    items.Add(item);
                }
            }

            // Proxy
            FileProjectItem proxyItem = new FileProjectItem(project, ItemType.Compile);

            proxyItem.Include = GetProxyFileName();
            proxyItem.SetEvaluatedMetadata("AutoGen", "True");
            proxyItem.SetEvaluatedMetadata("DesignTime", "True");
            proxyItem.DependentUpon = "Reference.map";
            items.Add(proxyItem);

            // Reference map.
            FileProjectItem mapItem = new FileProjectItem(project, ItemType.None);

            mapItem.Include = Path.Combine(relativePath, "Reference.map");
            mapItem.SetEvaluatedMetadata("Generator", "MSDiscoCodeGenerator");
            mapItem.SetEvaluatedMetadata("LastGenOutput", "Reference.cs");
            items.Add(mapItem);

            // System.Web.Services reference.
            if (!ProjectContainsWebServicesReference(project))
            {
                ReferenceProjectItem webServicesReferenceItem = new ReferenceProjectItem(project, "System.Web.Services");
                items.Add(webServicesReferenceItem);
            }
            return(items);
        }
コード例 #2
0
        FileProjectItem CreateFileProjectItemUsingPathRelativeToProject(ItemType itemType, string include)
        {
            var fileItem = new FileProjectItem(MSBuildProject, itemType)
            {
                Include = include
            };

            if (IsLink(include))
            {
                fileItem.SetEvaluatedMetadata("Link", Path.GetFileName(include));
            }
            return(fileItem);
        }
コード例 #3
0
		protected IEnumerable<FileProjectItem> AddExistingItems()
		{
			DirectoryNode node = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedDirectoryNode;
			if (node == null) {
				return null;
			}
			node.Expanding();
			node.Expand();
			
			List<FileProjectItem> addedItems = new List<FileProjectItem>();
			
			using (OpenFileDialog fdiag  = new OpenFileDialog()) {
				fdiag.AddExtension = true;
				var fileFilters    = ProjectService.GetFileFilters();
				
				fdiag.InitialDirectory = node.Directory;
				fdiag.FilterIndex     = GetFileFilterIndex(node.Project, fileFilters);
				fdiag.Filter          = String.Join("|", fileFilters);
				fdiag.Multiselect     = true;
				fdiag.CheckFileExists = true;
				fdiag.Title = StringParser.Parse("${res:ProjectComponent.ContextMenu.AddExistingFiles}");
				
				if (fdiag.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window) == DialogResult.OK) {
					List<KeyValuePair<string, string>> fileNames = new List<KeyValuePair<string, string>>(fdiag.FileNames.Length);
					foreach (string fileName in fdiag.FileNames) {
						fileNames.Add(new KeyValuePair<string, string>(fileName, ""));
					}
					bool addedDependentFiles = false;
					foreach (string fileName in fdiag.FileNames) {
						foreach (string additionalFile in FindAdditionalFiles(fileName)) {
							if (!fileNames.Exists(delegate(KeyValuePair<string, string> pair) {
							                      	return FileUtility.IsEqualFileName(pair.Key, additionalFile);
							                      }))
							{
								addedDependentFiles = true;
								fileNames.Add(new KeyValuePair<string, string>(additionalFile, Path.GetFileName(fileName)));
							}
						}
					}
					
					
					
					string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(fileNames[0].Key));
					if (!FileUtility.IsEqualFileName(fileNames[0].Key, copiedFileName)) {
						int res = MessageService.ShowCustomDialog(
							fdiag.Title, "${res:ProjectComponent.ContextMenu.AddExistingFiles.Question}",
							0, 2,
							"${res:ProjectComponent.ContextMenu.AddExistingFiles.Copy}",
							"${res:ProjectComponent.ContextMenu.AddExistingFiles.Link}",
							"${res:Global.CancelButtonText}");
						if (res == 1) {
							// Link
							foreach (KeyValuePair<string, string> pair in fileNames) {
								string fileName = pair.Key;
								string relFileName = FileUtility.GetRelativePath(node.Project.Directory, fileName);
								FileNode fileNode = new FileNode(fileName, FileNodeStatus.InProject);
								FileProjectItem fileProjectItem = new FileProjectItem(node.Project, node.Project.GetDefaultItemType(fileName), relFileName);
								fileProjectItem.SetEvaluatedMetadata("Link", Path.Combine(node.RelativePath, Path.GetFileName(fileName)));
								fileProjectItem.DependentUpon = pair.Value;
								addedItems.Add(fileProjectItem);
								fileNode.ProjectItem = fileProjectItem;
								fileNode.InsertSorted(node);
								ProjectService.AddProjectItem(node.Project, fileProjectItem);
							}
							node.Project.Save();
							if (addedDependentFiles)
								node.RecreateSubNodes();
							return addedItems.AsReadOnly();
						}
						if (res == 2) {
							// Cancel
							return addedItems.AsReadOnly();
						}
						// only continue for res==0 (Copy)
					}
					bool replaceAll = false;
					foreach (KeyValuePair<string, string> pair in fileNames) {
						copiedFileName = Path.Combine(node.Directory, Path.GetFileName(pair.Key));
						if (!replaceAll && File.Exists(copiedFileName) && !FileUtility.IsEqualFileName(pair.Key, copiedFileName)) {
							ReplaceExistingFile res = ShowReplaceExistingFileDialog(fdiag.Title, Path.GetFileName(pair.Key), true);
							if (res == ReplaceExistingFile.YesToAll) {
								replaceAll = true;
							} else if (res == ReplaceExistingFile.No) {
								continue;
							} else if (res == ReplaceExistingFile.Cancel) {
								break;
							}
						}
						FileProjectItem item = CopyFile(pair.Key, node, true);
						if (item != null) {
							addedItems.Add(item);
							item.DependentUpon = pair.Value;
						}
					}
					node.Project.Save();
					if (addedDependentFiles)
						node.RecreateSubNodes();
				}
			}
			
			return addedItems.AsReadOnly();
		}
コード例 #4
0
        public static void CopyDirectory(string directoryName, DirectoryNode node, bool includeInProject)
        {
            directoryName = FileUtility.NormalizePath(directoryName);
            string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(directoryName));

            LoggingService.Debug("Copy " + directoryName + " to " + copiedFileName);
            if (!FileUtility.IsEqualFileName(directoryName, copiedFileName))
            {
                if (includeInProject && ProjectService.OpenSolution != null)
                {
                    // get ProjectItems in source directory
                    foreach (IProject project in ProjectService.OpenSolution.Projects)
                    {
                        if (!FileUtility.IsBaseDirectory(project.Directory, directoryName))
                        {
                            continue;
                        }
                        LoggingService.Debug("Searching for child items in " + project.Name);
                        foreach (ProjectItem item in project.Items)
                        {
                            FileProjectItem fileItem = item as FileProjectItem;
                            if (fileItem == null)
                            {
                                continue;
                            }
                            string virtualFullName = Path.Combine(project.Directory, fileItem.VirtualName);
                            if (FileUtility.IsBaseDirectory(directoryName, virtualFullName))
                            {
                                if (item.ItemType == ItemType.Folder && FileUtility.IsEqualFileName(directoryName, virtualFullName))
                                {
                                    continue;
                                }
                                LoggingService.Debug("Found file " + virtualFullName);
                                FileProjectItem newItem = new FileProjectItem(node.Project, fileItem.ItemType);
                                if (FileUtility.IsBaseDirectory(directoryName, fileItem.FileName))
                                {
                                    newItem.FileName = FileUtility.RenameBaseDirectory(fileItem.FileName, directoryName, copiedFileName);
                                }
                                else
                                {
                                    newItem.FileName = fileItem.FileName;
                                }
                                fileItem.CopyMetadataTo(newItem);
                                if (fileItem.IsLink)
                                {
                                    string newVirtualFullName = FileUtility.RenameBaseDirectory(virtualFullName, directoryName, copiedFileName);
                                    fileItem.SetEvaluatedMetadata("Link", FileUtility.GetRelativePath(node.Project.Directory, newVirtualFullName));
                                }
                                ProjectService.AddProjectItem(node.Project, newItem);
                            }
                        }
                    }
                }

                FileService.CopyFile(directoryName, copiedFileName, true, false);
                DirectoryNode newNode = new DirectoryNode(copiedFileName);
                newNode.InsertSorted(node);
                if (includeInProject)
                {
                    IncludeFileInProject.IncludeDirectoryNode(newNode, false);
                }
                newNode.Expanding();
            }
            else if (includeInProject)
            {
                foreach (TreeNode childNode in node.Nodes)
                {
                    if (childNode is DirectoryNode)
                    {
                        DirectoryNode directoryNode = (DirectoryNode)childNode;
                        if (FileUtility.IsEqualFileName(directoryNode.Directory, copiedFileName))
                        {
                            IncludeFileInProject.IncludeDirectoryNode(directoryNode, true);
                        }
                    }
                }
            }
        }
コード例 #5
0
        protected IEnumerable <FileProjectItem> AddExistingItems()
        {
            DirectoryNode node = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedDirectoryNode;

            if (node == null)
            {
                return(null);
            }
            node.Expanding();
            node.Expand();

            List <FileProjectItem> addedItems = new List <FileProjectItem>();

            using (OpenFileDialog fdiag = new OpenFileDialog()) {
                fdiag.AddExtension = true;
                string[] fileFilters = (string[])(AddInTree.GetTreeNode("/SharpDevelop/Workbench/FileFilter").BuildChildItems(this)).ToArray(typeof(string));

                fdiag.InitialDirectory = node.Directory;
                fdiag.FilterIndex      = GetFileFilterIndex(node.Project, fileFilters);
                fdiag.Filter           = String.Join("|", fileFilters);
                fdiag.Multiselect      = true;
                fdiag.CheckFileExists  = true;
                fdiag.Title            = StringParser.Parse("${res:ProjectComponent.ContextMenu.AddExistingFiles}");

                if (fdiag.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK)
                {
                    List <KeyValuePair <string, string> > fileNames = new List <KeyValuePair <string, string> >(fdiag.FileNames.Length);
                    foreach (string fileName in fdiag.FileNames)
                    {
                        fileNames.Add(new KeyValuePair <string, string>(fileName, ""));
                    }
                    bool addedDependentFiles = false;
                    foreach (string fileName in fdiag.FileNames)
                    {
                        foreach (string additionalFile in FindAdditionalFiles(fileName))
                        {
                            if (!fileNames.Exists(delegate(KeyValuePair <string, string> pair) {
                                return(FileUtility.IsEqualFileName(pair.Key, additionalFile));
                            }))
                            {
                                addedDependentFiles = true;
                                fileNames.Add(new KeyValuePair <string, string>(additionalFile, Path.GetFileName(fileName)));
                            }
                        }
                    }



                    string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(fileNames[0].Key));
                    if (!FileUtility.IsEqualFileName(fileNames[0].Key, copiedFileName))
                    {
                        int res = MessageService.ShowCustomDialog(
                            fdiag.Title, "${res:ProjectComponent.ContextMenu.AddExistingFiles.Question}",
                            0, 2,
                            "${res:ProjectComponent.ContextMenu.AddExistingFiles.Copy}",
                            "${res:ProjectComponent.ContextMenu.AddExistingFiles.Link}",
                            "${res:Global.CancelButtonText}");
                        if (res == 1)
                        {
                            // Link
                            foreach (KeyValuePair <string, string> pair in fileNames)
                            {
                                string          fileName        = pair.Key;
                                string          relFileName     = FileUtility.GetRelativePath(node.Project.Directory, fileName);
                                FileNode        fileNode        = new FileNode(fileName, FileNodeStatus.InProject);
                                FileProjectItem fileProjectItem = new FileProjectItem(node.Project, node.Project.GetDefaultItemType(fileName), relFileName);
                                fileProjectItem.SetEvaluatedMetadata("Link", Path.Combine(node.RelativePath, Path.GetFileName(fileName)));
                                fileProjectItem.DependentUpon = pair.Value;
                                addedItems.Add(fileProjectItem);
                                fileNode.ProjectItem = fileProjectItem;
                                fileNode.InsertSorted(node);
                                ProjectService.AddProjectItem(node.Project, fileProjectItem);
                            }
                            node.Project.Save();
                            if (addedDependentFiles)
                            {
                                node.RecreateSubNodes();
                            }
                            return(addedItems.AsReadOnly());
                        }
                        if (res == 2)
                        {
                            // Cancel
                            return(addedItems.AsReadOnly());
                        }
                        // only continue for res==0 (Copy)
                    }
                    bool replaceAll = false;
                    foreach (KeyValuePair <string, string> pair in fileNames)
                    {
                        copiedFileName = Path.Combine(node.Directory, Path.GetFileName(pair.Key));
                        if (!replaceAll && File.Exists(copiedFileName) && !FileUtility.IsEqualFileName(pair.Key, copiedFileName))
                        {
                            ReplaceExistingFile res = ShowReplaceExistingFileDialog(fdiag.Title, Path.GetFileName(pair.Key), true);
                            if (res == ReplaceExistingFile.YesToAll)
                            {
                                replaceAll = true;
                            }
                            else if (res == ReplaceExistingFile.No)
                            {
                                continue;
                            }
                            else if (res == ReplaceExistingFile.Cancel)
                            {
                                break;
                            }
                        }
                        FileProjectItem item = CopyFile(pair.Key, node, true);
                        if (item != null)
                        {
                            addedItems.Add(item);
                            item.DependentUpon = pair.Value;
                        }
                    }
                    node.Project.Save();
                    if (addedDependentFiles)
                    {
                        node.RecreateSubNodes();
                    }
                }
            }

            return(addedItems.AsReadOnly());
        }
コード例 #6
0
		public override void Run()
		{
			TreeNode selectedNode = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode;
			DirectoryNode node = selectedNode as DirectoryNode;
			if (node == null) {
				node = selectedNode.Parent as DirectoryNode;
			}
			if (node == null) {
				return;
			}
			node.Expanding();
			node.Expand();
			
			using (OpenFileDialog fdiag  = new OpenFileDialog()) {
				fdiag.AddExtension    = true;
				string[] fileFilters  = (string[])(AddInTree.GetTreeNode("/SharpDevelop/Workbench/FileFilter").BuildChildItems(this)).ToArray(typeof(string));
				
				fdiag.FilterIndex     = GetFileFilterIndex(node.Project, fileFilters);
				fdiag.Filter          = String.Join("|", fileFilters);
				fdiag.Multiselect     = true;
				fdiag.CheckFileExists = true;
				fdiag.Title = StringParser.Parse("${res:ProjectComponent.ContextMenu.AddExistingFiles}");
				
				if (fdiag.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK) {
					List<KeyValuePair<string, string>> fileNames = new List<KeyValuePair<string, string>>(fdiag.FileNames.Length);
					foreach (string fileName in fdiag.FileNames) {
						fileNames.Add(new KeyValuePair<string, string>(fileName, ""));
					}
					bool addedDependentFiles = false;
					foreach (string fileName in fdiag.FileNames) {
						foreach (string additionalFile in FindAdditionalFiles(fileName)) {
							if (!fileNames.Exists(delegate(KeyValuePair<string, string> pair) {
							                      	return FileUtility.IsEqualFileName(pair.Key, additionalFile);
							                      }))
							{
								addedDependentFiles = true;
								fileNames.Add(new KeyValuePair<string, string>(additionalFile, Path.GetFileName(fileName)));
							}
						}
					}
					
					
					
					string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(fileNames[0].Key));
					if (!FileUtility.IsEqualFileName(fileNames[0].Key, copiedFileName)) {
						int res = MessageService.ShowCustomDialog(fdiag.Title, "${res:ProjectComponent.ContextMenu.AddExistingFiles.Question}",
						                                          0, 2,
						                                          "${res:ProjectComponent.ContextMenu.AddExistingFiles.Copy}",
						                                          "${res:ProjectComponent.ContextMenu.AddExistingFiles.Link}",
						                                          "${res:Global.CancelButtonText}");
						if (res == 1) {
							foreach (KeyValuePair<string, string> pair in fileNames) {
								string fileName = pair.Key;
								string relFileName = FileUtility.GetRelativePath(node.Project.Directory, fileName);
								FileNode fileNode = new FileNode(fileName, FileNodeStatus.InProject);
								FileProjectItem fileProjectItem = new FileProjectItem(node.Project, node.Project.GetDefaultItemType(fileName), relFileName);
								fileProjectItem.SetEvaluatedMetadata("Link", Path.Combine(node.RelativePath, Path.GetFileName(fileName)));
								fileProjectItem.DependentUpon = pair.Value;
								fileNode.ProjectItem = fileProjectItem;
								fileNode.AddTo(node);
								ProjectService.AddProjectItem(node.Project, fileProjectItem);
							}
							node.Project.Save();
							if (addedDependentFiles)
								node.RecreateSubNodes();
							return;
						}
						if (res == 2) {
							return;
						}
					}
					bool replaceAll = false;
					foreach (KeyValuePair<string, string> pair in fileNames) {
						copiedFileName = Path.Combine(node.Directory, Path.GetFileName(pair.Key));
						if (!replaceAll && File.Exists(copiedFileName) && !FileUtility.IsEqualFileName(pair.Key, copiedFileName)) {
							ReplaceExistingFile res = ShowReplaceExistingFileDialog(fdiag.Title, Path.GetFileName(pair.Key), true);
							if (res == ReplaceExistingFile.YesToAll) {
								replaceAll = true;
							} else if (res == ReplaceExistingFile.No) {
								continue;
							} else if (res == ReplaceExistingFile.Cancel) {
								break;
							}
						}
						FileProjectItem item = CopyFile(pair.Key, node, true);
						if (item != null) {
							item.DependentUpon = pair.Value;
						}
					}
					node.Project.Save();
					if (addedDependentFiles)
						node.RecreateSubNodes();
				}
			}
		}
コード例 #7
0
        protected IEnumerable <FileProjectItem> AddExistingItems()
        {
            DirectoryNode node = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedDirectoryNode;

            if (node == null)
            {
                return(null);
            }
            //node.Expanding();
            node.ExpandSubtree();

            List <FileProjectItem> addedItems = new List <FileProjectItem>();

            //using (OpenFileDialog fdiag  = new OpenFileDialog()) {
            string[] files = null;
            Caliburn.Micro.Execute.OnUIThread(delegate {
                Microsoft.Win32.OpenFileDialog fileDialog = new Microsoft.Win32.OpenFileDialog {
                    Title            = StringParser.Parse("${res:ProjectComponent.ContextMenu.AddExistingFiles}"),
                    CheckFileExists  = true,
                    RestoreDirectory = true,
                    InitialDirectory = node.Directory,
                    AddExtension     = true,
                    FilterIndex      = GetFileFilterIndex(node.Project, ProjectService.GetFileFilters()),
                    Filter           = String.Join("|", ProjectService.GetFileFilters()),
                    Multiselect      = true
                };

                if (fileDialog.ShowDialog() == true)
                {
                    files = fileDialog.FileNames;
                }
            });

            //if (fdiag.ShowDialog(SD.WinForms.MainWin32Window) == DialogResult.OK)
            {
                List <KeyValuePair <string, string> > fileNames = new List <KeyValuePair <string, string> >(files.Length);
                foreach (string fileName in files)
                {
                    fileNames.Add(new KeyValuePair <string, string>(fileName, ""));
                }
                bool addedDependentFiles = false;
                foreach (string fileName in files)
                {
                    foreach (string additionalFile in FindAdditionalFiles(fileName))
                    {
                        if (!fileNames.Exists(delegate(KeyValuePair <string, string> pair) {
                            return(FileUtility.IsEqualFileName(pair.Key, additionalFile));
                        }))
                        {
                            addedDependentFiles = true;
                            fileNames.Add(new KeyValuePair <string, string>(additionalFile, Path.GetFileName(fileName)));
                        }
                    }
                }



                string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(fileNames[0].Key));
                if (!FileUtility.IsEqualFileName(fileNames[0].Key, copiedFileName))
                {
                    int res = MessageService.ShowCustomDialog(
                        StringParser.Parse("${res:ProjectComponent.ContextMenu.AddExistingFiles}"),
                        "${res:ProjectComponent.ContextMenu.AddExistingFiles.Question}",
                        0, 2,
                        "${res:ProjectComponent.ContextMenu.AddExistingFiles.Copy}",
                        "${res:ProjectComponent.ContextMenu.AddExistingFiles.Link}",
                        "${res:Global.CancelButtonText}");
                    if (res == 1)
                    {
                        // Link
                        foreach (KeyValuePair <string, string> pair in fileNames)
                        {
                            string          fileName        = pair.Key;
                            string          relFileName     = FileUtility.GetRelativePath(node.Project.Directory, fileName);
                            FileNode        fileNode        = new FileNode(fileName, FileNodeStatus.InProject);
                            FileProjectItem fileProjectItem = new FileProjectItem(node.Project, node.Project.GetDefaultItemType(fileName), relFileName);
                            fileProjectItem.SetEvaluatedMetadata("Link", Path.Combine(node.RelativePath, Path.GetFileName(fileName)));
                            fileProjectItem.DependentUpon = pair.Value;
                            addedItems.Add(fileProjectItem);
                            fileNode.ProjectItem = fileProjectItem;
                            fileNode.InsertSorted(node);
                            ProjectService.AddProjectItem(node.Project, fileProjectItem);
                        }
                        node.Project.Save();
                        if (addedDependentFiles)
                        {
                            node.RecreateSubNodes();
                        }
                        return(addedItems.AsReadOnly());
                    }
                    if (res == 2)
                    {
                        // Cancel
                        return(addedItems.AsReadOnly());
                    }
                    // only continue for res==0 (Copy)
                }
                bool replaceAll = false;
                foreach (KeyValuePair <string, string> pair in fileNames)
                {
                    copiedFileName = Path.Combine(node.Directory, Path.GetFileName(pair.Key));
                    if (!replaceAll && File.Exists(copiedFileName) && !FileUtility.IsEqualFileName(pair.Key, copiedFileName))
                    {
                        ReplaceExistingFile res = ShowReplaceExistingFileDialog(
                            StringParser.Parse("${res:ProjectComponent.ContextMenu.AddExistingFiles}"),
                            Path.GetFileName(pair.Key), true);
                        if (res == ReplaceExistingFile.YesToAll)
                        {
                            replaceAll = true;
                        }
                        else if (res == ReplaceExistingFile.No)
                        {
                            continue;
                        }
                        else if (res == ReplaceExistingFile.Cancel)
                        {
                            break;
                        }
                    }
                    FileProjectItem item = CopyFile(pair.Key, node, true);
                    if (item != null)
                    {
                        addedItems.Add(item);
                        item.DependentUpon = pair.Value;
                    }
                }
                node.Project.Save();
                if (addedDependentFiles)
                {
                    node.RecreateSubNodes();
                }
            }
            //}

            return(addedItems.AsReadOnly());
        }