/// <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);
        }
예제 #2
0
        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();
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #7
0
        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);
        }
예제 #9
0
        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));
        }