提交 13872112 编写于 作者: R rebornix

document INotebookEditor.

上级 18b40451
......@@ -22,20 +22,77 @@ export interface NotebookLayoutInfo {
}
export interface INotebookEditor {
viewType: string | undefined;
/**
* Notebook view model attached to the current editor
*/
viewModel: NotebookViewModel | undefined;
/**
* Focus the notebook editor cell list
*/
focus(): void;
/**
* Layout info for the notebook editor
*/
getLayoutInfo(): NotebookLayoutInfo;
/**
* Fetch the output renderers for notebook outputs.
*/
getOutputRenderer(): OutputRenderer;
/**
* Insert a new cell around `cell`
*/
insertEmptyNotebookCell(cell: CellViewModel, type: CellKind, direction: 'above' | 'below'): Promise<void>;
/**
* Delete a cell from the notebook
*/
deleteNotebookCell(cell: CellViewModel): void;
/**
* Switch the cell into editing mode.
*
* For code cell, the monaco editor will be focused.
* For markdown cell, it will switch from preview mode to editing mode, which focuses the monaco editor.
*/
editNotebookCell(cell: CellViewModel): void;
/**
* Quit cell editing mode.
*/
saveNotebookCell(cell: CellViewModel): void;
/**
* Focus the container of a cell (the monaco editor inside is not focused).
*/
focusNotebookCell(cell: CellViewModel, focusEditor: boolean): void;
/**
* Get current active cell
*/
getActiveCell(): CellViewModel | undefined;
/**
* Layout the cell with a new height
*/
layoutNotebookCell(cell: CellViewModel, height: number): void;
/**
* Render the output in webview layer
*/
createInset(cell: CellViewModel, output: IOutput, shadowContent: string, offset: number): void;
/**
* Remove the output from the webview layer
*/
removeInset(output: IOutput): void;
/**
* Trigger the editor to scroll from scroll event programmatically
*/
triggerScroll(event: IMouseWheelEvent): void;
/**
......@@ -73,7 +130,17 @@ export interface INotebookEditor {
* The notebook is virtualized and this method should be called to create/delete editor decorations safely.
*/
changeDecorations(callback: (changeAccessor: IModelDecorationsChangeAccessor) => any): any;
/**
* Show Find Widget.
*
* Currently Find is still part of the NotebookEditor core
*/
showFind(): void;
/**
* Hide Find Widget
*/
hideFind(): void;
}
......
......@@ -21,7 +21,7 @@ import { contrastBorder, editorBackground, focusBorder, foreground, textBlockQuo
import { IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
import { EditorOptions, IEditorMemento, ICompositeCodeEditor, IEditorCloseEvent } from 'vs/workbench/common/editor';
import { INotebookEditor, CellFindMatch, NotebookLayoutInfo } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { INotebookEditor, NotebookLayoutInfo } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { NotebookEditorInput, NotebookEditorModel } from 'vs/workbench/contrib/notebook/browser/notebookEditorInput';
import { INotebookService } from 'vs/workbench/contrib/notebook/browser/notebookService';
import { OutputRenderer } from 'vs/workbench/contrib/notebook/browser/view/output/outputRenderer';
......@@ -170,8 +170,6 @@ export class NotebookEditor extends BaseEditor implements INotebookEditor {
set minimumWidth(value: number) { /*noop*/ }
set maximumWidth(value: number) { /*noop*/ }
get viewType() { return this.notebookViewModel?.viewType; }
//#region Editor Core
......@@ -272,7 +270,7 @@ export class NotebookEditor extends BaseEditor implements INotebookEditor {
this.list?.splice(0, this.list?.length);
if (this.notebookViewModel && !this.notebookViewModel.isDirty()) {
this.notebookService.destoryNotebookDocument(this.viewType!, this.notebookViewModel!.notebookDocument);
this.notebookService.destoryNotebookDocument(this.notebookViewModel.viewType!, this.notebookViewModel!.notebookDocument);
this.notebookViewModel.dispose();
this.notebookViewModel = undefined;
}
......@@ -506,7 +504,7 @@ export class NotebookEditor extends BaseEditor implements INotebookEditor {
DOM.scheduleAtNextAnimationFrame(() => {
splices.reverse().forEach((diff) => {
this.list?.splice(diff[0], diff[1], diff[2].map(cell => {
return this.instantiationService.createInstance(CellViewModel, this.viewType!, this.notebookViewModel!.handle, cell);
return this.instantiationService.createInstance(CellViewModel, this.notebookViewModel!.viewType, this.notebookViewModel!.handle, cell);
}));
});
});
......@@ -517,7 +515,7 @@ export class NotebookEditor extends BaseEditor implements INotebookEditor {
const language = newLanguages && newLanguages.length ? newLanguages[0] : 'markdown';
const index = this.notebookViewModel!.getViewCellIndex(cell);
const insertIndex = direction === 'above' ? index : index + 1;
const newModeCell = await this.notebookService.createNotebookCell(this.viewType!, this.notebookViewModel!.uri, insertIndex, language, type);
const newModeCell = await this.notebookService.createNotebookCell(this.notebookViewModel!.viewType, this.notebookViewModel!.uri, insertIndex, language, type);
const newCell = this.notebookViewModel!.insertCell(insertIndex, newModeCell!);
this.list?.splice(insertIndex, 0, [newCell]);
......@@ -534,7 +532,7 @@ export class NotebookEditor extends BaseEditor implements INotebookEditor {
async deleteNotebookCell(cell: CellViewModel): Promise<void> {
const index = this.notebookViewModel!.getViewCellIndex(cell);
await this.notebookService.deleteNotebookCell(this.viewType!, this.notebookViewModel!.uri, index);
await this.notebookService.deleteNotebookCell(this.notebookViewModel!.viewType, this.notebookViewModel!.uri, index);
this.notebookViewModel!.deleteCell(index);
this.list?.splice(index, 1);
}
......
......@@ -12,7 +12,7 @@ import { NotebookViewModel, IModelDecorationsChangeAccessor } from 'vs/workbench
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { CellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookCellViewModel';
import { NotebookEditorModel } from 'vs/workbench/contrib/notebook/browser/notebookEditorInput';
import { INotebookEditor, CellFindMatch, NotebookLayoutInfo } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { INotebookEditor, NotebookLayoutInfo } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent';
import { OutputRenderer } from 'vs/workbench/contrib/notebook/browser/view/output/outputRenderer';
import { BareFontInfo } from 'vs/editor/common/config/fontInfo';
......@@ -93,7 +93,6 @@ export class TestNotebookEditor implements INotebookEditor {
}
constructor(
public viewType: string
) {
}
......@@ -176,7 +175,7 @@ export function createTestCellViewModel(instantiationService: IInstantiationServ
export function withTestNotebook(instantiationService: IInstantiationService, cells: [string[], string, CellKind, IOutput[]][], callback: (editor: TestNotebookEditor, viewModel: NotebookViewModel) => void) {
const viewType = 'notebook';
const editor = new TestNotebookEditor(viewType);
const editor = new TestNotebookEditor();
const notebook = new TestNotebook(0, viewType, URI.parse('test'));
notebook.cells = cells.map((cell, index) => {
return new TestCell(viewType, index, cell[0], cell[1], cell[2], cell[3]);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册