/* Copyright (C) 2014-2019 de4dot@gmail.com This file is part of dnSpy dnSpy is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. dnSpy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with dnSpy. If not, see . */ using System; using System.Windows.Input; namespace dnSpy.Contracts.Command { /// /// Implements by using a instance /// public sealed class CommandTargetCommand : ICommand { readonly ICommandTarget commandTarget; readonly Guid group; readonly int cmdId; /// /// Constructor /// /// Command target /// Command ID public CommandTargetCommand(ICommandTarget commandTarget, StandardIds cmdId) : this(commandTarget, CommandConstants.StandardGroup, (int)cmdId) { } /// /// Constructor /// /// Command target /// Command ID public CommandTargetCommand(ICommandTarget commandTarget, TextEditorIds cmdId) : this(commandTarget, CommandConstants.TextEditorGroup, (int)cmdId) { } /// /// Constructor /// /// Command target /// Command group, eg. /// Command ID public CommandTargetCommand(ICommandTarget commandTarget, Guid group, int cmdId) { this.commandTarget = commandTarget ?? throw new ArgumentNullException(nameof(commandTarget)); this.group = group; this.cmdId = cmdId; } event EventHandler? ICommand.CanExecuteChanged { add => CommandManager.RequerySuggested += value; remove => CommandManager.RequerySuggested -= value; } bool ICommand.CanExecute(object? parameter) => commandTarget.CanExecute(group, cmdId) == CommandTargetStatus.Handled; void ICommand.Execute(object? parameter) => commandTarget.Execute(group, cmdId); } }