Beispiel #1
0
        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));
        }
Beispiel #3
0
        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);
        }