Exemple #1
0
        /// <summary>
        /// The shell call this function to know if a menu item should be visible and
        /// if it should be enabled/disabled.
        /// Note that this function will only be called when an instance of this editor
        /// is open.
        /// </summary>
        /// <param name="guidCmdGroup">Guid describing which set of command the current command(s) belong to</param>
        /// <param name="cCmds">Number of command which status are being asked for</param>
        /// <param name="prgCmds">Information for each command</param>
        /// <param name="pCmdText">Used to dynamically change the command text</param>
        /// <returns>HRESULT</returns>
        public int QueryStatus(ref Guid guidCmdGroup, uint cCmds, OLECMD[] prgCmds, System.IntPtr pCmdText)
        {
            Trace.WriteLineIf(_commandTraceSwitch.TraceVerbose, "VS2P4Package.QueryStatus(guid) entered");
            //Stopwatch stopwatch = new Stopwatch();
            //stopwatch.Start();

            Debug.Assert(cCmds == 1, "Multiple commands");
            Debug.Assert(prgCmds != null, "NULL argument");

            // Filter out commands that are not defined by this package
            if (guidCmdGroup != GuidList.guidVS2P4CmdSet)
            {
                return((int)(Microsoft.VisualStudio.OLE.Interop.Constants.OLECMDERR_E_NOTSUPPORTED));;
            }

            OLECMDF cmdf = OLECMDF.OLECMDF_SUPPORTED;

            // All source control commands needs to be hidden and disabled when the provider is not active
            Trace.WriteLineIf(_commandTraceSwitch.TraceVerbose, "VS2P4Package.QueryStatus(guid) checking for provider active");
            if (!_sccService.IsActive)
            {
                cmdf = cmdf | OLECMDF.OLECMDF_INVISIBLE;
                cmdf = cmdf & ~(OLECMDF.OLECMDF_ENABLED);

                prgCmds[0].cmdf = (uint)cmdf;
                Trace.WriteLineIf(_commandTraceSwitch.TraceVerbose, "VS2P4Package.QueryStatus(guid): provider not active");
                return(VSConstants.S_OK);
            }

            Trace.WriteLineIf(_commandTraceSwitch.TraceVerbose, String.Format("VS2P4Package.QueryStatus(guid) prgCmds[0].cmdID = {0}", prgCmds[0].cmdID.ToString()));
            // Process our Commands
            switch (prgCmds[0].cmdID)
            {
            case CommandId.icmdCheckout:
                cmdf |= QueryStatus_icmdCheckout();
                break;

            case CommandId.icmdMarkForAdd:
                cmdf |= QueryStatus_icmdMarkForAdd();
                break;

            case CommandId.icmdRevertIfUnchanged:
                cmdf |= QueryStatus_icmdRevertIfUnchanged();
                break;

            case CommandId.icmdRevert:
                cmdf |= QueryStatus_icmdRevert();
                break;

            case CommandId.icmdGetLatestRevison:
                cmdf |= QueryStatus_icmdGetLatestRevison();
                break;

            case CommandId.icmdRevisionHistory:
                cmdf |= QueryStatus_icmdRevisionHistory();
                break;

            case CommandId.icmdDiff:
                cmdf |= QueryStatus_icmdDiff();
                break;

            case CommandId.icmdTimeLapse:
                cmdf |= QueryStatus_icmdTimeLapse();
                break;

            case CommandId.icmdRefresh:
                cmdf |= QueryStatus_icmdRefresh();
                break;

            default:
                return((int)(Microsoft.VisualStudio.OLE.Interop.Constants.OLECMDERR_E_NOTSUPPORTED));
            }
            Trace.WriteLineIf(_commandTraceSwitch.TraceVerbose, String.Format("VS2P4Package.QueryStatus(guid) cmdF = {0}", cmdf.ToString()));

            prgCmds[0].cmdf = (uint)cmdf;

            //stopwatch.Stop();
            //if (stopwatch.ElapsedTicks > 10)
            //{
            //    Log.Debug(String.Format("QueryStatus() took {0} msec", stopwatch.ElapsedMilliseconds));
            //}

            Trace.WriteLineIf(_commandTraceSwitch.TraceVerbose, "VS2P4Package.QueryStatus(guid) completed");
            return(VSConstants.S_OK);
        }