File: Library\AbstractLibraryManager_IOleCommandTarget.cs
Web Access
Project: src\src\VisualStudio\Core\Def\Microsoft.VisualStudio.LanguageServices_ozsccwvc_wpftmp.csproj (Microsoft.VisualStudio.LanguageServices)
// 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 Microsoft.VisualStudio.OLE.Interop;
 
namespace Microsoft.VisualStudio.LanguageServices.Implementation.Library;
 
internal partial class AbstractLibraryManager : IOleCommandTarget
{
    protected virtual bool TryQueryStatus(Guid commandGroup, uint commandId, ref OLECMDF commandFlags)
        => false;
 
    protected virtual bool TryExec(Guid commandGroup, uint commandId)
        => false;
 
    int IOleCommandTarget.Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
    {
        if (TryExec(pguidCmdGroup, nCmdID))
        {
            return VSConstants.S_OK;
        }
 
        return (int)Constants.OLECMDERR_E_NOTSUPPORTED;
    }
 
    int IOleCommandTarget.QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
    {
        if (cCmds != 1)
        {
            return VSConstants.E_UNEXPECTED;
        }
 
        var flags = (OLECMDF)prgCmds[0].cmdf;
        if (TryQueryStatus(pguidCmdGroup, prgCmds[0].cmdID, ref flags))
        {
            prgCmds[0].cmdf = (uint)flags;
            return VSConstants.S_OK;
        }
 
        return (int)Constants.OLECMDERR_E_NOTSUPPORTED;
    }
}