Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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();
            }
        }
Exemplo n.º 3
0
        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);
                }
            }
        }