Beispiel #1
0
 public void CopyFileHere(FileNode node, bool performMove)
 {
     if (node.FileNodeStatus == FileNodeStatus.None)
     {
         AddExistingItemsToProject.CopyFile(node.FileName, this, false);
         if (performMove)
         {
             FileService.RemoveFile(node.FileName, false);
         }
     }
     else if (node.IsLink)
     {
         string          relFileName     = FileUtility.GetRelativePath(Project.Directory, node.FileName);
         FileNode        fileNode        = new FileNode(node.FileName, FileNodeStatus.InProject);
         FileProjectItem fileProjectItem = new FileProjectItem(Project, Project.GetDefaultItemType(node.FileName));
         fileProjectItem.Include = relFileName;
         fileProjectItem.SetEvaluatedMetadata("Link", Path.Combine(RelativePath, Path.GetFileName(node.FileName)));
         fileNode.ProjectItem = fileProjectItem;
         fileNode.AddTo(this);
         ProjectService.AddProjectItem(Project, fileProjectItem);
         if (performMove)
         {
             ProjectService.RemoveProjectItem(node.Project, node.ProjectItem);
             node.Remove();
         }
     }
     else
     {
         CopyFileHere(node.FileName, performMove);
     }
 }
		void AddFileToProject(ResourceStorage storage)
		{
			string resourceFileName = storage.OpenedFile.FileName;
			string formFileName = viewContent.PrimaryFileName;
			IProject project = GetProject(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 = 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();
			}
		}
		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 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();
					}
				}
			}
		}
Beispiel #5
0
        protected override void Initialize()
        {
            if (removeMe != null)
            {
                Nodes.Remove(removeMe);
                removeMe = null;
            }

            LoggingService.Info("Initialize DirectoryNode " + Directory);

            Dictionary <string, FileNode> fileNodeDictionary
                = new Dictionary <string, FileNode>(StringComparer.InvariantCultureIgnoreCase);
            Dictionary <FileNode, string>      dependendFileDictionary = new Dictionary <FileNode, string>();
            Dictionary <string, DirectoryNode> directoryNodeList       = new Dictionary <string, DirectoryNode>(StringComparer.InvariantCultureIgnoreCase);

            // Add files found in file system

            if (System.IO.Directory.Exists(Directory))
            {
                foreach (string subDirectory in System.IO.Directory.GetDirectories(Directory))
                {
                    if (Path.GetFileName(subDirectory) != ".svn")
                    {
                        DirectoryNode newDirectoryNode = DirectoryNodeFactory.CreateDirectoryNode(this, Project, subDirectory);
                        newDirectoryNode.AddTo(this);
                        directoryNodeList[Path.GetFileName(subDirectory)] = newDirectoryNode;
                    }
                }

                foreach (string file in System.IO.Directory.GetFiles(Directory))
                {
                    FileNode fileNode = new FileNode(file);
                    fileNodeDictionary[Path.GetFileName(file)] = fileNode;
                    fileNode.AddTo(this);
                }
            }
            if (Nodes.Count == 0)
            {
                SetClosedImage();
            }

            string relativeDirectoryPath = this.RelativePath;

            if (relativeDirectoryPath.Length > 0)
            {
                relativeDirectoryPath = relativeDirectoryPath.Replace('\\', '/') + '/';
            }

            // Add project items

            foreach (ProjectItem item in Project.Items)
            {
                if (item.ItemType == ItemType.WebReferenceUrl)
                {
                    DirectoryNode node;
                    if (directoryNodeList.TryGetValue(Path.GetFileName(item.FileName), out node))
                    {
                        if (node.FileNodeStatus == FileNodeStatus.None)
                        {
                            node.FileNodeStatus = FileNodeStatus.InProject;
                        }
                        node.ProjectItem = item;
                    }
                    continue;
                }
                FileProjectItem fileItem = item as FileProjectItem;
                if (fileItem == null)
                {
                    continue;
                }
                string virtualName = fileItem.VirtualName.Replace('\\', '/');
                if (virtualName.EndsWith("/"))
                {
                    virtualName = virtualName.Substring(0, virtualName.Length - 1);
                }
                string fileName = Path.GetFileName(virtualName);
                if (!string.Equals(virtualName, relativeDirectoryPath + fileName, StringComparison.InvariantCultureIgnoreCase))
                {
                    AddParentFolder(virtualName, relativeDirectoryPath, directoryNodeList);
                    continue;
                }

                if (item.ItemType == ItemType.Folder || item.ItemType == ItemType.WebReferences)
                {
                    DirectoryNode node;
                    if (directoryNodeList.TryGetValue(fileName, out node))
                    {
                        if (node.FileNodeStatus == FileNodeStatus.None)
                        {
                            node.FileNodeStatus = FileNodeStatus.InProject;
                        }
                        node.ProjectItem = item;
                    }
                    else
                    {
                        node = DirectoryNodeFactory.CreateDirectoryNode(item, FileNodeStatus.Missing);
                        node.AddTo(this);
                        directoryNodeList[fileName] = node;
                    }
                }
                else
                {
                    FileNode node;
                    if (fileItem.IsLink)
                    {
                        node = new FileNode(fileItem.FileName, FileNodeStatus.InProject);
                        node.AddTo(this);
                        fileNodeDictionary[fileName] = node;
                    }
                    else
                    {
                        if (fileNodeDictionary.TryGetValue(fileName, out node))
                        {
                            if (node.FileNodeStatus == FileNodeStatus.None)
                            {
                                node.FileNodeStatus = FileNodeStatus.InProject;
                            }
                        }
                        else
                        {
                            node = new FileNode(fileItem.FileName, FileNodeStatus.Missing);
                            node.AddTo(this);
                            fileNodeDictionary[fileName] = node;
                        }
                    }

                    node.ProjectItem = fileItem;
                    if (fileItem != null && fileItem.DependentUpon != null && fileItem.DependentUpon.Length > 0)
                    {
                        dependendFileDictionary[node] = fileItem.DependentUpon;
                    }
                }
            }

            // Insert 'code behind files'
            foreach (KeyValuePair <FileNode, string> pair in dependendFileDictionary)
            {
                string fileName = Path.GetFileName(pair.Value);
                if (!fileNodeDictionary.ContainsKey(fileName))
                {
                    continue;
                }
                AbstractProjectBrowserTreeNode parentNode = fileNodeDictionary[fileName];
                pair.Key.Parent.Nodes.Remove(pair.Key);
                if (NodeIsParent(parentNode, pair.Key))
                {
                    // is pair.Key a parent of parentNode?
                    // if yes, we have a parent cycle - break it by adding one node to the directory
                    pair.Key.AddTo(this);
                }
                else
                {
                    pair.Key.AddTo(parentNode);
                    if (pair.Key.FileNodeStatus != FileNodeStatus.Missing)
                    {
                        pair.Key.FileNodeStatus = FileNodeStatus.BehindFile;
                    }
                }
            }
            base.Initialize();
        }