Skip to content

Commit d6961ef

Browse files
roblourensGeoffrey
authored and
Geoffrey
committed
CellExecutionPart microsoft#131808
1 parent bdf55b8 commit d6961ef

File tree

4 files changed

+68
-46
lines changed

4 files changed

+68
-46
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import * as DOM from 'vs/base/browser/dom';
7+
import { CellViewModelStateChangeEvent, ICellViewModel, INotebookEditorDelegate } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
8+
import { CellPart } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellPart';
9+
import { BaseCellRenderTemplate } from 'vs/workbench/contrib/notebook/browser/view/notebookRenderingCommon';
10+
import { NotebookCellInternalMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
11+
12+
export class CellExecutionPart extends CellPart {
13+
constructor(
14+
private readonly _notebookEditor: INotebookEditorDelegate,
15+
private readonly _executionOrderLabel: HTMLElement
16+
) {
17+
super();
18+
}
19+
20+
setup(templateData: BaseCellRenderTemplate): void {
21+
this._register(this._notebookEditor.onDidChangeActiveKernel(() => {
22+
if (templateData.currentRenderedCell) {
23+
this.updateExecutionOrder(templateData.currentRenderedCell.internalMetadata);
24+
}
25+
}));
26+
}
27+
28+
renderCell(element: ICellViewModel, _templateData: BaseCellRenderTemplate): void {
29+
this.updateExecutionOrder(element.internalMetadata);
30+
}
31+
32+
private updateExecutionOrder(internalMetadata: NotebookCellInternalMetadata): void {
33+
if (this._notebookEditor.activeKernel?.implementsExecutionOrder) {
34+
const executionOrderLabel = typeof internalMetadata.executionOrder === 'number' ?
35+
`[${internalMetadata.executionOrder}]` :
36+
'[ ]';
37+
this._executionOrderLabel.innerText = executionOrderLabel;
38+
} else {
39+
this._executionOrderLabel.innerText = '';
40+
}
41+
}
42+
43+
updateState(element: ICellViewModel, e: CellViewModelStateChangeEvent): void {
44+
if (e.internalMetadataChanged) {
45+
this.updateExecutionOrder(element.internalMetadata);
46+
}
47+
}
48+
49+
updateLayoutNow(element: ICellViewModel): void {
50+
if (element.isInputCollapsed) {
51+
DOM.hide(this._executionOrderLabel);
52+
} else {
53+
DOM.show(this._executionOrderLabel);
54+
}
55+
}
56+
57+
prepareLayout(): void { }
58+
}

src/vs/workbench/contrib/notebook/browser/view/cellParts/codeCell.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,6 @@ export class CodeCell extends Disposable {
351351
private _collapseInput() {
352352
// hide the editor and execution label, keep the run button
353353
DOM.hide(this.templateData.editorPart);
354-
DOM.hide(this.templateData.executionOrderLabel);
355354
this.templateData.container.classList.toggle('input-collapsed', true);
356355

357356
// remove input preview
@@ -378,7 +377,6 @@ export class CodeCell extends Disposable {
378377

379378
private _showInput() {
380379
DOM.show(this.templateData.editorPart);
381-
DOM.show(this.templateData.executionOrderLabel);
382380
DOM.hide(this.templateData.cellInputCollapsedContainer);
383381
}
384382

src/vs/workbench/contrib/notebook/browser/view/notebookRenderingCommon.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { Range } from 'vs/editor/common/core/range';
1616
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
1717
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
1818
import { ICellOutputViewModel, ICellViewModel, IGenericCellViewModel, INotebookCellOutputLayoutInfo, INotebookEditorCreationOptions, IRenderOutput, RenderOutputType } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
19+
import { CellExecutionPart } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellExecution';
1920
import { CellFocusIndicator } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellFocusIndicator';
2021
import { CellProgressBar } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellProgressBar';
2122
import { BetweenCellToolbar, CellTitleToolbarPart } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellToolbars';
@@ -117,14 +118,14 @@ export interface MarkdownCellRenderTemplate extends BaseCellRenderTemplate {
117118

118119
export interface CodeCellRenderTemplate extends BaseCellRenderTemplate {
119120
runToolbar: RunToolbar;
120-
executionOrderLabel: HTMLElement;
121121
outputContainer: FastDomNode<HTMLElement>;
122122
cellOutputCollapsedContainer: HTMLElement;
123123
outputShowMoreContainer: FastDomNode<HTMLElement>;
124124
focusSinkElement: HTMLElement;
125125
editor: ICodeEditor;
126126
progressBar: CellProgressBar;
127127
dragHandle: FastDomNode<HTMLElement>;
128+
cellExecution: CellExecutionPart;
128129
}
129130

130131
export function isCodeCellRenderTemplate(templateData: BaseCellRenderTemplate): templateData is CodeCellRenderTemplate {

src/vs/workbench/contrib/notebook/browser/view/renderers/cellRenderer.ts

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import { CellContextKeyManager } from 'vs/workbench/contrib/notebook/browser/vie
3434
import { CellDecorations } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellDecorations';
3535
import { CellDragAndDropController } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellDnd';
3636
import { CellEditorOptions } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellEditorOptions';
37+
import { CellExecutionPart } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellExecution';
3738
import { CellFocusIndicator } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellFocusIndicator';
3839
import { CellProgressBar } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellProgressBar';
3940
import { BetweenCellToolbar, CellTitleToolbarPart } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellToolbars';
@@ -45,7 +46,7 @@ import { BaseCellRenderTemplate, CodeCellRenderTemplate, MarkdownCellRenderTempl
4546
import { CodeCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/codeCellViewModel';
4647
import { MarkupCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/markupCellViewModel';
4748
import { CellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
48-
import { CellKind, NotebookCellInternalMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
49+
import { CellKind } from 'vs/workbench/contrib/notebook/common/notebookCommon';
4950

5051
const $ = DOM.$;
5152

@@ -462,11 +463,11 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
462463
progressBar,
463464
statusBar,
464465
focusIndicator: new CellFocusIndicator(this.notebookEditor, focusIndicatorTop, focusIndicatorLeft, focusIndicatorRight, focusIndicatorBottom),
466+
cellExecution: new CellExecutionPart(this.notebookEditor, executionOrderLabel),
465467
titleToolbar,
466468
betweenCellToolbar,
467469
focusSinkElement,
468470
runToolbar,
469-
executionOrderLabel,
470471
outputContainer,
471472
outputShowMoreContainer,
472473
editor,
@@ -487,12 +488,7 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
487488
}
488489
}));
489490

490-
templateDisposables.add(this.notebookEditor.onDidChangeActiveKernel(() => {
491-
if (templateData.currentRenderedCell) {
492-
this.updateForKernel(templateData.currentRenderedCell as CodeCellViewModel, templateData);
493-
}
494-
}));
495-
491+
templateData.cellExecution.setup(templateData);
496492
this.commonRenderTemplate(templateData);
497493

498494
return templateData;
@@ -582,30 +578,6 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
582578
return combinedDisposable(dragHandleListener, collapsedPartListener, clickHandler);
583579
}
584580

585-
private updateForInternalMetadata(element: CodeCellViewModel, templateData: CodeCellRenderTemplate): void {
586-
if (!this.notebookEditor.hasModel()) {
587-
return;
588-
}
589-
590-
const internalMetadata = element.internalMetadata;
591-
this.updateExecutionOrder(internalMetadata, templateData);
592-
}
593-
594-
private updateForKernel(element: CodeCellViewModel, templateData: CodeCellRenderTemplate): void {
595-
this.updateExecutionOrder(element.internalMetadata, templateData);
596-
}
597-
598-
private updateExecutionOrder(internalMetadata: NotebookCellInternalMetadata, templateData: CodeCellRenderTemplate): void {
599-
if (this.notebookEditor.activeKernel?.implementsExecutionOrder) {
600-
const executionOrderLabel = typeof internalMetadata.executionOrder === 'number' ?
601-
`[${internalMetadata.executionOrder}]` :
602-
'[ ]';
603-
templateData.executionOrderLabel.innerText = executionOrderLabel;
604-
} else {
605-
templateData.executionOrderLabel.innerText = '';
606-
}
607-
}
608-
609581
private updateForLayout(element: CodeCellViewModel, templateData: CodeCellRenderTemplate): void {
610582
templateData.elementDisposables.add(DOM.scheduleAtNextAnimationFrame(() => {
611583
const bottomToolbarDimensions = this.notebookEditor.notebookOptions.computeBottomToolbarDimensions(this.notebookEditor.textModel?.viewType);
@@ -618,6 +590,8 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
618590

619591
this.updateForTitleMenu(templateData);
620592
templateData.betweenCellToolbar.updateLayoutNow(element);
593+
594+
templateData.cellExecution.updateLayoutNow(element);
621595
}));
622596
}
623597

@@ -658,7 +632,8 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
658632
templateData.progressBar,
659633
templateData.titleToolbar,
660634
templateData.runToolbar,
661-
cellEditorOptions
635+
cellEditorOptions,
636+
templateData.cellExecution,
662637
]));
663638

664639
this.renderedEditors.set(element, templateData.editor);
@@ -672,16 +647,6 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
672647
this.updateForLayout(element, templateData);
673648
}));
674649

675-
this.updateForInternalMetadata(element, templateData);
676-
677-
elementDisposables.add(element.onDidChangeState((e) => {
678-
if (e.metadataChanged || e.internalMetadataChanged) {
679-
this.updateForInternalMetadata(element, templateData);
680-
}
681-
}));
682-
683-
this.updateForKernel(element, templateData);
684-
685650
templateData.elementDisposables.add(templateData.titleToolbar.onDidUpdateActions(() => {
686651
// Don't call directly here - is initially called by updateForLayout in the next frame
687652
this.updateForTitleMenu(templateData);

0 commit comments

Comments
 (0)