public int QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
        {
            if ((prgCmds == null))
                return Microsoft.VisualStudio.VSConstants.E_INVALIDARG;

            System.Diagnostics.Debug.Assert(cCmds == 1, "Multiple commands"); // Should never happen in VS

            CommandID cd = new CommandID(pguidCmdGroup, unchecked((int)prgCmds[0].cmdID));

            List<CommandData> items;

            if (!_data.TryGetValue(cd, out items))
                return (int)Constants.OLECMDERR_E_NOTSUPPORTED;

            foreach (CommandData d in items)
            {
                if (!d.Control.ContainsFocus)
                    continue;

                CommandUpdateEventArgs ee = new CommandUpdateEventArgs((VisualGitCommand)cd.ID, GetService<VisualGitContext>());

                if (d.UpdateHandler != null)
                    d.UpdateHandler(d.Control, ee);

                if (ee.DynamicMenuEnd)
                    return (int)OLEConstants.OLECMDERR_E_NOTSUPPORTED;

                OLECMDF cmdf = OLECMDF.OLECMDF_SUPPORTED;

                ee.UpdateFlags(ref cmdf);

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

                return VSConstants.S_OK;
            }

            return (int)Constants.OLECMDERR_E_NOTSUPPORTED;
        }
Beispiel #2
0
        public int QueryStatus(VisualGitContext context, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
        {
            if (context == null)
                throw new ArgumentNullException("context");
            else if (cCmds != 1 || prgCmds == null)
                return -1;

            TextQueryType textQuery = TextQueryType.None;

            if (pCmdText != IntPtr.Zero)
            {
                // VS Want's some text from us for either the statusbar or the command text
                OLECMDTEXTF textType = GetFlags(pCmdText);

                switch (textType)
                {
                    case OLECMDTEXTF.OLECMDTEXTF_NAME:
                        textQuery = TextQueryType.Name;
                        break;
                    case OLECMDTEXTF.OLECMDTEXTF_STATUS:
                        textQuery = TextQueryType.Status;
                        break;
                }
            }

            CommandUpdateEventArgs updateArgs = new CommandUpdateEventArgs((VisualGitCommand)prgCmds[0].cmdID, context, textQuery);

            OLECMDF cmdf = OLECMDF.OLECMDF_SUPPORTED;

            if (PerformUpdate(updateArgs.Command, updateArgs))
            {
                updateArgs.UpdateFlags(ref cmdf);
            }

            if (updateArgs.DynamicMenuEnd)
                return (int)OLEConstants.OLECMDERR_E_NOTSUPPORTED;

            if (textQuery != TextQueryType.None && !string.IsNullOrEmpty(updateArgs.Text))
            {
                SetText(pCmdText, updateArgs.Text);
            }

            if (_customizeMode && updateArgs.Command != VisualGitCommand.ForceUIShow)
                prgCmds[0].cmdf = (uint)(cmdf & ~OLECMDF.OLECMDF_INVISIBLE);
            else
                prgCmds[0].cmdf = (uint)cmdf;

            return 0; // S_OK
        }