Skip to content

Commit eb05b79

Browse files
committed
do not need isUntitled.
1 parent 9753398 commit eb05b79

File tree

3 files changed

+37
-85
lines changed

3 files changed

+37
-85
lines changed

src/vs/workbench/api/browser/mainThreadNotebook.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { CancellationToken } from 'vs/base/common/cancellation';
88
import { Emitter } from 'vs/base/common/event';
99
import { combinedDisposable, Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle';
1010
import { ResourceMap } from 'vs/base/common/map';
11+
import { Schemas } from 'vs/base/common/network';
1112
import { URI, UriComponents } from 'vs/base/common/uri';
1213
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
1314
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
@@ -456,9 +457,14 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
456457

457458
if (data.cells.length) {
458459
textModel.initialize(data!.cells);
459-
} else {
460-
const mainCell = textModel.createCellTextModel('', textModel.resolvedLanguages.length ? textModel.resolvedLanguages[0] : '', CellKind.Code, [], undefined);
461-
textModel.insertTemplateCell(mainCell);
460+
} else if (textModel.uri.scheme === Schemas.untitled) {
461+
textModel.initialize([{
462+
cellKind: CellKind.Code,
463+
language: textModel.resolvedLanguages.length ? textModel.resolvedLanguages[0] : '',
464+
outputs: [],
465+
metadata: undefined,
466+
source: ''
467+
}]);
462468
}
463469

464470
this._proxy.$acceptDocumentPropertiesChanged(textModel.uri, { metadata: textModel.metadata });
@@ -604,7 +610,7 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
604610
const textModel = this._notebookService.getNotebookTextModel(URI.from(resource));
605611

606612
if (textModel) {
607-
textModel.handleEdit(label, () => {
613+
textModel.handleUnknownEdit(label, () => {
608614
return this._proxy.$undoNotebook(textModel.viewType, textModel.uri, editId, textModel.isDirty);
609615
}, () => {
610616
return this._proxy.$redoNotebook(textModel.viewType, textModel.uri, editId, textModel.isDirty);

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,6 +1021,8 @@ export class ListTopCellToolbar extends Disposable {
10211021
this._modelDisposables.add(this.notebookEditor.viewModel.onDidChangeViewCells(() => {
10221022
this.updateClass();
10231023
}));
1024+
1025+
this.updateClass();
10241026
}
10251027
}));
10261028

src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts

Lines changed: 25 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -113,18 +113,18 @@ class DelayedEmitter {
113113

114114
emit(data: {
115115
triggerDirty: { value: boolean } | undefined,
116-
modelContentChange: { value: NotebookTextModelChangedEvent } | undefined,
116+
contentChange: { value: NotebookTextModelChangedEvent } | undefined,
117117
}) {
118118
this._increaseVersion();
119119

120120
if (data.triggerDirty) {
121121
this._textModel.setDirty(data.triggerDirty.value);
122122
}
123123

124-
if (data.modelContentChange) {
124+
if (data.contentChange) {
125125
this._onDidChangeContent.fire(
126126
{
127-
...data.modelContentChange.value,
127+
...data.contentChange.value,
128128
versionId: this._textModel.versionId
129129
}
130130
);
@@ -164,7 +164,6 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
164164

165165
metadata: NotebookDocumentMetadata = notebookDocumentMetadataDefaults;
166166
transientOptions: TransientOptions = { transientMetadata: {}, transientOutputs: false };
167-
private _isUntitled: boolean | undefined = undefined;
168167
private _versionId = 0;
169168

170169
//#region selection TODO@rebornix this shouldn't be here
@@ -251,14 +250,15 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
251250
return new NotebookCellTextModel(cellUri, cellHandle, cell.source, cell.language, cell.cellKind, cell.outputs || [], cell.metadata, this.transientOptions, this._modelService);
252251
});
253252

254-
this._isUntitled = false;
255-
256253
for (let i = 0; i < mainCells.length; i++) {
257254
this._mapping.set(mainCells[i].handle, mainCells[i]);
258255
const dirtyStateListener = mainCells[i].onDidChangeContent(() => {
259-
this.setDirty(true);
260-
this._increaseVersionId();
261-
this._onDidChangeContent.fire({ kind: NotebookCellsChangeType.ChangeCellContent, versionId: this.versionId, synchronous: true });
256+
this._eventEmitter.emit({
257+
triggerDirty: { value: true },
258+
contentChange: {
259+
value: { kind: NotebookCellsChangeType.ChangeCellContent, versionId: this.versionId, synchronous: true }
260+
}
261+
});
262262
});
263263

264264
this._cellListeners.set(mainCells[i].handle, dirtyStateListener);
@@ -325,7 +325,6 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
325325
return;
326326
}
327327

328-
this._isUntitled = false; //TODO@rebornix fishy?
329328
const oldViewCells = this._cells.slice(0);
330329
const oldMap = new Map(this._mapping);
331330

@@ -348,7 +347,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
348347
const dirtyStateListener = cell.onDidChangeContent(() => {
349348
this._eventEmitter.emit({
350349
triggerDirty: { value: true },
351-
modelContentChange: { value: { kind: NotebookCellsChangeType.ChangeCellContent, versionId: this.versionId, synchronous: true } }
350+
contentChange: { value: { kind: NotebookCellsChangeType.ChangeCellContent, versionId: this.versionId, synchronous: true } }
352351
});
353352
});
354353
this._cellListeners.set(cell.handle, dirtyStateListener);
@@ -378,7 +377,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
378377
// should be deferred
379378
this._eventEmitter.emit({
380379
triggerDirty: { value: true },
381-
modelContentChange: {
380+
contentChange: {
382381
value: {
383382
kind: NotebookCellsChangeType.ModelChange,
384383
versionId: this._versionId,
@@ -389,7 +388,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
389388
});
390389
}
391390

392-
handleEdit(label: string | undefined, undo: () => void, redo: () => void): void {
391+
handleUnknownEdit(label: string | undefined, undo: () => void, redo: () => void): void {
393392
this._operationManager.pushEditOperation({
394393
type: UndoRedoElementType.Resource,
395394
resource: this.uri,
@@ -404,6 +403,10 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
404403
this.setDirty(true);
405404
}
406405

406+
handleUnknownChange() {
407+
this.setDirty(true);
408+
}
409+
407410
createSnapshot(preserveBOM?: boolean): ITextSnapshot {
408411
return new NotebookTextModelSnapshot(this);
409412
}
@@ -412,17 +415,13 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
412415
this._versionId = this._versionId + 1;
413416
}
414417

415-
handleUnknownChange() {
416-
this.setDirty(true);
417-
}
418-
419418
updateLanguages(languages: string[]) {
420419
const allLanguages = languages.find(lan => lan === '*');
421420
this._allLanguages = allLanguages !== undefined;
422421
this._languages = languages;
423422

424423
const resolvedLanguages = this.resolvedLanguages;
425-
if (this._isUntitled && resolvedLanguages.length && this._cells.length) {
424+
if (resolvedLanguages.length && this._cells.length) {
426425
this._cells[0].language = resolvedLanguages[0];
427426
}
428427
}
@@ -431,70 +430,17 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
431430
this.metadata = metadata;
432431
this._eventEmitter.emit({
433432
triggerDirty: { value: true },
434-
modelContentChange: { value: { kind: NotebookCellsChangeType.ChangeDocumentMetadata, versionId: this.versionId, metadata: this.metadata, synchronous: true } }
433+
contentChange: { value: { kind: NotebookCellsChangeType.ChangeDocumentMetadata, versionId: this.versionId, metadata: this.metadata, synchronous: true } }
435434
});
436435
}
437436

438-
insertTemplateCell(cell: NotebookCellTextModel) {
439-
if (this._cells.length > 0 || this._isUntitled !== undefined) {
440-
return;
441-
}
442-
443-
this._isUntitled = true;
444-
this._cells = [cell];
445-
this._mapping.set(cell.handle, cell);
446-
447-
const dirtyStateListener = cell.onDidChangeContent(() => {
448-
this._isUntitled = false;
449-
this._eventEmitter.emit({
450-
triggerDirty: { value: true },
451-
modelContentChange: { value: { kind: NotebookCellsChangeType.ChangeCellContent, versionId: this.versionId, synchronous: true } }
452-
});
453-
});
454-
455-
this._cellListeners.set(cell.handle, dirtyStateListener);
456-
this.setDirty(false);
457-
458-
// this._eventEmitter.emit({
459-
// triggerDirty: undefined,
460-
// modelContentChange: { value: {
461-
// kind: NotebookCellsChangeType.ModelChange,
462-
// versionId: this._versionId, changes:
463-
// [[
464-
// 0,
465-
// 0,
466-
// [cell]
467-
// ]],
468-
// synchronous: true
469-
// } }
470-
// });
471-
472-
this.setDirty(false);
473-
// this._onDidChangeContent.fire(NotebookCellsChangeType.ModelChange);
474-
475-
this._onDidChangeContent.fire({
476-
kind: NotebookCellsChangeType.ModelChange,
477-
versionId: this._versionId, changes:
478-
[[
479-
0,
480-
0,
481-
[cell]
482-
]],
483-
synchronous: true
484-
});
485-
486-
return;
487-
}
488-
489437
private _insertNewCell(index: number, cells: NotebookCellTextModel[], synchronous: boolean, endSelections?: number[]): void {
490-
this._isUntitled = false;
491-
492438
for (let i = 0; i < cells.length; i++) {
493439
this._mapping.set(cells[i].handle, cells[i]);
494440
const dirtyStateListener = cells[i].onDidChangeContent(() => {
495441
this._eventEmitter.emit({
496442
triggerDirty: { value: true },
497-
modelContentChange: { value: { kind: NotebookCellsChangeType.ChangeCellContent, versionId: this.versionId, synchronous: true } }
443+
contentChange: { value: { kind: NotebookCellsChangeType.ChangeCellContent, versionId: this.versionId, synchronous: true } }
498444
});
499445
});
500446

@@ -504,7 +450,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
504450
this._cells.splice(index, 0, ...cells);
505451
this._eventEmitter.emit({
506452
triggerDirty: { value: true },
507-
modelContentChange: {
453+
contentChange: {
508454
value: {
509455
kind: NotebookCellsChangeType.ModelChange,
510456
versionId: this._versionId, changes:
@@ -523,8 +469,6 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
523469
}
524470

525471
private _removeCell(index: number, count: number, synchronous: boolean, endSelections?: number[]) {
526-
this._isUntitled = false;
527-
528472
for (let i = index; i < index + count; i++) {
529473
const cell = this._cells[i];
530474
this._cellListeners.get(cell.handle)?.dispose();
@@ -533,7 +477,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
533477
this._cells.splice(index, count);
534478
this._eventEmitter.emit({
535479
triggerDirty: { value: true },
536-
modelContentChange: { value: { kind: NotebookCellsChangeType.ModelChange, versionId: this._versionId, changes: [[index, count, []]], synchronous, endSelections } }
480+
contentChange: { value: { kind: NotebookCellsChangeType.ModelChange, versionId: this._versionId, changes: [[index, count, []]], synchronous, endSelections } }
537481
});
538482
}
539483

@@ -582,7 +526,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
582526

583527
this._eventEmitter.emit({
584528
triggerDirty: { value: triggerDirtyChange },
585-
modelContentChange: {
529+
contentChange: {
586530
value: { kind: NotebookCellsChangeType.ChangeCellMetadata, versionId: this._versionId, index: this._cells.indexOf(cell), metadata: cell.metadata, synchronous: true }
587531
}
588532
});
@@ -596,7 +540,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
596540

597541
this._eventEmitter.emit({
598542
triggerDirty: { value: !this.transientOptions.transientOutputs },
599-
modelContentChange: {
543+
contentChange: {
600544
value: {
601545
kind: NotebookCellsChangeType.Output,
602546
versionId: this.versionId,
@@ -626,7 +570,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
626570

627571
this._eventEmitter.emit({
628572
triggerDirty: undefined,
629-
modelContentChange: { value: { kind: NotebookCellsChangeType.ChangeLanguage, versionId: this._versionId, index: this._cells.indexOf(cell), language: languageId, synchronous: true } }
573+
contentChange: { value: { kind: NotebookCellsChangeType.ChangeLanguage, versionId: this._versionId, index: this._cells.indexOf(cell), language: languageId, synchronous: true } }
630574
});
631575
}
632576
}
@@ -671,7 +615,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
671615
this._cells.splice(newIdx, 0, ...cells);
672616
this._eventEmitter.emit({
673617
triggerDirty: { value: true },
674-
modelContentChange: { value: { kind: NotebookCellsChangeType.Move, versionId: this._versionId, index, length, newIdx, cells, synchronous, endSelections } }
618+
contentChange: { value: { kind: NotebookCellsChangeType.Move, versionId: this._versionId, index, length, newIdx, cells, synchronous, endSelections } }
675619
});
676620
}
677621

0 commit comments

Comments
 (0)