public NavigationBarModel(IList <NavigationBarItem> types, VersionStamp semanticVersionStamp, INavigationBarItemService itemService) { Contract.ThrowIfNull(types); this.Types = types; this.SemanticVersionStamp = semanticVersionStamp; this.ItemService = itemService; }
public NavigationBarModel(IList<NavigationBarItem> types, VersionStamp semanticVersionStamp, INavigationBarItemService itemService) { Contract.ThrowIfNull(types); this.Types = types; this.SemanticVersionStamp = semanticVersionStamp; this.ItemService = itemService; }
/// <summary> /// Finds the item that point is in, or if it's not in any items, gets the first item that's /// positioned after the cursor. /// </summary> /// <returns>A tuple of the matching item, and if it should be shown grayed.</returns> private static (NavigationBarItem?item, bool gray) GetMatchingItem( ImmutableArray <NavigationBarItem> items, int point, INavigationBarItemService itemsService, CancellationToken cancellationToken) { NavigationBarItem?exactItem = null; var exactItemStart = 0; NavigationBarItem?nextItem = null; var nextItemStart = int.MaxValue; foreach (var item in items) { foreach (var span in item.Spans) { cancellationToken.ThrowIfCancellationRequested(); if (span.Contains(point) || span.End == point) { // This is the item we should show normally. We'll continue looking at other // items as there might be a nested type that we're actually in. If there // are multiple items containing the point, choose whichever containing span // starts later because that will be the most nested item. if (exactItem == null || span.Start >= exactItemStart) { exactItem = item; exactItemStart = span.Start; } } else if (span.Start > point && span.Start <= nextItemStart) { nextItem = item; nextItemStart = span.Start; } } } if (exactItem != null) { return(exactItem, gray : false); } else { // The second parameter is if we should show it grayed. We'll be nice and say false // unless we actually have an item var itemToGray = nextItem ?? items.LastOrDefault(); if (itemToGray != null && !itemsService.ShowItemGrayedIfNear(itemToGray)) { itemToGray = null; } return(itemToGray, gray : itemToGray != null); } }
private void NavigateToItem(NavigationBarItem item, Document document, ITextSnapshot snapshot, INavigationBarItemService languageService, CancellationToken cancellationToken) { item.Spans = item.TrackingSpans.Select(ts => ts.GetSpan(snapshot).Span.ToTextSpan()).ToList(); languageService.NavigateToItem(document, item, _presenter.TryGetCurrentView(), cancellationToken); }
/// <summary> /// Finds the item that point is in, or if it's not in any items, gets the first item that's /// positioned after the cursor. /// </summary> /// <returns>A tuple of the matching item, and if it should be shown grayed.</returns> private static ValueTuple <T, bool> GetMatchingItem <T>(IEnumerable <T> items, SnapshotPoint point, INavigationBarItemService itemsService, CancellationToken cancellationToken) where T : NavigationBarItem { T exactItem = null; int exactItemStart = 0; T nextItem = null; int nextItemStart = int.MaxValue; foreach (var item in items) { foreach (var span in item.TrackingSpans.Select(s => s.GetSpan(point.Snapshot))) { cancellationToken.ThrowIfCancellationRequested(); if (span.Contains(point) || span.End == point) { // This is the item we should show normally. We'll continue looking at other // items as there might be a nested type that we're actually in. If there // are multiple items containing the point, choose whichever containing span // starts later because that will be the most nested item. if (exactItem == null || span.Start >= exactItemStart) { exactItem = item; exactItemStart = span.Start; } } else if (span.Start > point && span.Start <= nextItemStart) { nextItem = item; nextItemStart = span.Start; } } } if (exactItem != null) { return(ValueTuple.Create(exactItem, false)); } else { // The second parameter is if we should show it grayed. We'll be nice and say false // unless we actually have an item var itemToGray = nextItem ?? items.LastOrDefault(); if (itemToGray != null && !itemsService.ShowItemGrayedIfNear(itemToGray)) { itemToGray = null; } return(ValueTuple.Create(itemToGray, itemToGray != null)); } }
public NavigationBarModel(ImmutableArray <NavigationBarItem> types, INavigationBarItemService itemService) { this.Types = types; this.ItemService = itemService; }
public NavigationBarItemServiceWrapper(INavigationBarItemService service) => _service = service;
public NavigationBarModel(INavigationBarItemService itemService, ImmutableArray <NavigationBarItem> types) { ItemService = itemService; Types = types; }