File: SyntaxVisualizer\SyntaxVisualizerToolWindow.cs
Web Access
Project: src\src\Razor\src\Razor\src\Microsoft.VisualStudio.RazorExtension\Microsoft.VisualStudio.RazorExtension_r1ze3jzg_wpftmp.csproj (Microsoft.VisualStudio.RazorExtension)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.ComponentModel.Design;
using System.Diagnostics.Contracts;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
 
namespace Microsoft.VisualStudio.RazorExtension.SyntaxVisualizer;
 
/// <summary>
/// This class implements the tool window exposed by this package and hosts a user control.
///
/// In Visual Studio tool windows are composed of a frame (implemented by the shell) and a pane, 
/// usually implemented by the package implementer.
///
/// This class derives from the ToolWindowPane class provided from the MPF in order to use its 
/// implementation of the IVsUIElementPane interface.
/// </summary>
[Guid("28080d9c-0842-4155-9e7d-3b9e6d64bb29")]
internal class SyntaxVisualizerToolWindow : ToolWindowPane
{
    // Values from SyntaxVisualizerMenu.vsct
    private static readonly Guid CmdSet = new Guid("a3a603a2-2b17-4ce2-bd21-cbb8ccc084ec");
    private const int ToolbarCmdId = 0x0102;
    private const int CmdIdShowGeneratedCode = 0x0111;
    private const int CmdIdShowGeneratedHtml = 0x0112;
    private const int CmdIdShowAllTagHelpers = 0x0113;
    private const int CmdIdShowInScopeTagHelpers = 0x0114;
    private const int CmdIdShowReferencedTagHelpers = 0x0115;
    private const int CmdidShowFormattingDocument = 0x0116;
 
    private SyntaxVisualizerControl _visualizerControl => (SyntaxVisualizerControl)Content;
 
    public bool CommandHandlersInitialized { get; private set; }
 
    /// <summary>
    /// Standard constructor for the tool window.
    /// </summary>
    public SyntaxVisualizerToolWindow()
        : base(null)
    {
        // Set the window title reading it from the resources.
        Caption = VSPackage.RazorSyntaxVisualizer;
 
        // 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 = 500;
        BitmapIndex = 0;
 
        // 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.
        Content = new SyntaxVisualizerControl();
 
        ToolBar = new CommandID(CmdSet, ToolbarCmdId);
        ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP;
    }
 
    internal TServiceInterface GetVsService<TServiceInterface, TService>()
        where TServiceInterface : class
        where TService : class
    {
        return (TServiceInterface)GetService(typeof(TService));
    }
 
    internal void InitializeCommands(IMenuCommandService mcs, Guid guidSyntaxVisualizerMenuCmdSet)
    {
        Contract.Requires(!CommandHandlersInitialized);
 
        CommandHandlersInitialized = true;
 
        mcs.AddCommand(new MenuCommand(ShowFormattingDocument, new CommandID(guidSyntaxVisualizerMenuCmdSet, CmdidShowFormattingDocument)));
        mcs.AddCommand(new MenuCommand(ShowGeneratedCode, new CommandID(guidSyntaxVisualizerMenuCmdSet, CmdIdShowGeneratedCode)));
        mcs.AddCommand(new MenuCommand(ShowGeneratedHtml, new CommandID(guidSyntaxVisualizerMenuCmdSet, CmdIdShowGeneratedHtml)));
        mcs.AddCommand(new MenuCommand(ShowAllTagHelpers, new CommandID(guidSyntaxVisualizerMenuCmdSet, CmdIdShowAllTagHelpers)));
        mcs.AddCommand(new MenuCommand(ShowInScopeTagHelpers, new CommandID(guidSyntaxVisualizerMenuCmdSet, CmdIdShowInScopeTagHelpers)));
        mcs.AddCommand(new MenuCommand(ShowReferencedTagHelpers, new CommandID(guidSyntaxVisualizerMenuCmdSet, CmdIdShowReferencedTagHelpers)));
    }
 
    private void ShowFormattingDocument(object sender, EventArgs e)
    {
        _visualizerControl.ShowFormattingDocument();
    }
 
    private void ShowGeneratedCode(object sender, EventArgs e)
    {
        _visualizerControl.ShowGeneratedCode();
    }
 
    private void ShowGeneratedHtml(object sender, EventArgs e)
    {
        _visualizerControl.ShowGeneratedHtml();
    }
 
    private void ShowAllTagHelpers(object sender, EventArgs e)
    {
        _visualizerControl.ShowSerializedTagHelpers(displayKind: SyntaxVisualizerControl.TagHelperDisplayMode.All);
    }
 
    private void ShowInScopeTagHelpers(object sender, EventArgs e)
    {
        _visualizerControl.ShowSerializedTagHelpers(displayKind: SyntaxVisualizerControl.TagHelperDisplayMode.InScope);
    }
 
    private void ShowReferencedTagHelpers(object sender, EventArgs e)
    {
        _visualizerControl.ShowSerializedTagHelpers(displayKind: SyntaxVisualizerControl.TagHelperDisplayMode.Referenced);
    }
}