From 1c445fe4c7c540d323a206f2f7cb8df9aa99d60e Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Tue, 10 Aug 2021 15:45:02 -0700 Subject: [PATCH] Enable contributing to cell execute dropdown Towards #130524 --- .../browser/dropdownWithPrimaryActionViewItem.ts | 10 ++++++++-- src/vs/workbench/api/common/menusExtensionPoint.ts | 5 +++++ .../notebook/browser/contrib/coreActions.ts | 14 +++++++++----- .../browser/view/renderers/cellRenderer.ts | 12 ++++++------ .../contrib/terminal/browser/terminalEditor.ts | 2 +- .../contrib/terminal/browser/terminalView.ts | 2 +- .../contrib/testing/browser/testingExplorerView.ts | 1 + 7 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts b/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts index 99c51bed712..218d43aa16f 100644 --- a/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts +++ b/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts @@ -10,13 +10,17 @@ import { ActionViewItem, BaseActionViewItem } from 'vs/base/browser/ui/actionbar import { DropdownMenuActionViewItem } from 'vs/base/browser/ui/dropdown/dropdownActionViewItem'; import { IAction } from 'vs/base/common/actions'; import { Event } from 'vs/base/common/event'; -import { KeyCode } from 'vs/base/common/keyCodes'; +import { KeyCode, ResolvedKeybinding } from 'vs/base/common/keyCodes'; import { MenuEntryActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem'; import { MenuItemAction } from 'vs/platform/actions/common/actions'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { INotificationService } from 'vs/platform/notification/common/notification'; +export interface IDropdownWithPrimaryActionViewItemOptions { + getKeyBinding?: (action: IAction) => ResolvedKeybinding | undefined; +} + export class DropdownWithPrimaryActionViewItem extends BaseActionViewItem { private _primaryAction: ActionViewItem; private _dropdown: DropdownMenuActionViewItem; @@ -33,6 +37,7 @@ export class DropdownWithPrimaryActionViewItem extends BaseActionViewItem { dropdownMenuActions: IAction[], className: string, private readonly _contextMenuProvider: IContextMenuProvider, + private readonly _options: IDropdownWithPrimaryActionViewItemOptions | undefined, @IKeybindingService _keybindingService: IKeybindingService, @INotificationService _notificationService: INotificationService, @IContextKeyService _contextKeyService: IContextKeyService @@ -41,7 +46,8 @@ export class DropdownWithPrimaryActionViewItem extends BaseActionViewItem { this._primaryAction = new MenuEntryActionViewItem(primaryAction, undefined, _keybindingService, _notificationService, _contextKeyService); this._dropdown = new DropdownMenuActionViewItem(dropdownAction, dropdownMenuActions, this._contextMenuProvider, { menuAsChild: true, - classNames: ['codicon', 'codicon-chevron-down'] + classNames: ['codicon', 'codicon-chevron-down'], + keybindingProvider: this._options?.getKeyBinding }); } diff --git a/src/vs/workbench/api/common/menusExtensionPoint.ts b/src/vs/workbench/api/common/menusExtensionPoint.ts index b0f7edc5449..64c26c6e7ec 100644 --- a/src/vs/workbench/api/common/menusExtensionPoint.ts +++ b/src/vs/workbench/api/common/menusExtensionPoint.ts @@ -188,6 +188,11 @@ const apiMenus: IAPIMenu[] = [ id: MenuId.NotebookCellTitle, description: localize('notebook.cell.title', "The contributed notebook cell title menu") }, + { + key: 'notebook/cell/execute', + id: MenuId.NotebookCellExecute, + description: localize('notebook.cell.execute', "The contributed notebook cell execution menu") + }, { key: 'interactive/toolbar', id: MenuId.InteractiveToolbar, diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts b/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts index dcdf576aaf2..ba29941e2b9 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts @@ -19,7 +19,7 @@ import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { IQuickInputService, IQuickPickItem, QuickPickInput } from 'vs/platform/quickinput/common/quickInput'; import { BaseCellRenderTemplate, CellEditState, CellFocusMode, EXECUTE_CELL_COMMAND_ID, EXPAND_CELL_INPUT_COMMAND_ID, getNotebookEditorFromEditorPane, IActiveNotebookEditor, ICellViewModel, NOTEBOOK_CELL_EDITABLE, NOTEBOOK_CELL_HAS_OUTPUTS, NOTEBOOK_CELL_INPUT_COLLAPSED, NOTEBOOK_CELL_LIST_FOCUSED, NOTEBOOK_CELL_MARKDOWN_EDIT_MODE, NOTEBOOK_CELL_OUTPUT_COLLAPSED, NOTEBOOK_CELL_EXECUTION_STATE, NOTEBOOK_CELL_TYPE, NOTEBOOK_EDITOR_EDITABLE, NOTEBOOK_EDITOR_FOCUSED, NOTEBOOK_IS_ACTIVE_EDITOR, NOTEBOOK_KERNEL_COUNT, NOTEBOOK_INTERRUPTIBLE_KERNEL, NOTEBOOK_HAS_RUNNING_CELL, CHANGE_CELL_LANGUAGE, QUIT_EDIT_CELL_COMMAND_ID, NOTEBOOK_USE_CONSOLIDATED_OUTPUT_BUTTON, NOTEBOOK_HAS_OUTPUTS, NOTEBOOK_CELL_EXECUTING, NOTEBOOK_MISSING_KERNEL_EXTENSION, EXPAND_CELL_OUTPUT_COMMAND_ID } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; -import { CellEditType, CellKind, ICellEditOperation, isDocumentExcludePattern, NotebookCellMetadata, NotebookCellExecutionState, TransientCellMetadata, TransientDocumentMetadata, SelectionStateType, ICellReplaceEdit, OpenGettingStarted, GlobalToolbarShowLabel } from 'vs/workbench/contrib/notebook/common/notebookCommon'; +import { CellEditType, CellKind, ICellEditOperation, isDocumentExcludePattern, NotebookCellMetadata, NotebookCellExecutionState, TransientCellMetadata, TransientDocumentMetadata, SelectionStateType, ICellReplaceEdit, OpenGettingStarted, GlobalToolbarShowLabel, ConsolidatedRunButton } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import { ICellRange, isICellRange } from 'vs/workbench/contrib/notebook/common/notebookRange'; import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService'; import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; @@ -417,7 +417,9 @@ registerAction2(class ExecuteAboveCells extends NotebookMultiCellAction this.keybindingService.lookupKeybinding(action.id, executionContextKeyService); const executionContextKeyService = disposables.add(getCodeCellExecutionContextKeyService(contextKeyService)); const toolbar = disposables.add(new ToolBar(container, this.contextMenuService, { - getKeyBinding: action => this.keybindingService.lookupKeybinding(action.id, executionContextKeyService), + getKeyBinding: keybindingProvider, actionViewItemProvider: _action => { actionViewItemDisposables.clear(); @@ -836,16 +837,15 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende return undefined; } - if (!this.notebookEditor.notebookOptions.getLayoutConfiguration().consolidatedRunButton) { - return undefined; - } - const item = this.instantiationService.createInstance(DropdownWithPrimaryActionViewItem, primary, dropdownAction, actions.secondary, 'notebook-cell-run-toolbar', - this.contextMenuService); + this.contextMenuService, + { + getKeyBinding: keybindingProvider + }); actionViewItemDisposables.add(item.onDidChangeDropdownVisibility(visible => { cellContainer.classList.toggle('cell-run-toolbar-dropdown-active', visible); })); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalEditor.ts b/src/vs/workbench/contrib/terminal/browser/terminalEditor.ts index ebd29604ecd..3b96d099d46 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalEditor.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalEditor.ts @@ -202,7 +202,7 @@ export class TerminalEditor extends EditorPane { switch (action.id) { case TerminalCommandId.CreateWithProfileButton: { const actions = getTerminalActionBarArgs(TerminalLocation.Editor, this._terminalService.availableProfiles, this._getDefaultProfileName(), this._terminalContributionService.terminalProfiles, this._instantiationService, this._terminalService, this._contextKeyService, this._commandService, this._dropdownMenu); - const button = this._instantiationService.createInstance(DropdownWithPrimaryActionViewItem, actions.primaryAction, actions.dropdownAction, actions.dropdownMenuActions, actions.className, this._contextMenuService); + const button = this._instantiationService.createInstance(DropdownWithPrimaryActionViewItem, actions.primaryAction, actions.dropdownAction, actions.dropdownMenuActions, actions.className, this._contextMenuService, {}); return button; } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index 507b2d2998e..e6d7737c1bc 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -206,7 +206,7 @@ export class TerminalViewPane extends ViewPane { const actions = getTerminalActionBarArgs(TerminalLocation.TerminalView, this._terminalService.availableProfiles, this._getDefaultProfileName(), this._terminalContributionService.terminalProfiles, this._instantiationService, this._terminalService, this._contextKeyService, this._commandService, this._dropdownMenu); - this._tabButtons = new DropdownWithPrimaryActionViewItem(actions.primaryAction, actions.dropdownAction, actions.dropdownMenuActions, actions.className, this._contextMenuService, this._keybindingService, this._notificationService, this._contextKeyService); + this._tabButtons = new DropdownWithPrimaryActionViewItem(actions.primaryAction, actions.dropdownAction, actions.dropdownMenuActions, actions.className, this._contextMenuService, {}, this._keybindingService, this._notificationService, this._contextKeyService); this._updateTabActionBar(this._terminalService.availableProfiles); return this._tabButtons; } diff --git a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts index ae5e53b9a14..8de9632d86f 100644 --- a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts +++ b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts @@ -363,6 +363,7 @@ export class TestingExplorerView extends ViewPane { primaryAction, dropdownAction, dropdownActions, '', this.contextMenuService, + {} ); }