Setter and getter for data provider in tree viewer

This commit is contained in:
Sandeep Somavarapu 2018-02-12 17:02:42 +01:00
parent 8fdf170a08
commit 4f306c91c8
3 changed files with 8 additions and 19 deletions

View file

@ -31,7 +31,7 @@ export class MainThreadTreeViews extends Disposable implements MainThreadTreeVie
$registerTreeViewDataProvider(treeViewId: string): void {
const dataProvider = this._register(new TreeViewDataProvider(treeViewId, this._proxy, this.messageService));
this._dataProviders.set(treeViewId, dataProvider);
this.viewsService.registerTreeViewDataProvider(treeViewId, dataProvider);
this.viewsService.getTreeViewer(treeViewId).dataProvider = dataProvider;
}
$refresh(treeViewId: string, itemsToRefresh: { [treeItemHandle: string]: ITreeItem }): void {

View file

@ -6,7 +6,7 @@
import 'vs/css!./media/views';
import Event, { Emitter } from 'vs/base/common/event';
import * as errors from 'vs/base/common/errors';
import { IDisposable, Disposable } from 'vs/base/common/lifecycle';
import { IDisposable, Disposable, dispose } from 'vs/base/common/lifecycle';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { TPromise } from 'vs/base/common/winjs.base';
import * as DOM from 'vs/base/browser/dom';
@ -52,14 +52,6 @@ export class CustomViewsService extends Disposable implements ICustomViewsServic
return this.viewers.get(id);
}
registerTreeViewDataProvider(id: string, dataProvider: ITreeViewDataProvider): void {
const treeViewer = <CustomTreeViewer>this.getTreeViewer(id);
if (treeViewer) {
treeViewer.setDataProvider(dataProvider);
dataProvider.onDispose(() => treeViewer.setDataProvider(null));
}
}
private createViewers(viewDescriptors: IViewDescriptor[]): void {
for (const viewDescriptor of viewDescriptors) {
if ((<ICustomViewDescriptor>viewDescriptor).treeView) {
@ -104,7 +96,7 @@ class CustomTreeViewer extends Disposable implements ITreeViewer {
private refreshing = 0;
private _dataProvider: ITreeViewDataProvider;
private dataProviderElementChangeListener: IDisposable;
private dataProviderDisposables: IDisposable[] = [];
constructor(
private id: string,
@ -123,10 +115,8 @@ class CustomTreeViewer extends Disposable implements ITreeViewer {
return this._dataProvider;
}
setDataProvider(dataProvider: ITreeViewDataProvider) {
if (this.dataProviderElementChangeListener) {
this.dataProviderElementChangeListener.dispose();
}
set dataProvider(dataProvider: ITreeViewDataProvider) {
dispose(this.dataProviderDisposables);
if (dataProvider) {
const customTreeView: CustomTreeViewer = this;
this._dataProvider = new class implements ITreeViewDataProvider {
@ -146,7 +136,8 @@ class CustomTreeViewer extends Disposable implements ITreeViewer {
});
}
};
this.dataProviderElementChangeListener = this._register(dataProvider.onDidChange(elements => this.refresh(elements)));
this._register(dataProvider.onDidChange(elements => this.refresh(elements), this, this.dataProviderDisposables));
this._register(dataProvider.onDispose(() => this.dataProvider = null, this, this.dataProviderDisposables));
} else {
this._dataProvider = null;
}

View file

@ -158,7 +158,7 @@ export interface IViewsViewlet extends IViewlet {
export interface ITreeViewer extends IDisposable {
readonly dataProvider: ITreeViewDataProvider;
dataProvider: ITreeViewDataProvider;
refresh(treeItems?: ITreeItem[]): TPromise<void>;
@ -185,8 +185,6 @@ export interface ICustomViewsService {
_serviceBrand: any;
getTreeViewer(id: string): ITreeViewer;
registerTreeViewDataProvider(id: string, ITreeViewDataProvider): void;
}
export type TreeViewItemHandleArg = {