提交 0e82f118 编写于 作者: R rebornix

index based folding

上级 6e2d4c93
...@@ -45,13 +45,14 @@ export class FoldingController extends Disposable { ...@@ -45,13 +45,14 @@ export class FoldingController extends Disposable {
// folding icon // folding icon
const cellViewModel = e.target; const cellViewModel = e.target;
const state = viewModel.getFoldingState(cellViewModel); const modelIndex = viewModel.getCellIndex(cellViewModel);
const state = viewModel.getFoldingState(modelIndex);
if (state === CellFoldingState.None) { if (state === CellFoldingState.None) {
return; return;
} }
viewModel.setFoldingState(cellViewModel, state === CellFoldingState.Collapsed ? CellFoldingState.Expanded : CellFoldingState.Collapsed); viewModel.setFoldingState(modelIndex, state === CellFoldingState.Collapsed ? CellFoldingState.Expanded : CellFoldingState.Collapsed);
} }
return; return;
......
...@@ -165,6 +165,7 @@ export enum CellFoldingState { ...@@ -165,6 +165,7 @@ export enum CellFoldingState {
export interface FoldingRegionDelegate { export interface FoldingRegionDelegate {
onDidFoldingRegionChanged: Event<void>; onDidFoldingRegionChanged: Event<void>;
getFoldingStartIndex(cell: CellViewModel): number; getCellIndex(cell: CellViewModel): number;
getFoldingState(cell: CellViewModel): CellFoldingState; getFoldingStartIndex(index: number): number;
getFoldingState(index: number): CellFoldingState;
} }
...@@ -39,7 +39,7 @@ export class MarkdownCellViewModel extends BaseCellViewModel implements ICellVie ...@@ -39,7 +39,7 @@ export class MarkdownCellViewModel extends BaseCellViewModel implements ICellVie
readonly onDidChangeLayout = this._onDidChangeLayout.event; readonly onDidChangeLayout = this._onDidChangeLayout.event;
get foldingState() { get foldingState() {
return this.foldingDelegate.getFoldingState(this); return this.foldingDelegate.getFoldingState(this.foldingDelegate.getCellIndex(this));
} }
constructor( constructor(
......
...@@ -251,43 +251,30 @@ export class NotebookViewModel extends Disposable implements FoldingRegionDelega ...@@ -251,43 +251,30 @@ export class NotebookViewModel extends Disposable implements FoldingRegionDelega
this._updateFoldingRanges(); this._updateFoldingRanges();
})); }));
} }
getFoldingStartIndex(cell: CellViewModel): number {
const modelIndex = this.viewCells.indexOf(cell);
if (modelIndex < 0) {
return -1;
}
const range = this._foldingModel.regions.findRange(modelIndex + 1); getFoldingStartIndex(index: number): number {
const range = this._foldingModel.regions.findRange(index + 1);
const startIndex = this._foldingModel.regions.getStartLineNumber(range) - 1; const startIndex = this._foldingModel.regions.getStartLineNumber(range) - 1;
return startIndex; return startIndex;
} }
getFoldingState(cell: CellViewModel): CellFoldingState { getFoldingState(index: number): CellFoldingState {
const modelIndex = this.viewCells.indexOf(cell); const range = this._foldingModel.regions.findRange(index + 1);
if (modelIndex < 0) {
return -1;
}
const range = this._foldingModel.regions.findRange(modelIndex + 1);
const startIndex = this._foldingModel.regions.getStartLineNumber(range) - 1; const startIndex = this._foldingModel.regions.getStartLineNumber(range) - 1;
if (startIndex !== modelIndex) { if (startIndex !== index) {
return CellFoldingState.None; return CellFoldingState.None;
} }
return this._foldingModel.regions.isCollapsed(range) ? CellFoldingState.Collapsed : CellFoldingState.Expanded; return this._foldingModel.regions.isCollapsed(range) ? CellFoldingState.Collapsed : CellFoldingState.Expanded;
} }
setFoldingState(cell: CellViewModel, state: CellFoldingState): void { setFoldingState(index: number, state: CellFoldingState): void {
const modelIndex = this.viewCells.indexOf(cell);
if (modelIndex < 0) {
return;
}
const range = this._foldingModel.regions.findRange(modelIndex + 1); const range = this._foldingModel.regions.findRange(index + 1);
const startIndex = this._foldingModel.regions.getStartLineNumber(range) - 1; const startIndex = this._foldingModel.regions.getStartLineNumber(range) - 1;
if (startIndex !== modelIndex) { if (startIndex !== index) {
return; return;
} }
......
...@@ -10,7 +10,6 @@ import { withTestNotebook, TestCell } from 'vs/workbench/contrib/notebook/test/t ...@@ -10,7 +10,6 @@ import { withTestNotebook, TestCell } from 'vs/workbench/contrib/notebook/test/t
import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService'; import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService';
import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo'; import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo';
import { FoldingModel, CellFoldingState } from 'vs/workbench/contrib/notebook/browser/viewModel/foldingModel'; import { FoldingModel, CellFoldingState } from 'vs/workbench/contrib/notebook/browser/viewModel/foldingModel';
import { CellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
suite('Notebook Folding', () => { suite('Notebook Folding', () => {
const instantiationService = new TestInstantiationService(); const instantiationService = new TestInstantiationService();
...@@ -96,8 +95,7 @@ suite('Notebook Folding', () => { ...@@ -96,8 +95,7 @@ suite('Notebook Folding', () => {
[['var e = 7;'], 'markdown', CellKind.Markdown, [], {}], [['var e = 7;'], 'markdown', CellKind.Markdown, [], {}],
], ],
(editor, viewModel) => { (editor, viewModel) => {
const firstCell = viewModel.viewCells[0] as CellViewModel; viewModel.setFoldingState(0, CellFoldingState.Collapsed);
viewModel.setFoldingState(firstCell, CellFoldingState.Collapsed);
assert.deepEqual(viewModel.getHiddenRanges(), [ assert.deepEqual(viewModel.getHiddenRanges(), [
{ start: 1, length: 6 } { start: 1, length: 6 }
]); ]);
...@@ -118,8 +116,7 @@ suite('Notebook Folding', () => { ...@@ -118,8 +116,7 @@ suite('Notebook Folding', () => {
[['var e = 7;'], 'markdown', CellKind.Markdown, [], {}], [['var e = 7;'], 'markdown', CellKind.Markdown, [], {}],
], ],
(editor, viewModel) => { (editor, viewModel) => {
const thirdCell = viewModel.viewCells[2] as CellViewModel; viewModel.setFoldingState(2, CellFoldingState.Collapsed);
viewModel.setFoldingState(thirdCell, CellFoldingState.Collapsed);
assert.deepEqual(viewModel.getHiddenRanges(), [ assert.deepEqual(viewModel.getHiddenRanges(), [
{ start: 3, length: 2 } { start: 3, length: 2 }
]); ]);
...@@ -140,8 +137,7 @@ suite('Notebook Folding', () => { ...@@ -140,8 +137,7 @@ suite('Notebook Folding', () => {
[['var e = 7;'], 'markdown', CellKind.Markdown, [], {}], [['var e = 7;'], 'markdown', CellKind.Markdown, [], {}],
], ],
(editor, viewModel) => { (editor, viewModel) => {
const thirdCell = viewModel.viewCells[2] as CellViewModel; viewModel.setFoldingState(2, CellFoldingState.Collapsed);
viewModel.setFoldingState(thirdCell, CellFoldingState.Collapsed);
assert.deepEqual(viewModel.getHiddenRanges(), [ assert.deepEqual(viewModel.getHiddenRanges(), [
{ start: 3, length: 4 } { start: 3, length: 4 }
]); ]);
...@@ -164,19 +160,19 @@ suite('Notebook Folding', () => { ...@@ -164,19 +160,19 @@ suite('Notebook Folding', () => {
[['var e = 7;'], 'markdown', CellKind.Markdown, [], {}], [['var e = 7;'], 'markdown', CellKind.Markdown, [], {}],
], ],
(editor, viewModel) => { (editor, viewModel) => {
viewModel.setFoldingState(viewModel.viewCells[0] as CellViewModel, CellFoldingState.Collapsed); viewModel.setFoldingState(0, CellFoldingState.Collapsed);
assert.deepEqual(viewModel.getHiddenRanges(), [ assert.deepEqual(viewModel.getHiddenRanges(), [
{ start: 1, length: 1 } { start: 1, length: 1 }
]); ]);
viewModel.setFoldingState(viewModel.viewCells[5] as CellViewModel, CellFoldingState.Collapsed); viewModel.setFoldingState(5, CellFoldingState.Collapsed);
viewModel.setFoldingState(viewModel.viewCells[2] as CellViewModel, CellFoldingState.Collapsed); viewModel.setFoldingState(2, CellFoldingState.Collapsed);
assert.deepEqual(viewModel.getHiddenRanges(), [ assert.deepEqual(viewModel.getHiddenRanges(), [
{ start: 1, length: 1 }, { start: 1, length: 1 },
{ start: 3, length: 4 } { start: 3, length: 4 }
]); ]);
viewModel.setFoldingState(viewModel.viewCells[2] as CellViewModel, CellFoldingState.Expanded); viewModel.setFoldingState(2, CellFoldingState.Expanded);
assert.deepEqual(viewModel.getHiddenRanges(), [ assert.deepEqual(viewModel.getHiddenRanges(), [
{ start: 1, length: 1 }, { start: 1, length: 1 },
{ start: 6, length: 1 } { start: 6, length: 1 }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册