コード例 #1
0
        public override void Run()
        {
            TreeNode      selectedNode = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode;
            DirectoryNode node         = selectedNode as DirectoryNode;

            Directory.CreateDirectory(node.Directory);
            IncludeFileInProject.IncludeDirectoryNode(node, false);
        }
コード例 #2
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));
        }
コード例 #3
0
        DirectoryNode CreateNewDirectory(DirectoryNode upper, string directoryName)
        {
            upper.Expanding();
            Directory.CreateDirectory(directoryName);

            DirectoryNode directoryNode = new DirectoryNode(directoryName, FileNodeStatus.InProject);

            directoryNode.AddTo(upper);

            IncludeFileInProject.IncludeDirectoryNode(directoryNode, false);
            return(directoryNode);
        }
コード例 #4
0
        DirectoryNode CreateNewDirectory(DirectoryNode upper, string directoryName)
        {
            upper.Expanding();
            Directory.CreateDirectory(directoryName);
            FileService.FireFileCreated(directoryName, true);

            DirectoryNode directoryNode = new DirectoryNode(directoryName, FileNodeStatus.InProject);

            directoryNode.InsertSorted(upper);

            IncludeFileInProject.IncludeDirectoryNode(directoryNode, false);
            return(directoryNode);
        }
コード例 #5
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))
            {
                FileService.CopyFile(fileName, copiedFileName, false, 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.InsertSorted(node);
                return(IncludeFileInProject.IncludeFileNode(fileNode));
            }
            return(null);
        }
コード例 #6
0
        public static void CopyDirectory(string directoryName, DirectoryNode node, bool includeInProject)
        {
            directoryName = FileUtility.NormalizePath(directoryName);
            string copiedFileName = Path.Combine(node.Directory, Path.GetFileName(directoryName));

            LoggingService.Debug("Copy " + directoryName + " to " + copiedFileName);
            if (!FileUtility.IsEqualFileName(directoryName, copiedFileName))
            {
                if (includeInProject && ProjectService.OpenSolution != null)
                {
                    // get ProjectItems in source directory
                    foreach (IProject project in ProjectService.OpenSolution.Projects)
                    {
                        if (!FileUtility.IsBaseDirectory(project.Directory, directoryName))
                        {
                            continue;
                        }
                        LoggingService.Debug("Searching for child items in " + project.Name);
                        foreach (ProjectItem item in project.Items)
                        {
                            FileProjectItem fileItem = item as FileProjectItem;
                            if (fileItem == null)
                            {
                                continue;
                            }
                            string virtualFullName = Path.Combine(project.Directory, fileItem.VirtualName);
                            if (FileUtility.IsBaseDirectory(directoryName, virtualFullName))
                            {
                                if (item.ItemType == ItemType.Folder && FileUtility.IsEqualFileName(directoryName, virtualFullName))
                                {
                                    continue;
                                }
                                LoggingService.Debug("Found file " + virtualFullName);
                                FileProjectItem newItem = new FileProjectItem(node.Project, fileItem.ItemType);
                                if (FileUtility.IsBaseDirectory(directoryName, fileItem.FileName))
                                {
                                    newItem.FileName = FileUtility.RenameBaseDirectory(fileItem.FileName, directoryName, copiedFileName);
                                }
                                else
                                {
                                    newItem.FileName = fileItem.FileName;
                                }
                                fileItem.CopyMetadataTo(newItem);
                                if (fileItem.IsLink)
                                {
                                    string newVirtualFullName = FileUtility.RenameBaseDirectory(virtualFullName, directoryName, copiedFileName);
                                    fileItem.SetEvaluatedMetadata("Link", FileUtility.GetRelativePath(node.Project.Directory, newVirtualFullName));
                                }
                                ProjectService.AddProjectItem(node.Project, newItem);
                            }
                        }
                    }
                }

                FileService.CopyFile(directoryName, copiedFileName, true, false);
                DirectoryNode newNode = new DirectoryNode(copiedFileName);
                newNode.InsertSorted(node);
                if (includeInProject)
                {
                    IncludeFileInProject.IncludeDirectoryNode(newNode, false);
                }
                newNode.Expanding();
            }
            else if (includeInProject)
            {
                foreach (TreeNode childNode in node.Nodes)
                {
                    if (childNode is DirectoryNode)
                    {
                        DirectoryNode directoryNode = (DirectoryNode)childNode;
                        if (FileUtility.IsEqualFileName(directoryNode.Directory, copiedFileName))
                        {
                            IncludeFileInProject.IncludeDirectoryNode(directoryNode, true);
                        }
                    }
                }
            }
        }
コード例 #7
0
        public override void Run()
        {
            ProjectBrowserPad.Instance.BringToFront();
            DirectoryNode node = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedDirectoryNode;

            if (node == null)
            {
                return;
            }
            node.Expanding();
            node.Expand();

            using (FolderBrowserDialog dlg = new FolderBrowserDialog()) {
                dlg.SelectedPath        = node.Directory;
                dlg.ShowNewFolderButton = false;
                if (dlg.ShowDialog(WorkbenchSingleton.MainForm) == DialogResult.OK)
                {
                    string folderName       = dlg.SelectedPath;
                    string copiedFolderName = Path.Combine(node.Directory, Path.GetFileName(folderName));
                    if (!FileUtility.IsEqualFileName(folderName, copiedFolderName))
                    {
                        if (FileUtility.IsBaseDirectory(folderName, node.Directory))
                        {
                            MessageService.ShowError("Cannot copy " + folderName + " to " + copiedFolderName);
                            return;
                        }
                        if (Directory.Exists(copiedFolderName))
                        {
                            MessageService.ShowError("Cannot copy " + folderName + " to " + copiedFolderName + ": target already exists.");
                            return;
                        }
                        int res = MessageService.ShowCustomDialog(
                            "${res:ProjectComponent.ContextMenu.ExistingFolder}",
                            "${res:ProjectComponent.ContextMenu.ExistingFolder.CopyQuestion}",
                            0, 1,
                            "${res:ProjectComponent.ContextMenu.AddExistingFiles.Copy}",
                            "${res:Global.CancelButtonText}");
                        if (res != 0)
                        {
                            return;
                        }
                        if (!FileService.CopyFile(folderName, copiedFolderName, true, false))
                        {
                            return;
                        }
                    }
                    // ugly HACK to get IncludeDirectoryNode to work properly
                    AbstractProjectBrowserTreeNode.ShowAll = true;
                    try {
                        node.RecreateSubNodes();
                        DirectoryNode newNode = node.AllNodes.OfType <DirectoryNode>()
                                                .FirstOrDefault(dir => FileUtility.IsEqualFileName(copiedFolderName, dir.Directory));
                        if (newNode != null)
                        {
                            newNode.Expanding();
                            IncludeFileInProject.IncludeDirectoryNode(newNode, true);
                        }
                    } finally {
                        AbstractProjectBrowserTreeNode.ShowAll = false;
                    }
                    node.RecreateSubNodes();
                }
            }
        }