Beispiel #1
0
 /// <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);
     }
 }
Beispiel #2
0
        //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);
 }
Beispiel #5
0
        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);
            }
        }
		/// <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);
			}
		}