Skip to content

Commit ea36e04

Browse files
committed
CompressedObjectTree
1 parent 4716b31 commit ea36e04

4 files changed

Lines changed: 71 additions & 2 deletions

File tree

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { Iterator, ISequence } from 'vs/base/common/iterator';
7+
import { AbstractTree, IAbstractTreeOptions } from 'vs/base/browser/ui/tree/abstractTree';
8+
import { ISpliceable } from 'vs/base/common/sequence';
9+
import { ITreeNode, ITreeModel, ITreeElement, ITreeRenderer, ITreeSorter, ICollapseStateChangeEvent } from 'vs/base/browser/ui/tree/tree';
10+
import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
11+
import { Event } from 'vs/base/common/event';
12+
import { ICompressedTreeNode, CompressedObjectTreeModel } from 'vs/base/browser/ui/tree/compressedObjectTreeModel';
13+
14+
export interface ICompressedObjectTreeOptions<T, TFilterData = void> extends IAbstractTreeOptions<ICompressedTreeNode<T>, TFilterData> {
15+
sorter?: ITreeSorter<ICompressedTreeNode<T>>;
16+
}
17+
18+
export class CompressedObjectTree<T extends NonNullable<any>, TFilterData = void> extends AbstractTree<ICompressedTreeNode<T> | null, TFilterData, T | null> {
19+
20+
protected model: CompressedObjectTreeModel<T, TFilterData>;
21+
22+
get onDidChangeCollapseState(): Event<ICollapseStateChangeEvent<ICompressedTreeNode<T>, TFilterData>> { return this.model.onDidChangeCollapseState; }
23+
24+
constructor(
25+
container: HTMLElement,
26+
delegate: IListVirtualDelegate<ICompressedTreeNode<T>>,
27+
renderers: ITreeRenderer<any /* TODO@joao */, TFilterData, any>[],
28+
options: ICompressedObjectTreeOptions<T, TFilterData> = {}
29+
) {
30+
super(container, delegate, renderers, options);
31+
}
32+
33+
setChildren(
34+
element: T | null,
35+
children?: ISequence<ITreeElement<T>>,
36+
onDidCreateNode?: (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => void,
37+
onDidDeleteNode?: (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => void
38+
): Iterator<ITreeElement<T | null>> {
39+
return this.model.setChildren(element, children, onDidCreateNode, onDidDeleteNode);
40+
}
41+
42+
rerender(element?: T): void {
43+
if (element === undefined) {
44+
this.view.rerender();
45+
return;
46+
}
47+
48+
this.model.rerender(element);
49+
}
50+
51+
resort(element: T, recursive = true): void {
52+
this.model.resort(element, recursive);
53+
}
54+
55+
protected createModel(view: ISpliceable<ITreeNode<ICompressedTreeNode<T>, TFilterData>>, options: ICompressedObjectTreeOptions<T, TFilterData>): ITreeModel<ICompressedTreeNode<T> | null, TFilterData, T | null> {
56+
return new CompressedObjectTreeModel(view, options);
57+
}
58+
}

src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,23 @@ export class CompressedObjectTreeModel<T extends NonNullable<any>, TFilterData e
239239

240240
expandTo(location: T | null): void {
241241
const compressedNode = this.getCompressedNode(location);
242-
return this.model.expandTo(compressedNode);
242+
this.model.expandTo(compressedNode);
243+
}
244+
245+
rerender(location: T | null): void {
246+
const compressedNode = this.getCompressedNode(location);
247+
this.model.rerender(compressedNode);
243248
}
244249

245250
refilter(): void {
246251
this.model.refilter();
247252
}
248253

254+
resort(location: T | null = null, recursive = true): void {
255+
const compressedNode = this.getCompressedNode(location);
256+
this.model.resort(compressedNode, recursive);
257+
}
258+
249259
private getCompressedNode(element: T | null): ICompressedTreeNode<T> | null {
250260
if (element === null) {
251261
return null;

src/vs/base/browser/ui/tree/objectTreeModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ export class ObjectTreeModel<T extends NonNullable<any>, TFilterData extends Non
144144
});
145145
}
146146

147-
rerender(element: T): void {
147+
rerender(element: T | null): void {
148148
const location = this.getElementLocation(element);
149149
this.model.rerender(location);
150150
}

src/vs/base/browser/ui/tree/tree.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ export interface ITreeModel<T, TFilterData, TRef> {
124124
setCollapsed(location: TRef, collapsed?: boolean, recursive?: boolean): boolean;
125125
expandTo(location: TRef): void;
126126

127+
rerender(location: TRef): void;
127128
refilter(): void;
128129
}
129130

0 commit comments

Comments
 (0)