public OLECMDF GetCommandStatus(uint commandId, IntPtr commandText) { if (GetActionNameByCommandId(commandId).TryGetResult(out var actionName, out _) && SelectedProfile.Actions.Any(a => a.Name == actionName)) { var flags = OleCommandText.GetFlags(commandText); if (flags == OLECMDTEXTF.OLECMDTEXTF_NAME) { OleCommandText.SetText(commandText, actionName); } return(OLECMDF.OLECMDF_ENABLED | OLECMDF.OLECMDF_SUPPORTED); }
/// <inheritdoc/> /// <remarks> /// This command filter supports the <see cref="VsCommands2K.COMMENT_BLOCK"/> /// and <see cref="VsCommands2K.UNCOMMENT_BLOCK"/> commands. The commands are /// enabled when <see cref="ITextBuffer.CheckEditAccess"/> is <see langword="true"/>. /// </remarks> protected override OLECMDF QueryCommandStatus(ref Guid group, uint id, OleCommandText oleCommandText) { if (group == typeof(VsCommands2K).GUID) { VsCommands2K cmd = (VsCommands2K)id; switch (cmd) { case VsCommands2K.COMMENT_BLOCK: case VsCommands2K.UNCOMMENT_BLOCK: if (TextView.TextBuffer.CheckEditAccess()) { return(OLECMDF.OLECMDF_SUPPORTED | OLECMDF.OLECMDF_ENABLED); } else { return(OLECMDF.OLECMDF_SUPPORTED); } } } return(base.QueryCommandStatus(ref group, id, oleCommandText)); }
protected override OLECMDF QueryCommandStatus(ref Guid commandGroup, uint commandId, OleCommandText oleCommandText) { if (commandGroup == typeof(PerforceDiffMarginCommand).GUID) { switch ((PerforceDiffMarginCommand)commandId) { case PerforceDiffMarginCommand.ShowPopup: { EditorDiffMarginViewModel viewModel; if (!TryGetMarginViewModel(out viewModel)) { return(0); } var diffViewModel = GetCurrentDiffViewModel(viewModel); if (diffViewModel != null) { return(OLECMDF.OLECMDF_SUPPORTED | OLECMDF.OLECMDF_ENABLED); } else { return(OLECMDF.OLECMDF_SUPPORTED); } } case PerforceDiffMarginCommand.PreviousChange: case PerforceDiffMarginCommand.NextChange: { EditorDiffMarginViewModel viewModel; if (!TryGetMarginViewModel(out viewModel)) { return(0); } // First look for a diff already showing a popup EditorDiffViewModel diffViewModel = viewModel.DiffViewModels.OfType <EditorDiffViewModel>().FirstOrDefault(i => i.ShowPopup); if (diffViewModel != null) { RelayCommand <DiffViewModel> command = (PerforceDiffMarginCommand)commandId == PerforceDiffMarginCommand.NextChange ? viewModel.NextChangeCommand : viewModel.PreviousChangeCommand; if (command.CanExecute(diffViewModel)) { return(OLECMDF.OLECMDF_SUPPORTED | OLECMDF.OLECMDF_ENABLED); } else { return(OLECMDF.OLECMDF_SUPPORTED); } } diffViewModel = GetDiffViewModelToMoveTo(commandId, viewModel); if (diffViewModel != null) { return(OLECMDF.OLECMDF_SUPPORTED | OLECMDF.OLECMDF_ENABLED); } else { return(OLECMDF.OLECMDF_SUPPORTED); } } case PerforceDiffMarginCommand.RollbackChange: case PerforceDiffMarginCommand.CopyOldText: { EditorDiffMarginViewModel viewModel; if (!TryGetMarginViewModel(out viewModel)) { return(0); } EditorDiffViewModel diffViewModel = viewModel.DiffViewModels.OfType <EditorDiffViewModel>().FirstOrDefault(i => i.ShowPopup); if (diffViewModel != null) { ICommand command = (PerforceDiffMarginCommand)commandId == PerforceDiffMarginCommand.RollbackChange ? diffViewModel.RollbackCommand : diffViewModel.CopyOldTextCommand; if (command.CanExecute(diffViewModel)) { return(OLECMDF.OLECMDF_SUPPORTED | OLECMDF.OLECMDF_ENABLED); } } // This command only works when a popup is open return(OLECMDF.OLECMDF_SUPPORTED); } case PerforceDiffMarginCommand.ShowDiff: { EditorDiffMarginViewModel viewModel; if (!TryGetMarginViewModel(out viewModel)) { return(0); } if (viewModel.DiffViewModels.Any()) { return(OLECMDF.OLECMDF_SUPPORTED | OLECMDF.OLECMDF_ENABLED); } else { return(OLECMDF.OLECMDF_SUPPORTED); } } case PerforceDiffMarginCommand.PerforceDiffToolbar: case PerforceDiffMarginCommand.PerforceDiffToolbarGroup: // these aren't actually commands, but IDs of the command bars and groups break; default: break; } } return(0); }