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; }
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 }