/// <summary> /// Copies or moves a file node (and the corresponding file, if applicable) to this directory, /// discarding its DependentUpon value. /// </summary> /// <param name="fileNode">The file node to copy or move.</param> /// <param name="performMove">true to move the file node, false to copy it.</param> 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.InsertSorted(this); ProjectService.AddProjectItem(Project, fileProjectItem); if (performMove) { ProjectService.RemoveProjectItem(node.Project, node.ProjectItem); node.Remove(); } } else { CopyFileHere(node.FileName, performMove); } }
//public override void DoDragDrop(IDataObject dataObject, DragDropEffects effect) public virtual void DoDragDrop(IDataObject dataObject, DragDropEffects effect) { if (dataObject.GetDataPresent(typeof(FileNode))) { // Dragging a file onto another creates a dependency. FileNode other = (FileNode)dataObject.GetData(typeof(FileNode)); LoggingService.Debug("ProjectBrowser: Dragging file '" + other.FileName + "' onto file '" + this.FileName + "'"); // Copy/move the file to the correct directory // if the target is in a different directory than the source. if (!FileUtility.IsEqualFileName(Path.GetDirectoryName(this.FileName), Path.GetDirectoryName(other.FileName))) { LoggingService.Debug("-> Source file is in different directory, performing " + effect.ToString()); ExtTreeNode p = this; DirectoryNode parentDirectory; do { p = (ExtTreeNode)p.Parent; parentDirectory = p as DirectoryNode; } while (parentDirectory == null && p != null); if (parentDirectory == null) { throw new InvalidOperationException("File '" + this.FileName + "' does not have a parent directory."); } LoggingService.Debug("-> Copying/Moving source file to parent directory of target: " + parentDirectory.Directory); string otherFileName = Path.GetFileName(other.FileName); parentDirectory.CopyFileHere(other, effect == DragDropEffects.Move); // Find the copied or moved file node again other = parentDirectory.AllNodes.OfType <FileNode>().SingleOrDefault(n => FileUtility.IsEqualFileName(Path.GetFileName(n.FileName), otherFileName)); } if (other != null) { other.Remove(); ((FileProjectItem)other.ProjectItem).DependentUpon = Path.GetFileName(this.FileName); other.FileNodeStatus = FileNodeStatus.BehindFile; other.InsertSorted(this); LoggingService.Debug("-> Created new dependency, saving solution"); ProjectService.SaveSolution(); } else { LoggingService.Debug("-> Could not find the copied or moved file node in the new parent directory."); } return; } //((ExtTreeNode)Parent).DoDragDrop(dataObject, effect); DragDrop.DoDragDrop(this, dataObject, effect); }
public override object Visit(FileNode fileNode, object data) { if (FileUtility.IsBaseDirectory(fileName, fileNode.FileName)) { ExtTreeNode parent = fileNode.Parent as ExtTreeNode; fileNode.Remove(); if (parent != null) { parent.Refresh(); } } else { fileNode.AcceptChildren(this, data); } return data; }
public override object Visit(FileNode fileNode, object data) { if (FileUtility.IsBaseDirectory(fileName, fileNode.FileName)) { ExtTreeNode parent = fileNode.Parent as ExtTreeNode; fileNode.Remove(); if (parent != null) { parent.Refresh(); } } else { fileNode.AcceptChildren(this, data); } return(data); }
public override void DoDragDrop(IDataObject dataObject, DragDropEffects effect) { PerformInitialization(); Expand(); try { if (dataObject.GetDataPresent(typeof(FileNode))) { FileNode fileNode = (FileNode)dataObject.GetData(typeof(FileNode)); LoggingService.Debug("ProjectBrowser: Dragging file '" + fileNode.FileName + "' onto directory '" + this.Directory + "'"); if (!FileUtility.IsEqualFileName(Directory, fileNode.FileName) && !FileUtility.IsEqualFileName(Directory, Path.GetDirectoryName(fileNode.FileName)) && !(fileNode.ProjectItem is FileProjectItem && FileUtility.IsEqualFileName(Directory, Path.GetDirectoryName(GetFullVirtualName((FileProjectItem)fileNode.ProjectItem))))) { LoggingService.Debug("-> Not in same directory, performing " + effect.ToString()); CopyFileHere(fileNode, effect == DragDropEffects.Move); } else { // Dragging a dependent file onto its parent directory // removes the dependency. LoggingService.Debug("-> In same directory, removing dependency"); ((FileProjectItem)fileNode.ProjectItem).DependentUpon = String.Empty; fileNode.Remove(); if (!File.Exists(fileNode.FileName)) { fileNode.FileNodeStatus = FileNodeStatus.Missing; } else { fileNode.FileNodeStatus = FileNodeStatus.InProject; } fileNode.InsertSorted(this); } } else if (dataObject.GetDataPresent(typeof(DirectoryNode))) { DirectoryNode directoryNode = (DirectoryNode)dataObject.GetData(typeof(DirectoryNode)); CopyDirectoryHere(directoryNode, effect == DragDropEffects.Move); } else if (dataObject.GetDataPresent(DataFormats.FileDrop)) { string[] files = (string[])dataObject.GetData(DataFormats.FileDrop); if (files != null) { foreach (string fileName in files) { if (System.IO.Directory.Exists(fileName)) { if (!FileUtility.IsBaseDirectory(fileName, Directory)) { CopyDirectoryHere(fileName, false); } } else { CopyFileHere(fileName, false); } } } } ProjectService.SaveSolution(); } catch (Exception e) { MessageService.ShowException(e); } }