/// <summary> /// Returns text appearance attributes for a drop-down combination entry. /// </summary> /// <param name="iCombo">[in] The drop-down bar/Window combo.</param> /// <param name="iIndex">[in] Index of item of interest.</param> /// <param name="pAttr">[out] Font attribute. Values for pAttr are taken from the DROPDOWNFONTATTR enum.</param> /// <returns>If the method succeeds, it returns S_OK. If it fails, it returns an error code.</returns> public int GetEntryAttributes(int iCombo, int iIndex, out uint pAttr) { pAttr = 0; if (!ValidateIndex(iCombo, iIndex)) { return(VSConstants.E_INVALIDARG); } IEditorNavigationTarget target = _navigationControls[iCombo].Item2[iIndex]; pAttr = (uint)DROPDOWNFONTATTR.FONTATTR_PLAIN; if (target.IsBold) { pAttr |= (uint)DROPDOWNFONTATTR.FONTATTR_BOLD; } if (target.IsGray) { pAttr |= (uint)DROPDOWNFONTATTR.FONTATTR_GRAY; } if (target.IsItalic) { pAttr |= (uint)DROPDOWNFONTATTR.FONTATTR_ITALIC; } if (target.IsUnderlined) { pAttr |= (uint)DROPDOWNFONTATTR.FONTATTR_UNDERLINE; } return(VSConstants.S_OK); }
private void UpdateNavigationTargets([NotNull] IEnumerable <IEditorNavigationTarget> targets) { Requires.NotNull(targets, nameof(targets)); foreach (var group in targets.GroupBy(target => target.EditorNavigationType)) { var navigationControl = this._navigationControls.FirstOrDefault(control => control.Item1 == group.Key); if (navigationControl == null) { continue; } var combo = navigationControl.Item2; combo.Items.Clear(); foreach (var item in group.OrderBy(i => i.Name, StringComparer.CurrentCultureIgnoreCase)) { combo.Items.Add(item); } } _owners.Clear(); foreach (var childControl in _navigationControls) { IEditorNavigationType navigationType = childControl.Item1; string enclosingType = navigationType.Definition.EnclosingTypes.FirstOrDefault(); if (string.IsNullOrEmpty(enclosingType)) { continue; } foreach (var childItem in childControl.Item2.Items.OfType <IEditorNavigationTarget>()) { foreach (var control in _navigationControls.Where(i => i.Item1.IsOfType(enclosingType))) { IEditorNavigationTarget best = control.Item2.Items.Cast <IEditorNavigationTarget>() .Where(i => i.Span.OverlapsWith(childItem.Span)) .OrderBy(i => i.Span.Length) .FirstOrDefault(); if (best != null) { _owners[childItem] = best; goto nextChild; } } nextChild: continue; } } UpdateSelectedNavigationTargets(); }
public int OnItemChosen(int iCombo, int iIndex) { IEditorNavigationTarget target = _navigationTargets[iCombo][iIndex]; if (target != null) { var seek = target.Seek.Snapshot == null ? target.Span : target.Seek; _wpfTextView.Caret.MoveTo(seek.Start); _wpfTextView.Selection.Select(seek, false); _wpfTextView.ViewScroller.EnsureSpanVisible(target.Seek); Keyboard.Focus(_wpfTextView.VisualElement); } return(VSConstants.S_OK); }
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { if (Updating) { return; } if (e.AddedItems.Count > 0) { IEditorNavigationTarget target = e.AddedItems[0] as IEditorNavigationTarget; if (target != null) { var seek = target.Seek.Snapshot == null ? target.Span : target.Seek; _wpfTextView.Caret.MoveTo(seek.Start); _wpfTextView.Selection.Select(seek, false); _wpfTextView.ViewScroller.EnsureSpanVisible(target.Seek); Keyboard.Focus(_wpfTextView.VisualElement); } } }
public int OnItemChosen(int iCombo, int iIndex) { if (!ValidateIndex(iCombo, iIndex)) { return(VSConstants.E_INVALIDARG); } if (Updating) { return(VSConstants.E_FAIL); } try { IEditorNavigationTarget target = _navigationControls[iCombo].Item2[iIndex]; if (target != null) { // show the span, then adjust if necessary to make sure the seek portion is visible var span = MapTo(target.Span, _currentTextView.TextSnapshot, SpanTrackingMode.EdgeInclusive); _currentTextView.ViewScroller.EnsureSpanVisible(span, EnsureSpanVisibleOptions.AlwaysCenter | EnsureSpanVisibleOptions.ShowStart); var seek = target.Seek.Snapshot == null ? target.Span : target.Seek; seek = MapTo(seek, _currentTextView.TextSnapshot, SpanTrackingMode.EdgeInclusive); _currentTextView.Caret.MoveTo(seek.Start); _currentTextView.Selection.Select(seek, false); _currentTextView.ViewScroller.EnsureSpanVisible(seek, EnsureSpanVisibleOptions.MinimumScroll | EnsureSpanVisibleOptions.ShowStart); Keyboard.Focus(_currentTextView.VisualElement); } } catch (Exception ex) { if (ex.IsCritical()) { throw; } return(Marshal.GetHRForException(ex)); } return(VSConstants.S_OK); }
private bool ComboBoxFilter(IEditorNavigationType navigationType, EditorNavigationComboBox comboBox, IEditorNavigationTarget target) { if (navigationType == null || comboBox == null || target == null) return true; if (!navigationType.Definition.EnclosingTypes.Any()) return true; IEditorNavigationTarget owner; if (!_owners.TryGetValue(target, out owner)) return true; return _navigationControls.Select(i => i.Item2.SelectedItem).OfType<IEditorNavigationTarget>().Contains(owner); }
private bool ComboBoxFilter(IEditorNavigationType navigationType, EditorNavigationComboBox comboBox, IEditorNavigationTarget target) { if (navigationType == null || comboBox == null || target == null) { return(true); } if (!navigationType.Definition.EnclosingTypes.Any()) { return(true); } IEditorNavigationTarget owner; if (!_owners.TryGetValue(target, out owner)) { return(true); } return(_navigationControls.Select(i => i.Item2.SelectedItem).OfType <IEditorNavigationTarget>().Contains(owner)); }
private bool ComboBoxFilter(IEditorNavigationType navigationType, List<IEditorNavigationTarget> comboBox, IEditorNavigationTarget target) { if (navigationType == null || comboBox == null || target == null) return true; if (!navigationType.Definition.EnclosingTypes.Any()) return true; IEditorNavigationTarget owner; if (!_owners.TryGetValue(target, out owner)) return true; return _selectedItem.Contains(owner); }
public void AugmentQuickInfoSession(IQuickInfoSession session, IList <object> quickInfoContent, out ITrackingSpan applicableToSpan) { applicableToSpan = null; if (session.TextView.TextBuffer == this.TextBuffer) { ITextSnapshot currentSnapshot = this.TextBuffer.CurrentSnapshot; SnapshotPoint?triggerPoint = session.GetTriggerPoint(currentSnapshot); if (!triggerPoint.HasValue) { return; } foreach (var span in this.Aggregator.GetTags(new SnapshotSpan(triggerPoint.Value, triggerPoint.Value))) { if (!span.Tag.ClassificationType.IsOfType(AntlrClassificationTypeNames.LexerRule) && !span.Tag.ClassificationType.IsOfType(AntlrClassificationTypeNames.ParserRule)) { continue; } NormalizedSnapshotSpanCollection spans = span.Span.GetSpans(currentSnapshot); if (spans.Count != 1) { continue; } SnapshotSpan span2 = spans[0]; SnapshotSpan anchorSpan = span.Span.GetSpans(span.Span.AnchorBuffer)[0]; if (span2.Length != anchorSpan.Length) { continue; } if (!span2.Contains(triggerPoint.Value)) { continue; } var rules = EditorNavigationSourceAggregator.GetNavigationTargets().ToArray(); if (rules.Length == 0) { quickInfoContent.Add("Parsing..."); applicableToSpan = currentSnapshot.CreateTrackingSpan(span2, SpanTrackingMode.EdgeExclusive); return; } string ruleName = span2.GetText(); IEditorNavigationTarget target = null; foreach (var rule in rules) { if (string.Equals(rule.Name, ruleName)) { target = rule; break; } } if (target == null) { continue; } SnapshotSpan targetSpan = target.Span; quickInfoContent.Add(!targetSpan.IsEmpty ? targetSpan.GetText() : target.Name); applicableToSpan = currentSnapshot.CreateTrackingSpan(span2, SpanTrackingMode.EdgeExclusive); return; } } }
private bool ComboBoxFilter(IEditorNavigationType navigationType, List <IEditorNavigationTarget> comboBox, IEditorNavigationTarget target) { if (navigationType == null || comboBox == null || target == null) { return(true); } if (!navigationType.Definition.EnclosingTypes.Any()) { return(true); } IEditorNavigationTarget owner; if (!_owners.TryGetValue(target, out owner)) { return(true); } return(_selectedItem.Contains(owner)); }