コード例 #1
0
        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();
                    }
                }
            }
        }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
        FileProjectItem CreateNewFile(DirectoryNode upper, string fileName)
        {
            upper.Expanding();

            FileNode fileNode = new FileNode(fileName, FileNodeStatus.InProject);

            fileNode.AddTo(upper);
            fileNode.EnsureVisible();
            return(IncludeFileInProject.IncludeFileNode(fileNode));
        }
コード例 #4
0
        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));
                }
            }
        }
コード例 #5
0
		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));
				}
			}
		}
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
                    }
                }
            }
        }
コード例 #8
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();
                    }
                }
            }
        }
コード例 #9
0
		FileProjectItem CreateNewFile(DirectoryNode upper, string fileName)
		{
			upper.Expanding();
			
			FileNode fileNode = new FileNode(fileName, FileNodeStatus.InProject);
			fileNode.AddTo(upper);
			fileNode.EnsureVisible();
			return IncludeFileInProject.IncludeFileNode(fileNode);
		}
コード例 #10
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();
				}
			}
		}
コード例 #11
0
		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;
		}