/// <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); } }
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; }
/// <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); }
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)); }
public CustomizeBookmarkStylesWindow(CodeDocumentViewModel codeDocumentViewModel, string solutionFilePath) { _codeDocumentViewModel = codeDocumentViewModel; _solutionFilePath = solutionFilePath; InitializeComponent(); }
public static void SaveToSolutionStorage(ICodeViewUserControl control, CodeDocumentViewModel model) { if (string.IsNullOrEmpty(control?.Dte?.Solution?.FileName)) { return; } SaveToSolutionStorage(control?.Dte?.Solution?.FileName, model); }
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); }
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); } }
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); }
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); } }
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); }
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); }
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); }
/// <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); } }
/// <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; } } }
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)); }
/// <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; }
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); }
private static void UnHighlight(CodeDocumentViewModel codeDocumentViewModel, Color foregroundColor) => UnHighlight(codeDocumentViewModel.CodeDocument, foregroundColor, codeDocumentViewModel.Bookmarks);
private static void UnHighlight(CodeDocumentViewModel codeDocumentViewModel, SolidColorBrush foreground) => UnHighlight(codeDocumentViewModel.CodeDocument, foreground, codeDocumentViewModel.Bookmarks);
public static List <CodeItem> SetCodeItemVisibility(CodeDocumentViewModel model) => SetCodeItemVisibility(model.CodeDocument, model.FilterText, model.FilterOnBookmarks, model.Bookmarks);
/// <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);
public static void AddItemToHistory(CodeDocumentViewModel model, Span span) { var item = FindCodeItem(model.CodeDocument, span); AddItemToHistory(item); }
public static List <CodeItem> Sort(CodeDocumentViewModel viewModel) => Sort(viewModel.CodeDocument, viewModel.SortOrder);