private static void TranslateSolutionPaths(ExportData import, string newSolutionName) { var newSolutionPath = Path.GetDirectoryName(newSolutionName); var originalSolutionName = import.SolutionName; var originalSolutionPath = Path.GetDirectoryName(originalSolutionName); foreach (var group in import.Groups) { var newFiles = new DocumentFilesHashSet(); foreach (var file in group.Files) { if (file.StartsWith(originalSolutionPath, StringComparison.OrdinalIgnoreCase)) { var fileRelativePath = file.Substring(originalSolutionPath.Length + 1); newFiles.Add(Path.Combine(newSolutionPath, fileRelativePath)); } else { newFiles.Add(file); } } group.Files = newFiles; group.Description = String.Join(", ", group.Files.Select(Path.GetFileName)); group.Positions = null; } import.SolutionName = newSolutionName; }
public void ImportGroups(string filePath) { ThreadHelper.ThrowIfNotOnUIThread(); var json = File.ReadAllText(filePath); var import = JsonConvert.DeserializeObject <ExportData>(json); if (SolutionName != import.SolutionName) { var window = new ImportGroupsConfirmOverwriteWindow(); if (window.ShowDialog() == true) { var originalSolutionName = import.SolutionName; var newSolutionName = SolutionName; var originalSolutionPath = Path.GetDirectoryName(originalSolutionName); var newSolutionPath = Path.GetDirectoryName(newSolutionName); foreach (var group in import.Tabs) { var newFiles = new DocumentFilesHashSet(); foreach (var file in group.Files) { if (file.StartsWith(originalSolutionPath, StringComparison.OrdinalIgnoreCase)) { var fileRelativePath = file.Substring(originalSolutionPath.Length + 1); newFiles.Add(Path.Combine(newSolutionPath, fileRelativePath)); } else { newFiles.Add(file); } } group.Files = newFiles; group.Description = String.Join(", ", group.Files.Select(Path.GetFileName)); group.Positions = null; } import.SolutionName = newSolutionName; } } SaveGroupsForSolution(import.SolutionName, import.Tabs); if (SolutionName == import.SolutionName) { LoadGroups(); } }
public void SaveGroup(string name, int?slot = null) { if (DocumentWindowMgr == null) { Debug.Assert(false, "IVsUIShellDocumentWindowMgr", String.Empty, 0); return; } if (!Package.Environment.GetDocumentWindows().Any()) { return; } var isBuiltIn = IsBuiltInGroup(name); if (isBuiltIn) { slot = null; } var group = Groups.FindByName(name); var files = new DocumentFilesHashSet(Package.Environment.GetDocumentFiles().OrderBy(Path.GetFileName)); //var bps = Package.Environment.GetMatchingBreakpoints(files, StringComparer.OrdinalIgnoreCase)); using (var stream = new VsOleStream()) { var hr = DocumentWindowMgr.SaveDocumentWindowPositions(0, stream); if (hr != VSConstants.S_OK) { Debug.Assert(false, "SaveDocumentWindowPositions", String.Empty, hr); if (group != null) { Groups.Remove(group); } return; } stream.Seek(0, SeekOrigin.Begin); var documents = String.Join(", ", files.Select(Path.GetFileName)); if (group == null) { group = new DocumentGroup { Name = name, Description = documents, Files = files, Positions = stream.ToArray() }; TrySetSlot(group, slot); if (isBuiltIn) { Groups.Insert(0, group); } else { Groups.Add(group); } } else { SaveUndoGroup(group); group.Description = documents; group.Files = files; group.Positions = stream.ToArray(); TrySetSlot(group, slot); } } }