Example #1
0
        /// <summary>
        /// Apply bookmark style to all code items that are bookmarked
        /// </summary>
        /// <param name="codeDocumentViewModel"></param>
        public static void ApplyBookmarks(CodeDocumentViewModel codeDocumentViewModel, string solutionFilePath)
        {
            try
            {
                if (!codeDocumentViewModel.CodeDocument.Any())
                {
                    return;
                }

                GetBookmarkStyles(codeDocumentViewModel, solutionFilePath);

                foreach (var bookmark in codeDocumentViewModel.Bookmarks)
                {
                    var codeItem = codeDocumentViewModel.CodeDocument
                                   .Flatten()
                                   .FirstOrDefault(i => i.Id.Equals(bookmark.Key));
                    if (codeItem == null)
                    {
                        continue;
                    }
                    ApplyBookmark(codeItem, codeDocumentViewModel.BookmarkStyles[bookmark.Value]);
                }
            }
            catch (Exception e)
            {
                LogHelper.Log("ApplyBookmarks", e);
            }
        }
Example #2
0
        public CodeViewUserControl(Window window, ColumnDefinition column = null,
                                   IWpfTextView textView           = null, IOutliningManager outliningManager = null,
                                   VisualStudioWorkspace workspace = null, CodeNavMargin margin               = null, DTE dte = null)
        {
            InitializeComponent();

            // Setup viewmodel as datacontext
            CodeDocumentViewModel = new CodeDocumentViewModel();
            DataContext           = CodeDocumentViewModel;

            // Setup backgroundworker to update datacontext
            _backgroundWorker = new BackgroundWorker {
                WorkerSupportsCancellation = true
            };
            _backgroundWorker.DoWork             += BackgroundWorker_DoWork;
            _backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;

            _window          = window;
            _column          = column;
            TextView         = textView;
            OutliningManager = outliningManager;
            _workspace       = workspace;
            _margin          = margin;
            Dte = dte;

            VSColorTheme.ThemeChanged += VSColorTheme_ThemeChanged;
        }
Example #3
0
        /// <summary>
        /// Default available bookmark styles
        /// </summary>
        /// <returns>List of bookmark styles</returns>
        public static List <BookmarkStyle> GetBookmarkStyles(CodeDocumentViewModel codeDocumentViewModel, string solutionFilePath)
        {
            if (string.IsNullOrEmpty(solutionFilePath))
            {
                return(GetDefaultBookmarkStyles());
            }

            var solutionStorage = SolutionStorageHelper.Load <SolutionStorageModel>(solutionFilePath);

            if (solutionStorage.Documents == null)
            {
                return(GetDefaultBookmarkStyles());
            }

            var storageItem = solutionStorage.Documents
                              .FirstOrDefault(s => s.FilePath.Equals(codeDocumentViewModel.FilePath));

            if (storageItem != null)
            {
                codeDocumentViewModel.BookmarkStyles = storageItem.BookmarkStyles;
            }

            if (codeDocumentViewModel.BookmarkStyles == null)
            {
                codeDocumentViewModel.BookmarkStyles = GetDefaultBookmarkStyles();
            }

            return(codeDocumentViewModel.BookmarkStyles);
        }
Example #4
0
        public static void HighlightCurrentItem(Window window, CodeDocumentViewModel codeDocumentViewModel)
        {
            if (Settings.Default.DisableHighlight)
            {
                return;
            }

            System.Windows.Threading.Dispatcher.CurrentDispatcher.VerifyAccess();

            try
            {
                if (!(window?.Selection is TextSelection))
                {
                    return;
                }
            }
            catch (Exception)
            {
                return;
            }

            HighlightCurrentItem(codeDocumentViewModel, ((TextSelection)window.Selection).CurrentLine,
                                 ColorHelper.ToMediaColor(EnvironmentColors.ToolWindowTabSelectedTextColorKey),
                                 GetBackgroundBrush().Color,
                                 ColorHelper.ToMediaColor(EnvironmentColors.FileTabButtonDownSelectedActiveColorKey),
                                 ColorHelper.ToMediaColor(EnvironmentColors.ToolWindowTextColorKey));
        }
Example #5
0
        public CustomizeBookmarkStylesWindow(CodeDocumentViewModel codeDocumentViewModel, string solutionFilePath)
        {
            _codeDocumentViewModel = codeDocumentViewModel;
            _solutionFilePath      = solutionFilePath;

            InitializeComponent();
        }
Example #6
0
 public static void SaveToSolutionStorage(ICodeViewUserControl control, CodeDocumentViewModel model)
 {
     if (string.IsNullOrEmpty(control?.Dte?.Solution?.FileName))
     {
         return;
     }
     SaveToSolutionStorage(control?.Dte?.Solution?.FileName, model);
 }
Example #7
0
        public static void HighlightCurrentItem(CodeDocumentViewModel codeDocumentViewModel, int currentLine,
                                                Color foregroundColor, Color backgroundColor, Color borderColor, Color regularForegroundColor)
        {
            if (codeDocumentViewModel == null)
            {
                return;
            }

            UnHighlight(codeDocumentViewModel, regularForegroundColor);
            var itemsToHighlight = GetItemsToHighlight(codeDocumentViewModel.CodeDocument, currentLine);

            Highlight(codeDocumentViewModel, itemsToHighlight.Select(i => i.Id), foregroundColor, backgroundColor, borderColor);
        }
Example #8
0
        public static List <CodeItem> Sort(CodeDocumentViewModel viewModel)
        {
            switch (viewModel.SortOrder)
            {
            case SortOrderEnum.SortByFile:
                return(SortByFile(viewModel.CodeDocument));

            case SortOrderEnum.SortByName:
                return(SortByName(viewModel.CodeDocument));

            default:
                return(viewModel.CodeDocument);
            }
        }
Example #9
0
        public static void SetBookmarkStyles(CodeDocumentViewModel codeDocumentViewModel, ControlCollection controls, string solutionFilePath)
        {
            var styles = new List <BookmarkStyle>();

            foreach (var item in controls)
            {
                var label = item as Label;
                styles.Add(new BookmarkStyle(ColorHelper.ToBrush(label.BackColor), ColorHelper.ToBrush(label.ForeColor)));
            }

            codeDocumentViewModel.BookmarkStyles = styles;

            SolutionStorageHelper.SaveToSolutionStorage(solutionFilePath, codeDocumentViewModel);
        }
Example #10
0
 public static void ApplyHistoryIndicator(CodeDocumentViewModel model)
 {
     for (int i = 0; i < model.HistoryItems.Count; i++)
     {
         CodeItem historyItem = model.HistoryItems[i];
         var      codeItem    = model.CodeDocument
                                .Flatten()
                                .FirstOrDefault(item => item.Id.Equals(historyItem.Id));
         if (codeItem == null)
         {
             continue;
         }
         ApplyHistoryIndicator(codeItem, i);
     }
 }
Example #11
0
        public void ItemsSorting(SortOrderEnum sortOrder, string[] methodNames)
        {
            var document  = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestSorting.cs"));
            var viewModel = new CodeDocumentViewModel {
                CodeDocument = document, SortOrder = sortOrder
            };

            viewModel.CodeDocument = SortHelper.Sort(viewModel);

            var sortingClass = (document.First() as IMembers).Members.First() as CodeClassItem;

            Assert.AreEqual(methodNames[0], sortingClass.Members.First().Name);
            Assert.AreEqual(methodNames[1], sortingClass.Members[1].Name);
            Assert.AreEqual(methodNames[2], sortingClass.Members.Last().Name);

            Assert.AreEqual(sortOrder, viewModel.SortOrder);
        }
Example #12
0
        public void CurrentItemShouldBeHighlighted()
        {
            var document = new CodeDocumentViewModel
            {
                CodeDocument = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestProperties.cs"))
            };

            HighlightHelper.HighlightCurrentItem(document, 13, Brushes.Red.Color, Brushes.Blue.Color, Brushes.Green.Color, Brushes.White.Color);

            var highlightedClass = (document.CodeDocument.First() as IMembers).Members.First() as CodeClassItem;
            var highlightedItem  = highlightedClass.Members[2];

            Assert.AreEqual(FontWeights.Bold, highlightedItem.FontWeight);
            Assert.AreEqual(Brushes.Red.Color, highlightedItem.ForegroundColor);
            Assert.AreEqual(Brushes.Blue.Color, highlightedItem.NameBackgroundColor);
            Assert.AreEqual(Brushes.Green.Color, highlightedClass.BorderColor);
        }
Example #13
0
        public void OnlyOneItemShouldBeHighlighted()
        {
            var document = new CodeDocumentViewModel
            {
                CodeDocument = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestProperties.cs"))
            };

            HighlightHelper.HighlightCurrentItem(document, 15, Brushes.Red.Color, Brushes.Blue.Color, Brushes.Green.Color, Brushes.White.Color);

            HighlightHelper.HighlightCurrentItem(document, 20, Brushes.Red.Color, Brushes.Blue.Color, Brushes.Green.Color, Brushes.White.Color);


            var highlightedItems = new List <CodeItem>();

            FindHighlightedItems(highlightedItems, document.CodeDocument);

            Assert.AreEqual(1, highlightedItems.Count);
        }
Example #14
0
        /// <summary>
        /// Revert all code items to previous styling and delete all bookmarks
        /// </summary>
        /// <param name="codeDocumentViewModel">view model</param>
        public static void ClearBookmarks(CodeDocumentViewModel codeDocumentViewModel)
        {
            try
            {
                foreach (var bookmark in codeDocumentViewModel.Bookmarks)
                {
                    var codeItem = codeDocumentViewModel.CodeDocument
                                   .Flatten()
                                   .First(i => i.Id.Equals(bookmark.Key));
                    ClearBookmark(codeItem);
                }

                codeDocumentViewModel.Bookmarks.Clear();
            }
            catch (Exception e)
            {
                LogHelper.Log("ClearBookmarks", e);
            }
        }
Example #15
0
        /// <summary>
        /// Given a list of unique ids and a code document, find all code items and 'highlight' them.
        /// Highlighting changes the foreground, fontweight and background of a code item
        /// </summary>
        /// <param name="document">Code document</param>
        /// <param name="ids">List of unique code item ids</param>
        private static void Highlight(CodeDocumentViewModel codeDocumentViewModel, IEnumerable <string> ids,
                                      SolidColorBrush foreground, SolidColorBrush background, SolidColorBrush border)
        {
            FrameworkElement element = null;

            // Reverse Ids, so they are in Namespace -> Class -> Method order
            //ids = ids.Reverse();

            foreach (var id in ids)
            {
                var item = FindCodeItem(codeDocumentViewModel.CodeDocument, id);
                if (item == null)
                {
                    return;
                }

                item.Foreground     = foreground;
                item.FontWeight     = FontWeights.Bold;
                item.NameBackground = background;

                if (element == null && item.Control != null)
                {
                    element = item.Control.CodeItemsControl;
                }

                var found = FindItemContainer(element as ItemsControl, item);
                if (found != null)
                {
                    element = found;

                    if (!(item is IMembers))
                    {
                        found.BringIntoView();
                    }
                }

                if (item is CodeClassItem)
                {
                    (item as CodeClassItem).BorderBrush = border;
                }
            }
        }
Example #16
0
        public static void HighlightCurrentItem(Window window, CodeDocumentViewModel codeDocumentViewModel)
        {
            try
            {
                if (!(window?.Selection is TextSelection))
                {
                    return;
                }
            }
            catch (Exception)
            {
                return;
            }

            HighlightCurrentItem(codeDocumentViewModel, ((TextSelection)window.Selection).CurrentLine,
                                 ColorHelper.ToBrush(EnvironmentColors.ToolWindowTabSelectedTextColorKey),
                                 GetBackgroundBrush(),
                                 ColorHelper.ToBrush(EnvironmentColors.FileTabButtonDownSelectedActiveColorKey),
                                 ColorHelper.ToBrush(EnvironmentColors.ToolWindowTextColorKey));
        }
Example #17
0
        /// <summary>
        /// Given a list of unique ids and a code document, find all code items and 'highlight' them.
        /// Highlighting changes the foreground, fontweight and background of a code item
        /// </summary>
        /// <param name="document">Code document</param>
        /// <param name="ids">List of unique code item ids</param>
        private static void Highlight(CodeDocumentViewModel codeDocumentViewModel, IEnumerable <string> ids,
                                      Color foregroundColor, Color backgroundColor, Color borderColor)
        {
            FrameworkElement element = null;

            foreach (var id in ids)
            {
                var item = FindCodeItem(codeDocumentViewModel.CodeDocument, id);
                if (item == null)
                {
                    return;
                }

                item.ForegroundColor     = foregroundColor;
                item.FontWeight          = FontWeights.Bold;
                item.NameBackgroundColor = backgroundColor;
                item.IsHighlighted       = true;

                if (element == null && item.Control != null)
                {
                    element = GetCodeItemsControl(item.Control);
                }

                var found = FindItemContainer(element as ItemsControl, item);
                if (found != null)
                {
                    element = found;

                    if (!(item is IMembers))
                    {
                        found.BringIntoView();
                    }
                }

                if (item is CodeClassItem)
                {
                    (item as CodeClassItem).BorderColor = borderColor;
                }
            }
        }
        public CodeViewUserControlTop(Window window, RowDefinition row = null,
                                      IWpfTextView textView            = null, IOutliningManagerService outliningManagerService = null,
                                      VisualStudioWorkspace workspace  = null, CodeNavMargin margin = null, DTE dte = null)
        {
            InitializeComponent();

            // Setup viewmodel as datacontext
            CodeDocumentViewModel = new CodeDocumentViewModel();
            DataContext           = CodeDocumentViewModel;

            _window  = window;
            _row     = row;
            TextView = textView;
            OutliningManagerService = outliningManagerService;
            _workspace = workspace;
            _margin    = margin;
            Dte        = dte;

            LogHelper.Dte = dte;

            VSColorTheme.ThemeChanged += VSColorTheme_ThemeChanged;
        }
Example #19
0
        public static void SaveToSolutionStorage(string solutionFilePath, CodeDocumentViewModel codeDocumentViewModel)
        {
            if (string.IsNullOrEmpty(solutionFilePath))
            {
                return;
            }

            var solutionStorageModel = SolutionStorageHelper.Load <SolutionStorageModel>(solutionFilePath);

            if (solutionStorageModel.Documents == null)
            {
                solutionStorageModel.Documents = new List <CodeDocumentViewModel>();
            }

            var storageItem = solutionStorageModel.Documents
                              .FirstOrDefault(d => d.FilePath.Equals(codeDocumentViewModel.FilePath));

            solutionStorageModel.Documents.Remove(storageItem);

            solutionStorageModel.Documents.Add(codeDocumentViewModel);

            SolutionStorageHelper.Save <SolutionStorageModel>(solutionFilePath, solutionStorageModel);
        }
        public void EmptyItemsShouldRespectSetting(bool hideItemsWithoutChildren, Visibility expectedVisibility)
        {
            var document = new CodeDocumentViewModel
            {
                CodeDocument = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestVisibility.cs"))
            };

            SettingsHelper.FilterRules = new List <FilterRule>
            {
                new FilterRule
                {
                    Access      = CodeItemAccessEnum.All,
                    Kind        = CodeItemKindEnum.Class,
                    Visible     = true,
                    HideIfEmpty = hideItemsWithoutChildren
                }
            };

            VisibilityHelper.SetCodeItemVisibility(document.CodeDocument);

            var firstClass = (document.CodeDocument.First() as IMembers).Members.First() as CodeClassItem;

            Assert.AreEqual(expectedVisibility, firstClass.IsVisible);
        }
Example #21
0
 private static void UnHighlight(CodeDocumentViewModel codeDocumentViewModel, Color foregroundColor) =>
 UnHighlight(codeDocumentViewModel.CodeDocument, foregroundColor, codeDocumentViewModel.Bookmarks);
Example #22
0
 private static void UnHighlight(CodeDocumentViewModel codeDocumentViewModel, SolidColorBrush foreground) =>
 UnHighlight(codeDocumentViewModel.CodeDocument, foreground, codeDocumentViewModel.Bookmarks);
Example #23
0
 public static List <CodeItem> SetCodeItemVisibility(CodeDocumentViewModel model)
 => SetCodeItemVisibility(model.CodeDocument, model.FilterText, model.FilterOnBookmarks, model.Bookmarks);
Example #24
0
 /// <summary>
 /// Is a code item bookmarked
 /// </summary>
 /// <param name="codeDocumentViewModel">view model</param>
 /// <param name="codeItem">code item</param>
 /// <returns>if code item is bookmarked</returns>
 public static bool IsBookmark(CodeDocumentViewModel codeDocumentViewModel, CodeItem codeItem)
 => codeDocumentViewModel.Bookmarks.ContainsKey(codeItem.Id);
Example #25
0
        public static void AddItemToHistory(CodeDocumentViewModel model, Span span)
        {
            var item = FindCodeItem(model.CodeDocument, span);

            AddItemToHistory(item);
        }
Example #26
0
 public static List <CodeItem> Sort(CodeDocumentViewModel viewModel)
 => Sort(viewModel.CodeDocument, viewModel.SortOrder);