mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-26 03:29:00 +01:00
* pass repl flag to exthost notebook, more API helpers * fix parsing label * pass through viewtype instead of isRepl flag
107 lines
3.2 KiB
TypeScript
107 lines
3.2 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { illegalArgument } from '../../../base/common/errors.js';
|
|
import { MainThreadNotebookEditorsShape } from './extHost.protocol.js';
|
|
import * as extHostConverter from './extHostTypeConverters.js';
|
|
import * as extHostTypes from './extHostTypes.js';
|
|
import * as vscode from 'vscode';
|
|
import { ExtHostNotebookDocument } from './extHostNotebookDocument.js';
|
|
|
|
export class ExtHostNotebookEditor {
|
|
|
|
public static readonly apiEditorsToExtHost = new WeakMap<vscode.NotebookEditor, ExtHostNotebookEditor>();
|
|
|
|
private _visible: boolean = false;
|
|
|
|
private _editor?: vscode.NotebookEditor;
|
|
|
|
constructor(
|
|
readonly id: string,
|
|
private readonly _proxy: MainThreadNotebookEditorsShape,
|
|
readonly notebookData: ExtHostNotebookDocument,
|
|
private _visibleRanges: vscode.NotebookRange[],
|
|
private _selections: vscode.NotebookRange[],
|
|
private _viewColumn: vscode.ViewColumn | undefined,
|
|
private readonly viewType: string
|
|
) { }
|
|
|
|
get apiEditor(): vscode.NotebookEditor {
|
|
if (!this._editor) {
|
|
const that = this;
|
|
this._editor = {
|
|
get notebook() {
|
|
return that.notebookData.apiNotebook;
|
|
},
|
|
get selection() {
|
|
return that._selections[0];
|
|
},
|
|
set selection(selection: vscode.NotebookRange) {
|
|
this.selections = [selection];
|
|
},
|
|
get selections() {
|
|
return that._selections;
|
|
},
|
|
set selections(value: vscode.NotebookRange[]) {
|
|
if (!Array.isArray(value) || !value.every(extHostTypes.NotebookRange.isNotebookRange)) {
|
|
throw illegalArgument('selections');
|
|
}
|
|
that._selections = value;
|
|
that._trySetSelections(value);
|
|
},
|
|
get visibleRanges() {
|
|
return that._visibleRanges;
|
|
},
|
|
revealRange(range, revealType) {
|
|
that._proxy.$tryRevealRange(
|
|
that.id,
|
|
extHostConverter.NotebookRange.from(range),
|
|
revealType ?? extHostTypes.NotebookEditorRevealType.Default
|
|
);
|
|
},
|
|
get viewColumn() {
|
|
return that._viewColumn;
|
|
},
|
|
get replOptions() {
|
|
if (that.viewType === 'repl') {
|
|
return { appendIndex: this.notebook.cellCount - 1 };
|
|
}
|
|
return undefined;
|
|
},
|
|
[Symbol.for('debug.description')]() {
|
|
return `NotebookEditor(${this.notebook.uri.toString()})`;
|
|
}
|
|
};
|
|
|
|
ExtHostNotebookEditor.apiEditorsToExtHost.set(this._editor, this);
|
|
}
|
|
return this._editor;
|
|
}
|
|
|
|
get visible(): boolean {
|
|
return this._visible;
|
|
}
|
|
|
|
_acceptVisibility(value: boolean) {
|
|
this._visible = value;
|
|
}
|
|
|
|
_acceptVisibleRanges(value: vscode.NotebookRange[]): void {
|
|
this._visibleRanges = value;
|
|
}
|
|
|
|
_acceptSelections(selections: vscode.NotebookRange[]): void {
|
|
this._selections = selections;
|
|
}
|
|
|
|
private _trySetSelections(value: vscode.NotebookRange[]): void {
|
|
this._proxy.$trySetSelections(this.id, value.map(extHostConverter.NotebookRange.from));
|
|
}
|
|
|
|
_acceptViewColumn(value: vscode.ViewColumn | undefined) {
|
|
this._viewColumn = value;
|
|
}
|
|
}
|