Add double-click to collapse

Fix #113248
This commit is contained in:
Rob Lourens 2021-03-22 17:12:34 -07:00
parent c45540033a
commit bd2402a6e8

View file

@ -39,7 +39,7 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { INotificationService } from 'vs/platform/notification/common/notification';
import { BOTTOM_CELL_TOOLBAR_GAP, CELL_BOTTOM_MARGIN, CELL_TOP_MARGIN, EDITOR_BOTTOM_PADDING, EDITOR_BOTTOM_PADDING_WITHOUT_STATUSBAR, EDITOR_TOOLBAR_HEIGHT } from 'vs/workbench/contrib/notebook/browser/constants';
import { DeleteCellAction, INotebookCellActionContext } from 'vs/workbench/contrib/notebook/browser/contrib/coreActions';
import { BaseCellRenderTemplate, CellEditState, CodeCellRenderTemplate, EditorTopPaddingChangeEvent, EXPAND_CELL_INPUT_COMMAND_ID, getEditorTopPadding, ICellViewModel, INotebookEditor, isCodeCellRenderTemplate, MarkdownCellRenderTemplate } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { BaseCellRenderTemplate, CellEditState, CodeCellLayoutInfo, CodeCellRenderTemplate, EditorTopPaddingChangeEvent, EXPAND_CELL_INPUT_COMMAND_ID, getEditorTopPadding, ICellViewModel, INotebookEditor, isCodeCellRenderTemplate, MarkdownCellRenderTemplate } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { CellContextKeyManager } from 'vs/workbench/contrib/notebook/browser/view/renderers/cellContextKeys';
import { CellDragAndDropController, DRAGGING_CLASS } from 'vs/workbench/contrib/notebook/browser/view/renderers/cellDnd';
import { CellMenus } from 'vs/workbench/contrib/notebook/browser/view/renderers/cellMenus';
@ -842,6 +842,7 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
this.dndController.registerDragHandle(templateData, rootContainer, dragHandle, () => new CodeCellDragImageRenderer().getDragImage(templateData, templateData.editor, 'code'));
disposables.add(this.addDoubleClickCollapseHandler(templateData));
disposables.add(DOM.addDisposableListener(focusSinkElement, DOM.EventType.FOCUS, () => {
if (templateData.currentRenderedCell && (templateData.currentRenderedCell as CodeCellViewModel).outputsViewModels.length) {
this.notebookEditor.focusNotebookCell(templateData.currentRenderedCell, 'output');
@ -853,6 +854,28 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
return templateData;
}
private addDoubleClickCollapseHandler(templateData: CodeCellRenderTemplate): IDisposable {
return DOM.addDisposableListener(templateData.dragHandle, DOM.EventType.DBLCLICK, e => {
const cell = templateData.currentRenderedCell;
if (!cell) {
return;
}
const clickedOnInput = e.offsetY < (cell.layoutInfo as CodeCellLayoutInfo).outputContainerOffset;
const viewModel = this.notebookEditor.viewModel!;
const metadata: Partial<NotebookCellMetadata> = clickedOnInput ?
{ inputCollapsed: !cell.metadata?.inputCollapsed } :
{ outputCollapsed: !cell.metadata?.outputCollapsed };
viewModel.notebookDocument.applyEdits([
{
editType: CellEditType.PartialMetadata,
index: viewModel.getCellIndex(cell),
metadata
}
], true, undefined, () => undefined, undefined);
});
}
private setupRunToolbar(runButtonContainer: HTMLElement, contextKeyService: IContextKeyService, disposables: DisposableStore): ToolBar {
const runToolbar = this.createToolbar(runButtonContainer);
const runMenu = this.cellMenus.getCellExecuteMenu(contextKeyService);