Skip to content

Commit ea78776

Browse files
committed
microsoft#28974 Introduce place holder icons for nodes without icons
1 parent 125ac04 commit ea78776

17 files changed

Lines changed: 494 additions & 376 deletions

File tree

src/vs/platform/progress/common/progress.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,9 @@ export class Progress<T> implements IProgress<T> {
6363
}
6464

6565
export enum ProgressLocation {
66-
Scm = 1,
67-
Extensions = 2,
66+
Explorer = 1,
67+
Scm = 3,
68+
Extensions = 5,
6869
Window = 10
6970
}
7071

src/vs/workbench/api/browser/viewsExtensionPoint.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { forEach } from 'vs/base/common/collections';
99
import { IJSONSchema } from 'vs/base/common/jsonSchema';
1010
import { ExtensionMessageCollector, ExtensionsRegistry } from 'vs/platform/extensions/common/extensionsRegistry';
1111
import { ViewLocation, ViewsRegistry, ICustomViewDescriptor } from 'vs/workbench/common/views';
12-
import { CustomTreeViewPanel } from 'vs/workbench/browser/parts/views/customView';
12+
import { CustomTreeViewPanel } from 'vs/workbench/browser/parts/views/customViewPanel';
1313
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
1414
import { coalesce, } from 'vs/base/common/arrays';
1515

@@ -110,7 +110,7 @@ ExtensionsRegistry.registerExtensionPoint<{ [loc: string]: schema.IUserFriendlyV
110110
when: ContextKeyExpr.deserialize(item.when),
111111
canToggleVisibility: true,
112112
collapsed: true,
113-
treeItemView: true
113+
treeView: true
114114
};
115115

116116
// validate

src/vs/workbench/api/electron-browser/mainThreadTreeViews.ts

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ import { ExtHostContext, MainThreadTreeViewsShape, ExtHostTreeViewsShape, MainCo
1111
import { IMessageService, Severity } from 'vs/platform/message/common/message';
1212
import { ITreeViewDataProvider, ITreeItem, ICustomViewsService } from 'vs/workbench/common/views';
1313
import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers';
14-
import { assign } from 'vs/base/common/objects';
14+
import { distinct } from 'vs/base/common/arrays';
1515

1616
@extHostNamedCustomer(MainContext.MainThreadTreeViews)
1717
export class MainThreadTreeViews extends Disposable implements MainThreadTreeViewsShape {
1818

1919
private _proxy: ExtHostTreeViewsShape;
20+
private _dataProviders: Map<string, TreeViewDataProvider> = new Map<string, TreeViewDataProvider>();
2021

2122
constructor(
2223
extHostContext: IExtHostContext,
@@ -29,15 +30,21 @@ export class MainThreadTreeViews extends Disposable implements MainThreadTreeVie
2930

3031
$registerTreeViewDataProvider(treeViewId: string): void {
3132
const dataProvider = this._register(new TreeViewDataProvider(treeViewId, this._proxy, this.messageService));
33+
this._dataProviders.set(treeViewId, dataProvider);
3234
this.viewsService.registerTreeViewDataProvider(treeViewId, dataProvider);
3335
}
3436

3537
$refresh(treeViewId: string, itemsToRefresh: { [treeItemHandle: string]: ITreeItem }): void {
36-
const treeViewer = this.viewsService.getTreeItemViewer(treeViewId);
37-
if (treeViewer && treeViewer.dataProvider) {
38-
(<TreeViewDataProvider>treeViewer.dataProvider).refresh(itemsToRefresh);
38+
const dataProvider = this._dataProviders.get(treeViewId);
39+
if (dataProvider) {
40+
dataProvider.refresh(itemsToRefresh);
3941
}
4042
}
43+
44+
dispose(): void {
45+
this._dataProviders.clear();
46+
super.dispose();
47+
}
4148
}
4249

4350
type TreeItemHandle = string;
@@ -58,23 +65,13 @@ class TreeViewDataProvider implements ITreeViewDataProvider {
5865
) {
5966
}
6067

61-
getElements(): TPromise<ITreeItem[]> {
62-
return this._proxy.$getElements(this.treeViewId)
63-
.then(elements => {
64-
return this.postGetElements(elements);
65-
}, err => {
66-
this.messageService.show(Severity.Error, err);
67-
return [];
68-
});
69-
}
70-
71-
getChildren(treeItem: ITreeItem): TPromise<ITreeItem[]> {
72-
if (treeItem.children) {
68+
getChildren(treeItem?: ITreeItem): TPromise<ITreeItem[]> {
69+
if (treeItem && treeItem.children) {
7370
return TPromise.as(treeItem.children);
7471
}
75-
return this._proxy.$getChildren(this.treeViewId, treeItem.handle)
72+
return this._proxy.$getChildren(this.treeViewId, treeItem ? treeItem.handle : void 0)
7673
.then(children => {
77-
return this.postGetElements(children);
74+
return this.postGetChildren(children);
7875
}, err => {
7976
this.messageService.show(Severity.Error, err);
8077
return [];
@@ -108,19 +105,12 @@ class TreeViewDataProvider implements ITreeViewDataProvider {
108105
}
109106
}
110107

111-
private postGetElements(elements: ITreeItem[]): ITreeItem[] {
108+
private postGetChildren(elements: ITreeItem[]): ITreeItem[] {
112109
const result = [];
113110
if (elements) {
114111
for (const element of elements) {
115-
const currentTreeItem = this.itemsMap.get(element.handle);
116-
if (currentTreeItem) {
117-
// Update the current item with new item
118-
this.updateTreeItem(currentTreeItem, element);
119-
} else {
120-
this.itemsMap.set(element.handle, element);
121-
}
122-
// Always use the existing items
123-
result.push(this.itemsMap.get(element.handle));
112+
this.itemsMap.set(element.handle, element);
113+
result.push(element);
124114
}
125115
}
126116
return result;
@@ -129,7 +119,10 @@ class TreeViewDataProvider implements ITreeViewDataProvider {
129119
private updateTreeItem(current: ITreeItem, treeItem: ITreeItem): void {
130120
treeItem.children = treeItem.children ? treeItem.children : null;
131121
if (current) {
132-
assign(current, treeItem);
122+
const properties = distinct([...Object.keys(current), ...Object.keys(treeItem)]);
123+
for (const property of properties) {
124+
current[property] = treeItem[property];
125+
}
133126
}
134127
}
135128

src/vs/workbench/api/node/extHost.protocol.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,7 @@ export interface ExtHostDocumentsAndEditorsShape {
518518
}
519519

520520
export interface ExtHostTreeViewsShape {
521-
$getElements(treeViewId: string): TPromise<ITreeItem[]>;
522-
$getChildren(treeViewId: string, treeItemHandle: string): TPromise<ITreeItem[]>;
521+
$getChildren(treeViewId: string, treeItemHandle?: string): TPromise<ITreeItem[]>;
523522
}
524523

525524
export interface ExtHostWorkspaceShape {

src/vs/workbench/api/node/extHostTreeViews.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,6 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape {
4848
};
4949
}
5050

51-
$getElements(treeViewId: string): TPromise<ITreeItem[]> {
52-
const treeView = this.treeViews.get(treeViewId);
53-
if (!treeView) {
54-
return TPromise.wrapError<ITreeItem[]>(new Error(localize('treeView.notRegistered', 'No tree view with id \'{0}\' registered.', treeViewId)));
55-
}
56-
return treeView.getChildren();
57-
}
58-
5951
$getChildren(treeViewId: string, treeItemHandle?: string): TPromise<ITreeItem[]> {
6052
const treeView = this.treeViews.get(treeViewId);
6153
if (!treeView) {

0 commit comments

Comments
 (0)