|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
#nullable disable
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.VisualStudio.Text.Projection;
namespace Roslyn.Hosting.Diagnostics.VenusMargin
{
public partial class ProjectionBufferMargin : UserControl
{
public static event EventHandler SelectionChanged;
public IWpfTextView TextView { get; set; }
public ITextEditorFactoryService TextEditorFactory { get; set; }
public ProjectionBufferMargin()
{
InitializeComponent();
}
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
TextView.Properties[ProjectionSpanTaggerProvider.PropertyName] = new List<Span>(e.AddedItems.Cast<SnapshotSpan>().Select(ss => ss.Span).Where(ss => !ss.IsEmpty));
RaiseSelectionChanged(EventArgs.Empty);
}
private void RaiseSelectionChanged(EventArgs args)
{
SelectionChanged?.Invoke(this, args);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var buffer = (ITextBuffer)((FrameworkElement)sender).Tag;
var view = TextEditorFactory.CreateTextView(buffer);
var projectionBuffer = TextView.TextBuffer as IProjectionBuffer;
var spansFromBuffer = from ss in projectionBuffer.CurrentSnapshot.GetSourceSpans()
where ss.Snapshot.TextBuffer == buffer
select ss.Span;
view.Properties[ProjectionSpanTaggerProvider.PropertyName] = new List<Span>(spansFromBuffer);
var host = TextEditorFactory.CreateTextViewHost(view, setFocus: true);
var window = new Window
{
Content = host.HostControl,
ShowActivated = true,
};
window.Closed += (s, a) =>
{
host.Close();
};
window.Show();
}
}
}
|