private static void OnBeforeQueryStatus(object sender, EventArgs args) { CommandSubList matchedCommand = (CommandSubList)sender; bool isRootItem = matchedCommand.MatchedCommandId == 0; int itemIndex = isRootItem ? 0 : matchedCommand.MatchedCommandId - matchedCommand.BaseCommandID; if (itemIndex == 0) { matchedCommand.CachedCommandDetails = matchedCommand.GetCommandList(); } if ((itemIndex >= 0) && (itemIndex < matchedCommand.CachedCommandDetails.Length)) { matchedCommand.Enabled = true & matchedCommand.CachedCommandDetails[itemIndex].Enabled; matchedCommand.Text = matchedCommand.CachedCommandDetails[itemIndex].Name; matchedCommand.Checked = matchedCommand.CachedCommandDetails[itemIndex].Checked; } else { matchedCommand.Enabled = false; matchedCommand.Text = "No items"; } matchedCommand.MatchedCommandId = 0; }
public static async Task InitializeAsync(AsyncPackage package, Guid commandSet, int commandID, Func <CommandDetails[]> GetCommandList, Func <CommandDetails, Task> ExecuteCommand) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(package.DisposalToken); OleMenuCommandService commandService = await package.GetServiceAsync((typeof(IMenuCommandService))) as OleMenuCommandService; if (commandService == null) { return; } var command = new CommandSubList(new CommandID(commandSet, commandID)); command.GetCommandList = GetCommandList; command.ExecuteCommand = ExecuteCommand; commandService.AddCommand(command); }
private static void OnInvoked(object sender, EventArgs args) { ThreadHelper.ThrowIfNotOnUIThread(); CommandSubList matchedCommand = (CommandSubList)sender; bool isRootItem = matchedCommand.MatchedCommandId == 0; int itemIndex = isRootItem ? 0 : matchedCommand.MatchedCommandId - matchedCommand.BaseCommandID; if ((itemIndex >= 0) && (itemIndex < matchedCommand.CachedCommandDetails.Length)) { _ = Task.Run( async() => { await matchedCommand.ExecuteCommand(matchedCommand.CachedCommandDetails[itemIndex]); } ); } }