Skip to content

Commit b414733

Browse files
committed
Add setting for cell statusbar visibility
microsoft#104772
1 parent f59e0c1 commit b414733

10 files changed

Lines changed: 98 additions & 61 deletions

File tree

src/vs/workbench/contrib/notebook/browser/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export const CELL_BOTTOM_MARGIN = 6;
2424
// Top and bottom padding inside the monaco editor in a cell, which are included in `cell.editorHeight`
2525
export const EDITOR_TOP_PADDING = 12;
2626
export const EDITOR_BOTTOM_PADDING = 4;
27+
export const EDITOR_BOTTOM_PADDING_WITHOUT_STATUSBAR = 12;
2728

2829
export const CELL_OUTPUT_PADDING = 14;
2930

src/vs/workbench/contrib/notebook/browser/media/notebook.css

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,10 @@
350350
position: relative;
351351
}
352352

353+
.monaco-workbench .notebookOverlay.cell-statusbar-hidden .cell-statusbar-container {
354+
display: none;
355+
}
356+
353357
.monaco-workbench .notebookOverlay .cell-statusbar-container .cell-status-left {
354358
display: flex;
355359
flex-grow: 1;
@@ -397,46 +401,42 @@
397401
bottom: 0px;
398402
top: 0px;
399403
}
400-
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .cell .run-button-container {
401-
position: relative;
404+
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .run-button-container {
405+
display: flex;
406+
align-items: center;
407+
justify-content: flex-end;
408+
position: absolute;
409+
top: 17px;
402410
height: 16px;
403-
flex-shrink: 0;
404-
top: 9px;
405-
z-index: 27; /* Above the drag handle */
406411
}
407412

408-
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .cell .run-button-container .monaco-toolbar {
413+
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .run-button-container .monaco-toolbar {
409414
visibility: hidden;
415+
z-index: 27; /* Above the drag handle */
410416
}
411417

412-
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .cell .run-button-container .monaco-toolbar .codicon {
418+
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .run-button-container .monaco-toolbar .codicon {
413419
margin: 0;
414420
padding-right: 4px;
415421
}
416422

417-
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .cell .run-button-container .monaco-toolbar .actions-container {
423+
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .run-button-container .monaco-toolbar .actions-container {
418424
justify-content: center;
419425
}
420426

421-
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row:hover .cell.runnable .run-button-container .monaco-toolbar,
422-
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.focused .cell.runnable .run-button-container .monaco-toolbar,
423-
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.cell-output-hover .cell.runnable .run-button-container .monaco-toolbar {
427+
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row:hover .runnable .run-button-container .monaco-toolbar,
428+
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.focused .runnable .run-button-container .monaco-toolbar,
429+
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.cell-output-hover .runnable .run-button-container .monaco-toolbar {
424430
visibility: visible;
425431
}
426432

427-
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .cell .execution-count-label {
428-
position: absolute;
433+
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .execution-count-label {
429434
font-size: 10px;
430435
font-family: var(--monaco-monospace-font);
431436
white-space: pre;
432-
box-sizing: border-box;
433437
opacity: .6;
434-
435-
/* Sizing hacks */
436-
left: 26px;
437-
width: 35px;
438-
bottom: 0px;
439-
text-align: center;
438+
padding-top: 1px;
439+
margin-right: 1px;
440440
}
441441

442442
.monaco-workbench .notebookOverlay .cell .cell-editor-part {

src/vs/workbench/contrib/notebook/browser/notebook.contribution.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import { NotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookEd
3030
import { NotebookEditorInput } from 'vs/workbench/contrib/notebook/browser/notebookEditorInput';
3131
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
3232
import { NotebookService } from 'vs/workbench/contrib/notebook/browser/notebookServiceImpl';
33-
import { CellKind, CellToolbarLocKey, CellUri, DisplayOrderKey, getCellUndoRedoComparisonKey, NotebookDocumentBackupData, NotebookEditorPriority } from 'vs/workbench/contrib/notebook/common/notebookCommon';
33+
import { CellKind, CellToolbarLocKey, CellUri, DisplayOrderKey, getCellUndoRedoComparisonKey, NotebookDocumentBackupData, NotebookEditorPriority, ShowCellStatusbarKey } from 'vs/workbench/contrib/notebook/common/notebookCommon';
3434
import { NotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/notebookProvider';
3535
import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService';
3636
import { IEditorService, IOpenEditorOverride } from 'vs/workbench/services/editor/common/editorService';
@@ -466,6 +466,11 @@ configurationRegistry.registerConfiguration({
466466
type: 'string',
467467
enum: ['left', 'right', 'hidden'],
468468
default: 'right'
469+
},
470+
[ShowCellStatusbarKey]: {
471+
description: nls.localize('notebook.showCellStatusbar.description', "Whether the cell statusbar should be shown."),
472+
type: 'boolean',
473+
default: true
469474
}
470475
}
471476
});

src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import { CodeCellRenderer, MarkdownCellRenderer, NotebookCellListDelegate, ListT
3636
import { CodeCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/codeCellViewModel';
3737
import { NotebookEventDispatcher, NotebookLayoutChangedEvent } from 'vs/workbench/contrib/notebook/browser/viewModel/eventDispatcher';
3838
import { CellViewModel, IModelDecorationsChangeAccessor, INotebookEditorViewState, NotebookViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
39-
import { CellKind, IProcessedOutput, INotebookKernelInfo, INotebookKernelInfoDto, INotebookKernelInfo2, NotebookRunState, NotebookCellRunState, IInsetRenderOutput, CellToolbarLocKey } from 'vs/workbench/contrib/notebook/common/notebookCommon';
39+
import { CellKind, IProcessedOutput, INotebookKernelInfo, INotebookKernelInfoDto, INotebookKernelInfo2, NotebookRunState, NotebookCellRunState, IInsetRenderOutput, CellToolbarLocKey, ShowCellStatusbarKey } from 'vs/workbench/contrib/notebook/common/notebookCommon';
4040
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
4141
import { Webview } from 'vs/workbench/contrib/webview/browser/webview';
4242
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
@@ -245,7 +245,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
245245
}
246246
}
247247

248-
if (e.affectsConfiguration(CellToolbarLocKey)) {
248+
if (e.affectsConfiguration(CellToolbarLocKey) || e.affectsConfiguration(ShowCellStatusbarKey)) {
249249
this._updateForNotebookConfiguration();
250250
}
251251
});
@@ -299,6 +299,9 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
299299
if (cellToolbarLocation === 'left' || cellToolbarLocation === 'right' || cellToolbarLocation === 'hidden') {
300300
this._overlayContainer.classList.add(`cell-title-toolbar-${cellToolbarLocation}`);
301301
}
302+
303+
const showCellStatusBar = this.configurationService.getValue<boolean>(ShowCellStatusbarKey);
304+
this._overlayContainer.classList.toggle('cell-statusbar-hidden', !showCellStatusBar);
302305
}
303306

304307
updateEditorFocus() {
@@ -1993,14 +1996,14 @@ registerThemingParticipant((theme, collector) => {
19931996

19941997
// Cell Margin
19951998
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row div.cell { margin: 0px ${CELL_MARGIN * 2}px 0px ${CELL_MARGIN}px; }`);
1996-
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row div.cell.code { margin-left: ${CODE_CELL_LEFT_MARGIN}px; }`);
1999+
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row div.cell.code { margin-left: ${CODE_CELL_LEFT_MARGIN + CELL_RUN_GUTTER}px; }`);
2000+
collector.addRule(`.notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .run-button-container { width: ${CODE_CELL_LEFT_MARGIN + CELL_RUN_GUTTER}px; }`);
19972001
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row > .cell-inner-container { padding-top: ${CELL_TOP_MARGIN}px; }`);
19982002
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .markdown-cell-row > .cell-inner-container { padding-bottom: ${CELL_BOTTOM_MARGIN}px; }`);
19992003
collector.addRule(`.notebookOverlay .output { margin: 0px ${CELL_MARGIN}px 0px ${CODE_CELL_LEFT_MARGIN + CELL_RUN_GUTTER}px; }`);
20002004
collector.addRule(`.notebookOverlay .output { width: calc(100% - ${CODE_CELL_LEFT_MARGIN + CELL_RUN_GUTTER + (CELL_MARGIN * 2)}px); }`);
20012005

20022006
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row div.cell.markdown { padding-left: ${CELL_RUN_GUTTER}px; }`);
2003-
collector.addRule(`.notebookOverlay .cell .run-button-container { width: 20px; margin: 0px ${Math.floor(CELL_RUN_GUTTER - 20) / 2}px; }`);
20042007
collector.addRule(`.notebookOverlay .monaco-list .monaco-list-row .cell-focus-indicator-top { height: ${CELL_TOP_MARGIN}px; }`);
20052008
collector.addRule(`.notebookOverlay .monaco-list .monaco-list-row .cell-focus-indicator-side { bottom: ${BOTTOM_CELL_TOOLBAR_GAP}px; }`);
20062009
collector.addRule(`.notebookOverlay .monaco-list .monaco-list-row.code-cell-row .cell-focus-indicator-left,

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

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
3535
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
3636
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
3737
import { INotificationService } from 'vs/platform/notification/common/notification';
38-
import { BOTTOM_CELL_TOOLBAR_GAP, CELL_BOTTOM_MARGIN, CELL_TOP_MARGIN, EDITOR_BOTTOM_PADDING, EDITOR_TOOLBAR_HEIGHT, EDITOR_TOP_PADDING } from 'vs/workbench/contrib/notebook/browser/constants';
38+
import { BOTTOM_CELL_TOOLBAR_GAP, CELL_BOTTOM_MARGIN, CELL_TOP_MARGIN, EDITOR_BOTTOM_PADDING, EDITOR_BOTTOM_PADDING_WITHOUT_STATUSBAR, EDITOR_TOOLBAR_HEIGHT, EDITOR_TOP_PADDING } from 'vs/workbench/contrib/notebook/browser/constants';
3939
import { CancelCellAction, DeleteCellAction, ExecuteCellAction, INotebookCellActionContext } from 'vs/workbench/contrib/notebook/browser/contrib/coreActions';
4040
import { BaseCellRenderTemplate, CellEditState, CodeCellRenderTemplate, EXPAND_CELL_CONTENT_COMMAND_ID, ICellViewModel, INotebookEditor, isCodeCellRenderTemplate, MarkdownCellRenderTemplate } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
4141
import { CellContextKeyManager } from 'vs/workbench/contrib/notebook/browser/view/renderers/cellContextKeys';
@@ -45,7 +45,7 @@ import { StatefulMarkdownCell } from 'vs/workbench/contrib/notebook/browser/view
4545
import { CodeCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/codeCellViewModel';
4646
import { MarkdownCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/markdownCellViewModel';
4747
import { CellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
48-
import { CellKind, NotebookCellMetadata, NotebookCellRunState } from 'vs/workbench/contrib/notebook/common/notebookCommon';
48+
import { CellKind, NotebookCellMetadata, NotebookCellRunState, ShowCellStatusbarKey } from 'vs/workbench/contrib/notebook/common/notebookCommon';
4949
import { createAndFillInActionBarActionsWithVerticalSeparators, VerticalSeparator, VerticalSeparatorViewItem } from './cellActionView';
5050
import { CodiconActionViewItem, CellLanguageStatusBarItem } from 'vs/workbench/contrib/notebook/browser/view/renderers/commonViewComponents';
5151
import { CellDragAndDropController, DRAGGING_CLASS } from 'vs/workbench/contrib/notebook/browser/view/renderers/dnd';
@@ -82,10 +82,6 @@ export class NotebookCellListDelegate implements IListVirtualDelegate<CellViewMo
8282
export class CellEditorOptions {
8383

8484
private static fixedEditorOptions: IEditorOptions = {
85-
padding: {
86-
top: EDITOR_TOP_PADDING,
87-
bottom: EDITOR_BOTTOM_PADDING
88-
},
8985
scrollBeyondLastLine: false,
9086
scrollbar: {
9187
verticalScrollbarSize: 14,
@@ -115,17 +111,24 @@ export class CellEditorOptions {
115111
constructor(configurationService: IConfigurationService, language: string) {
116112

117113
this.disposable = configurationService.onDidChangeConfiguration(e => {
118-
if (e.affectsConfiguration('editor')) {
114+
if (e.affectsConfiguration('editor') || e.affectsConfiguration(ShowCellStatusbarKey)) {
119115
this._value = computeEditorOptions();
120116
this._onDidChange.fire(this.value);
121117
}
122118
});
123119

124120
const computeEditorOptions = () => {
121+
const showCellStatusBar = configurationService.getValue<boolean>(ShowCellStatusbarKey);
122+
const editorPadding = {
123+
top: EDITOR_TOP_PADDING,
124+
bottom: showCellStatusBar ? EDITOR_BOTTOM_PADDING : EDITOR_BOTTOM_PADDING_WITHOUT_STATUSBAR
125+
};
126+
125127
const editorOptions = deepClone(configurationService.getValue<IEditorOptions>('editor', { overrideIdentifier: language }));
126128
const computed = {
127129
...editorOptions,
128-
...CellEditorOptions.fixedEditorOptions
130+
...CellEditorOptions.fixedEditorOptions,
131+
...{ padding: editorPadding }
129132
};
130133

131134
if (!computed.folding) {
@@ -660,10 +663,10 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
660663
const dragHandle = DOM.append(container, DOM.$('.cell-drag-handle'));
661664

662665
const cellContainer = DOM.append(container, $('.cell.code'));
663-
const runButtonContainer = DOM.append(cellContainer, $('.run-button-container'));
664-
const runToolbar = disposables.add(this.createToolbar(runButtonContainer));
665666

666-
const executionOrderLabel = DOM.append(cellContainer, $('div.execution-count-label'));
667+
const runButtonContainer = DOM.append(container, $('.run-button-container'));
668+
const runToolbar = disposables.add(this.createToolbar(runButtonContainer));
669+
const executionOrderLabel = DOM.append(runButtonContainer, $('div.execution-count-label'));
667670

668671
// create a special context key service that set the inCompositeEditor-contextkey
669672
const editorContextKeyService = disposables.add(this.contextKeyServiceProvider(container));
@@ -761,7 +764,7 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
761764

762765
private updateForMetadata(element: CodeCellViewModel, templateData: CodeCellRenderTemplate): void {
763766
const metadata = element.getEvaluatedMetadata(this.notebookEditor.viewModel!.notebookDocument.metadata);
764-
DOM.toggleClass(templateData.cellContainer, 'runnable', !!metadata.runnable);
767+
DOM.toggleClass(templateData.container, 'runnable', !!metadata.runnable);
765768
this.updateExecutionOrder(metadata, templateData);
766769
templateData.cellStatusMessageContainer.textContent = metadata?.statusMessage || '';
767770

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as DOM from 'vs/base/browser/dom';
7+
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
78
import { raceCancellation } from 'vs/base/common/async';
89
import { CancellationTokenSource } from 'vs/base/common/cancellation';
10+
import { KeyCode } from 'vs/base/common/keyCodes';
911
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
12+
import { IDimension } from 'vs/editor/common/editorCommon';
1013
import { IModeService } from 'vs/editor/common/services/modeService';
1114
import * as nls from 'vs/nls';
1215
import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput';
1316
import { EDITOR_BOTTOM_PADDING, EDITOR_TOP_PADDING } from 'vs/workbench/contrib/notebook/browser/constants';
1417
import { CellFocusMode, CodeCellRenderTemplate, INotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
15-
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
1618
import { getResizesObserver } from 'vs/workbench/contrib/notebook/browser/view/renderers/sizeObserver';
1719
import { CodeCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/codeCellViewModel';
18-
import { CellOutputKind, IProcessedOutput, IRenderOutput, ITransformedDisplayOutputDto, BUILTIN_RENDERER_ID, RenderOutputType, outputHasDynamicHeight } from 'vs/workbench/contrib/notebook/common/notebookCommon';
19-
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
20-
import { KeyCode } from 'vs/base/common/keyCodes';
21-
import { IDimension } from 'vs/editor/common/editorCommon';
20+
import { BUILTIN_RENDERER_ID, CellOutputKind, IProcessedOutput, IRenderOutput, ITransformedDisplayOutputDto, outputHasDynamicHeight, RenderOutputType } from 'vs/workbench/contrib/notebook/common/notebookCommon';
21+
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
2222

2323
interface IMimeTypeRenderer extends IQuickPickItem {
2424
index: number;

0 commit comments

Comments
 (0)