File: DiagnosticsWindow.cs
Web Access
Project: src\src\VisualStudio\VisualStudioDiagnosticsToolWindow\Roslyn.VisualStudio.DiagnosticsWindow.csproj (Roslyn.VisualStudio.DiagnosticsWindow)
// 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.
 
using System;
using System.Runtime.InteropServices;
using System.Windows.Controls;
using Microsoft.VisualStudio.LanguageServices;
using Microsoft.VisualStudio.Shell;
using Roslyn.Hosting.Diagnostics.PerfMargin;
using Roslyn.Utilities;
 
namespace Roslyn.VisualStudio.DiagnosticsWindow
{
    [Guid("b2da68d7-fd1c-491a-a9a0-24f597b9f56c")]
    public sealed class DiagnosticsWindow : ToolWindowPane
    {
        public VisualStudioWorkspace? Workspace { get; private set; }
 
        /// <summary>
        /// Standard constructor for the tool window.
        /// </summary>
        public DiagnosticsWindow(object _)
            : base(null)
        {
            // Set the window title reading it from the resources.
            Caption = Resources.ToolWindowTitle;
            // Set the image that will appear on the tab of the window frame
            // when docked with an other window
            // The resource ID correspond to the one defined in the resx file
            // while the Index is the offset in the bitmap strip. Each image in
            // the strip being 16x16.
            BitmapResourceID = 301;
            BitmapIndex = 1;
 
            // This is the user control hosted by the tool window; Note that, even if this class implements IDisposable,
            // we are not calling Dispose on this object. This is because ToolWindowPane calls Dispose on 
            // the object returned by the Content property.
            var perfMarginPanel = new TabItem()
            {
                Header = "Perf",
                Content = new PerfMarginPanel()
            };
 
            var telemetryPanel = new TabItem()
            {
                Header = "Telemetry",
                Content = new TelemetryPanel()
            };
 
            var workspacePanel = new TabItem()
            {
                Header = "Workspace",
                Content = new WorkspacePanel(this)
            };
 
            var tabControl = new TabControl
            {
                TabStripPlacement = Dock.Bottom
            };
 
            tabControl.Items.Add(perfMarginPanel);
            tabControl.Items.Add(telemetryPanel);
            tabControl.Items.Add(workspacePanel);
 
            Content = tabControl;
        }
 
        public void Initialize(VisualStudioWorkspace workspace)
        {
            Contract.ThrowIfFalse(Workspace == null);
            Workspace = workspace;
        }
    }
}