diff options
author | Vsevolod Kukol <sevoku@microsoft.com> | 2016-09-16 10:03:30 +0300 |
---|---|---|
committer | Vsevolod Kukol <sevoku@microsoft.com> | 2016-09-16 13:41:43 +0300 |
commit | 5258bff5c4bb9fe148c2b49b5c1afc79f5c2e7b6 (patch) | |
tree | 40b89453566cc44a908dc1252e57898f33fa0117 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad | |
parent | 0000da699e09d9cec8f4276c721a346402722066 (diff) | |
parent | f6483f8a1c6d0790f2d8033a7e4d55e09b57a8bd (diff) |
Merge remote-tracking branch 'origin/master' into connected-services
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs index dee86e78bb..1a84fa148e 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/FolderNodeBuilder.cs @@ -153,13 +153,20 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad get; set; } + static FolderCommandHandler () + { + IdeApp.Workspace.LastWorkspaceItemClosed += (sender, e) => PreviousFolderPath = null; + } + public abstract string GetFolderPath (object dataObject); public override bool CanDropNode (object dataObject, DragOperation operation) { string targetDirectory = GetFolderPath (CurrentNode.DataItem); - - if (dataObject is ProjectFile) { + + if (dataObject is SolutionFolderFileNode) { + return true; + } else if (dataObject is ProjectFile) { ProjectFile file = (ProjectFile) dataObject; var srcDir = (file.Project != null && file.IsLink) ? file.Project.BaseDirectory.Combine (file.ProjectVirtualPath) @@ -197,12 +204,12 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad } foreach (object dataObject in dataObjects) - DropNode (projectsToSave, dataObject, groupedFiles, operation); + await DropNode (projectsToSave, dataObject, groupedFiles, operation); await IdeApp.ProjectOperations.SaveAsync (projectsToSave); } - void DropNode (HashSet<SolutionItem> projectsToSave, object dataObject, HashSet<ProjectFile> groupedFiles, DragOperation operation) + async System.Threading.Tasks.Task DropNode (HashSet<SolutionItem> projectsToSave, object dataObject, HashSet<ProjectFile> groupedFiles, DragOperation operation) { FilePath targetDirectory = GetFolderPath (CurrentNode.DataItem); FilePath source; @@ -263,7 +270,15 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad projectsToSave.Add (targetProject); return; } - else + else if (dataObject is SolutionFolderFileNode) { + var sff = (SolutionFolderFileNode)dataObject; + sff.Parent.Files.Remove (sff.FileName); + + await IdeApp.ProjectOperations.SaveAsync (sff.Parent.ParentSolution); + source = ((SolutionFolderFileNode)dataObject).FileName; + sourceProject = null; + what = null; + } else return; var targetPath = targetDirectory.Combine (source.FileName); @@ -299,7 +314,12 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad return; } } else if (dataObject is ProjectFile) { - foreach (var file in new FilePath[] { targetPath }.Concat (targetChildPaths)) { + var items = Enumerable.Repeat (targetPath, 1); + if (targetChildPaths != null) { + items = items.Concat (targetChildPaths); + } + + foreach (var file in items) { if (File.Exists (file)) if (!MessageService.Confirm (GettextCatalog.GetString ("The file '{0}' already exists. Do you want to overwrite it?", file.FileName), AlertButton.OverwriteFile)) return; @@ -370,7 +390,7 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad // control related files such as .svn directories // Note: if we are transferring a ProjectFile, this will copy/move the ProjectFile's DependentChildren as well. - IdeApp.ProjectOperations.TransferFiles (monitor, sourceProject, source, targetProject, targetPath, move, true); + IdeApp.ProjectOperations.TransferFiles (monitor, sourceProject, source, targetProject, targetPath, move, sourceProject != null); } } @@ -381,7 +401,7 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad var targetRoot = ((FilePath) GetFolderPath (CurrentNode.DataItem)).CanonicalPath; AddFileDialog fdiag = new AddFileDialog (GettextCatalog.GetString ("Add files")); - fdiag.CurrentFolder = !PreviousFolderPath.IsNullOrEmpty ? PreviousFolderPath : targetRoot; + fdiag.CurrentFolder = !PreviousFolderPath.IsNullOrEmpty && !PreviousFolderPath.IsChildPathOf (project.ParentSolution.BaseDirectory) ? PreviousFolderPath : targetRoot; fdiag.SelectMultiple = true; fdiag.TransientFor = IdeApp.Workbench.RootWindow; fdiag.BuildActions = project.GetBuildActions (); |