public void Save() { if (resources != null) { foreach (KeyValuePair <string, ResourceStorage> entry in resources) { string cultureName = entry.Key; string resourceFileName = CalcResourceFileName(FormFileName, cultureName); FileUtility.ObservedSave(new NamedFileOperationDelegate(entry.Value.Save), resourceFileName, FileErrorPolicy.Inform); IProject project = GetProject(FormFileName); // Add this resource file to the project if (entry.Value.ContainsData && project != null && !project.IsFileInProject(resourceFileName)) { FileProjectItem newFileProjectItem = new FileProjectItem(project, ItemType.EmbeddedResource); newFileProjectItem.DependentUpon = Path.GetFileName(FormFileName); newFileProjectItem.Include = FileUtility.GetRelativePath(project.Directory, resourceFileName); ProjectService.AddProjectItem(project, newFileProjectItem); PadDescriptor pd = WorkbenchSingleton.Workbench.GetPad(typeof(ProjectBrowserPad)); FileNode formFileNode = ((ProjectBrowserPad)pd.PadContent).ProjectBrowserControl.FindFileNode(FormFileName); if (formFileNode != null) { LoggingService.Info("FormFileNode found, adding subitem"); FileNode fileNode = new FileNode(resourceFileName, FileNodeStatus.BehindFile); fileNode.AddTo(formFileNode); fileNode.ProjectItem = newFileProjectItem; } project.Save(); } } } }
void AddFileToProject(ResourceStorage storage) { FileName resourceFileName = storage.OpenedFile.FileName; FileName formFileName = viewContent.PrimaryFileName; IProject project = SD.ProjectService.FindProjectContainingFile(formFileName); // Add this resource file to the project if (project != null && !project.IsFileInProject(resourceFileName)) { FileProjectItem newFileProjectItem = new FileProjectItem(project, ItemType.EmbeddedResource); newFileProjectItem.DependentUpon = Path.GetFileName(formFileName); newFileProjectItem.Include = FileUtility.GetRelativePath(project.Directory, resourceFileName); ProjectService.AddProjectItem(project, newFileProjectItem); FileService.FireFileCreated(resourceFileName, false); PadDescriptor pd = SD.Workbench.GetPad(typeof(ProjectBrowserPad)); FileNode formFileNode = ((ProjectBrowserPad)pd.PadContent).ProjectBrowserControl.FindFileNode(formFileName); if (formFileNode != null) { LoggingService.Info("FormFileNode found, adding subitem"); FileNode fileNode = new FileNode(resourceFileName, FileNodeStatus.BehindFile); fileNode.AddTo(formFileNode); fileNode.ProjectItem = newFileProjectItem; } project.Save(); } }
FileProjectItem CreateNewFile(DirectoryNode upper, string fileName) { upper.Expanding(); FileNode fileNode = new FileNode(fileName, FileNodeStatus.InProject); fileNode.AddTo(upper); fileNode.EnsureVisible(); return(IncludeFileInProject.IncludeFileNode(fileNode)); }
public override void Run() { WebReferenceNode node = Owner as WebReferenceNode; if (node != null && node.Project != null && node.ProjectItem != null) { WebReferenceUrl url = (WebReferenceUrl)node.ProjectItem; try { // Discover web services at url. DiscoveryClientProtocol protocol = DiscoverWebServices(url.UpdateFromURL); if (protocol != null) { // Save web services. WebReference webReference = new WebReference(url.Project, url.UpdateFromURL, node.Text, url.Namespace, protocol); webReference.Save(); // Update project. WebReferenceChanges changes = webReference.GetChanges(url.Project); if (changes.Changed) { foreach (ProjectItem itemRemoved in changes.ItemsRemoved) { ProjectService.RemoveProjectItem(url.Project, itemRemoved); FileService.RemoveFile(itemRemoved.FileName, false); } foreach (ProjectItem newItem in changes.NewItems) { ProjectService.AddProjectItem(url.Project, newItem); FileNode fileNode = new FileNode(newItem.FileName, FileNodeStatus.InProject); fileNode.AddTo(node); } ProjectBrowserPad.Instance.ProjectBrowserControl.TreeView.Sort(); url.Project.Save(); } // Update code completion. ParserService.ParseFile(webReference.WebProxyFileName); } } catch (WebException ex) { MessageService.ShowError(ex, String.Format(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.ProjectBrowser.RefreshWebReference.ReadServiceDescriptionError}"), url.UpdateFromURL)); } } }
public static FileProjectItem CopyFile(string fileName, DirectoryNode node, bool includeInProject) { string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(fileName)); if (!FileUtility.IsEqualFileName(fileName, copiedFileName)) { File.Copy(fileName, copiedFileName, true); } if (includeInProject) { FileNode fileNode; foreach (TreeNode childNode in node.AllNodes) { if (childNode is FileNode) { fileNode = (FileNode)childNode; if (FileUtility.IsEqualFileName(fileNode.FileName, copiedFileName)) { if (fileNode.FileNodeStatus == FileNodeStatus.Missing) { fileNode.FileNodeStatus = FileNodeStatus.InProject; } else if (fileNode.FileNodeStatus == FileNodeStatus.None) { return(IncludeFileInProject.IncludeFileNode(fileNode)); } return(fileNode.ProjectItem as FileProjectItem); } } } fileNode = new FileNode(copiedFileName); fileNode.AddTo(node); return(IncludeFileInProject.IncludeFileNode(fileNode)); } return(null); }
protected override void Initialize() { Dictionary <string, FileNode> fileNodeDictionary = new Dictionary <string, FileNode>((IEqualityComparer <string>)StringComparer.InvariantCultureIgnoreCase); Dictionary <string, DirectoryNode> directoryNodeList = new Dictionary <string, DirectoryNode>((IEqualityComparer <string>)StringComparer.InvariantCultureIgnoreCase); string relativeDirectoryPath = (this.RelativePath.Length <= 0) ? string.Empty : (this.RelativePath.Replace('\\', '/') + "/"); foreach (FileProjectItem item in this.Project.Items.OfType <FileProjectItem>()) { string virtualName = item.VirtualName.Replace('\\', '/'); if (virtualName.EndsWith("/", StringComparison.Ordinal)) { virtualName = virtualName.Substring(0, virtualName.Length - 1); } string fileName = Path.GetFileName(virtualName); if (!string.Equals(virtualName, relativeDirectoryPath + fileName, StringComparison.InvariantCultureIgnoreCase)) { this.AddParentFolder(virtualName, relativeDirectoryPath, directoryNodeList); // continue; } if (item.ItemType == ItemType.Folder || item.ItemType == ItemType.WebReferences) { DirectoryNode newDirectoryNode = DirectoryNodeFactory.CreateDirectoryNode(this, this.Project, fileName); if (!System.IO.Directory.Exists(item.FileName)) { newDirectoryNode.FileNodeStatus = FileNodeStatus.Missing; } newDirectoryNode.ProjectItem = item; newDirectoryNode.AddTo(this); directoryNodeList[fileName] = newDirectoryNode; } else { FileNode fileNode = new FileNode(item.FileName); if (!File.Exists(item.FileName)) { fileNode.FileNodeStatus = FileNodeStatus.Missing; } fileNode.ProjectItem = item; fileNodeDictionary[fileName] = fileNode; fileNode.AddTo(this); } } // Add files found in file system if (System.IO.Directory.Exists(this.Directory)) { foreach (string subDirectory in System.IO.Directory.GetDirectories(this.Directory)) { string filename = Path.GetFileName(subDirectory); if (filename != ".svn") { DirectoryNode node; if (directoryNodeList.TryGetValue(filename, out node)) { if (node.FileNodeStatus == FileNodeStatus.None) { node.FileNodeStatus = FileNodeStatus.InProject; } } else { node = DirectoryNodeFactory.CreateDirectoryNode(this, this.Project, subDirectory); node.AddTo(this); } } } foreach (string fullpath in System.IO.Directory.GetFiles(this.Directory)) { string file = Path.GetFileName(fullpath); FileNode node; if (fileNodeDictionary.TryGetValue(file, out node)) { if (node.FileNodeStatus == FileNodeStatus.None) { node.FileNodeStatus = FileNodeStatus.InProject; } } else { node = new FileNode(file); node.AddTo(this); } } } }
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(); } } } }
FileProjectItem CreateNewFile(DirectoryNode upper, string fileName) { upper.Expanding(); FileNode fileNode = new FileNode(fileName, FileNodeStatus.InProject); fileNode.AddTo(upper); fileNode.EnsureVisible(); return IncludeFileInProject.IncludeFileNode(fileNode); }
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(); } } }
public static FileProjectItem CopyFile(string fileName, DirectoryNode node, bool includeInProject) { string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(fileName)); if (!FileUtility.IsEqualFileName(fileName, copiedFileName)) { File.Copy(fileName, copiedFileName, true); } if (includeInProject) { FileNode fileNode; foreach (TreeNode childNode in node.AllNodes) { if (childNode is FileNode) { fileNode = (FileNode)childNode; if (FileUtility.IsEqualFileName(fileNode.FileName, copiedFileName)) { if (fileNode.FileNodeStatus == FileNodeStatus.Missing) { fileNode.FileNodeStatus = FileNodeStatus.InProject; } else if (fileNode.FileNodeStatus == FileNodeStatus.None) { return IncludeFileInProject.IncludeFileNode(fileNode); } return fileNode.ProjectItem as FileProjectItem; } } } fileNode = new FileNode(copiedFileName); fileNode.AddTo(node); return IncludeFileInProject.IncludeFileNode(fileNode); } return null; }