Example #1
0
        /// <summary>Displays numbers about selected characters and lines in quick info.</summary>
        static QuickInfoItem ShowSelectionInfo(IAsyncQuickInfoSession session, SnapshotPoint point)
        {
            var selection = session.TextView.Selection;

            if (selection.IsEmpty)
            {
                return(null);
            }
            var p1 = selection.Start.Position;

            if (p1 > point || point > selection.End.Position)
            {
                var tes = session.TextView.GetTextElementSpan(point);
                if (tes.Contains(p1) == false)
                {
                    return(null);
                }
            }
            var          c          = 0;
            var          lines      = selection.SelectedSpans.Count;
            SnapshotSpan activeSpan = default;

            foreach (var item in selection.SelectedSpans)
            {
                c += item.Length;
                if (item.Contains(point))
                {
                    activeSpan = item;
                }
            }
            if (activeSpan.IsEmpty)
            {
                activeSpan = selection.SelectedSpans[0];
            }
            ThemedTipText info;

            if (c == 1)
            {
                var ch = point.Snapshot.GetText(p1, 1);
                info = new ThemedTipText {
                    Name = Name
                }
                .Append(R.T_SelectedCharacter + "\"", true)
                .Append(ch)
                .Append("\" (Unicode: 0x" + ((int)ch[0]).ToString("X2") + ")");
                goto RETURN;
            }
            info = new ThemedTipText()
            {
                Name = Name
            }
            .Append(R.T_Selection, true)
            .Append(c.ToString() + R.T_Characters);
            if (lines > 1)
            {
                info.Append(", " + lines + R.T_Spans);
            }
            else
            {
                lines = selection.StreamSelectionSpan.SnapshotSpan.GetLineSpan().Length;
                if (lines > 0)
                {
                    info.Append(", " + (lines + 1).ToString() + R.T_Lines);
                }
            }
RETURN:
            return(new QuickInfoItem(activeSpan.ToTrackingSpan(), info.SetGlyph(ThemeHelper.GetImage(IconIds.SelectCode))));
        }