mirror of
https://github.com/Microsoft/vscode
synced 2024-09-19 10:40:41 +00:00
Allow new tree navigator to start from element
This commit is contained in:
parent
e7102b1824
commit
73d7889cbe
|
@ -491,8 +491,8 @@ export abstract class AbstractTree<T, TFilterData, TRef> implements IDisposable
|
|||
|
||||
protected abstract createModel(view: ISpliceable<ITreeNode<T, TFilterData>>, options: IAbstractTreeOptions<T, TFilterData>): ITreeModel<T, TFilterData, TRef>;
|
||||
|
||||
navigate(): ITreeNavigator<T> {
|
||||
return new TreeNavigator(this.view, this.model);
|
||||
navigate(start?: TRef): ITreeNavigator<T> {
|
||||
return new TreeNavigator(this.view, this.model, start);
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
|
@ -508,9 +508,15 @@ interface ITreeNavigatorView<T extends NonNullable<any>, TFilterData> {
|
|||
|
||||
class TreeNavigator<T extends NonNullable<any>, TFilterData, TRef> implements ITreeNavigator<T> {
|
||||
|
||||
private index: number = -1;
|
||||
private index: number;
|
||||
|
||||
constructor(private view: ITreeNavigatorView<T, TFilterData>, private model: ITreeModel<T, TFilterData, TRef>) { }
|
||||
constructor(private view: ITreeNavigatorView<T, TFilterData>, private model: ITreeModel<T, TFilterData, TRef>, start?: TRef) {
|
||||
if (start) {
|
||||
this.index = this.model.getListIndex(start);
|
||||
} else {
|
||||
this.index = -1;
|
||||
}
|
||||
}
|
||||
|
||||
current(): T | null {
|
||||
if (this.index < 0 || this.index >= this.view.length) {
|
||||
|
|
|
@ -151,5 +151,38 @@ suite('ObjectTree', function () {
|
|||
assert.equal(navigator.first(), 0);
|
||||
assert.equal(navigator.last(), 2);
|
||||
});
|
||||
|
||||
test('should be able to start from node', () => {
|
||||
tree.setChildren(null, Iterator.fromArray([
|
||||
{
|
||||
element: 0, children: Iterator.fromArray([
|
||||
{ element: 10 },
|
||||
{ element: 11 },
|
||||
{ element: 12 },
|
||||
])
|
||||
},
|
||||
{ element: 1 },
|
||||
{ element: 2 }
|
||||
]));
|
||||
|
||||
const navigator = tree.navigate(1);
|
||||
|
||||
assert.equal(navigator.current(), 1);
|
||||
assert.equal(navigator.next(), 2);
|
||||
assert.equal(navigator.current(), 2);
|
||||
assert.equal(navigator.previous(), 1);
|
||||
assert.equal(navigator.current(), 1);
|
||||
assert.equal(navigator.previous(), 12);
|
||||
assert.equal(navigator.previous(), 11);
|
||||
assert.equal(navigator.previous(), 10);
|
||||
assert.equal(navigator.previous(), 0);
|
||||
assert.equal(navigator.previous(), null);
|
||||
assert.equal(navigator.next(), 0);
|
||||
assert.equal(navigator.next(), 10);
|
||||
assert.equal(navigator.parent(), 0);
|
||||
assert.equal(navigator.parent(), null);
|
||||
assert.equal(navigator.first(), 0);
|
||||
assert.equal(navigator.last(), 2);
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue