diff --git a/src/vs/workbench/api/browser/viewsExtensionPoint.ts b/src/vs/workbench/api/browser/viewsExtensionPoint.ts index 07b114b978cd7c030409dcf87996fcea1c8f8e0c..ddb907b9065594fbf37f1e3e289948c79c8bd87f 100644 --- a/src/vs/workbench/api/browser/viewsExtensionPoint.ts +++ b/src/vs/workbench/api/browser/viewsExtensionPoint.ts @@ -17,7 +17,6 @@ import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWo import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle'; import { Registry } from 'vs/platform/registry/common/platform'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { ProgressLocation } from 'vs/workbench/services/progress/common/progress'; import { VIEWLET_ID as EXPLORER } from 'vs/workbench/parts/files/common/files'; import { VIEWLET_ID as SCM } from 'vs/workbench/parts/scm/common/scm'; import { VIEWLET_ID as DEBUG } from 'vs/workbench/parts/debug/common/debug'; @@ -133,7 +132,7 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution { when: ContextKeyExpr.deserialize(item.when), canToggleVisibility: true, collapsed: this.showCollapsed(container), - treeViewer: this.instantiationService.createInstance(CustomTreeViewer, item.id, this.getProgressLocation(container)) + treeViewer: this.instantiationService.createInstance(CustomTreeViewer, item.id, container) }; viewIds.push(viewDescriptor.id); @@ -145,18 +144,6 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution { }); } - private getProgressLocation(container: ViewContainer): ProgressLocation { - switch (container.id) { - case EXPLORER: - return ProgressLocation.Explorer; - case SCM: - return ProgressLocation.Scm; - case DEBUG: - return null /* No debug progress location yet */; - } - return null; - } - private isValidViewDescriptors(viewDescriptors: IUserFriendlyViewDescriptor[], collector: ExtensionMessageCollector): boolean { if (!Array.isArray(viewDescriptors)) { collector.error(localize('requirearray', "views must be an array")); diff --git a/src/vs/workbench/browser/parts/views/customView.ts b/src/vs/workbench/browser/parts/views/customView.ts index 7177fe4c7f256e8085a8164011a1a523d14419aa..2ada24f3e32aaace4aad9c5836d8ba7d1a04253f 100644 --- a/src/vs/workbench/browser/parts/views/customView.ts +++ b/src/vs/workbench/browser/parts/views/customView.ts @@ -14,11 +14,11 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView import { IMenuService, MenuId, MenuItemAction } from 'vs/platform/actions/common/actions'; import { ContextAwareMenuItemActionItem, fillInActionBarActions, fillInContextMenuActions } from 'vs/platform/actions/browser/menuItemActionItem'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IViewsService, ITreeViewer, ITreeItem, TreeItemCollapsibleState, ITreeViewDataProvider, TreeViewItemHandleArg, ICustomViewDescriptor, ViewsRegistry } from 'vs/workbench/common/views'; +import { IViewsService, ITreeViewer, ITreeItem, TreeItemCollapsibleState, ITreeViewDataProvider, TreeViewItemHandleArg, ICustomViewDescriptor, ViewsRegistry, ViewContainer } from 'vs/workbench/common/views'; import { IViewletViewOptions, FileIconThemableWorkbenchTree } from 'vs/workbench/browser/parts/views/viewsViewlet'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IProgressService2, ProgressLocation } from 'vs/workbench/services/progress/common/progress'; +import { IProgressService2 } from 'vs/workbench/services/progress/common/progress'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { ICommandService } from 'vs/platform/commands/common/commands'; @@ -194,7 +194,7 @@ export class CustomTreeViewer extends Disposable implements ITreeViewer { constructor( private id: string, - private progressLocation: ProgressLocation, + private container: ViewContainer, @IExtensionService private extensionService: IExtensionService, @IWorkbenchThemeService private themeService: IWorkbenchThemeService, @IInstantiationService private instantiationService: IInstantiationService, @@ -292,7 +292,7 @@ export class CustomTreeViewer extends Disposable implements ITreeViewer { this.treeContainer = DOM.$('.tree-explorer-viewlet-tree-view'); const actionItemProvider = (action: IAction) => action instanceof MenuItemAction ? this.instantiationService.createInstance(ContextAwareMenuItemActionItem, action) : undefined; const menus = this.instantiationService.createInstance(TreeMenus, this.id); - const dataSource = this.instantiationService.createInstance(TreeDataSource, this, this.progressLocation); + const dataSource = this.instantiationService.createInstance(TreeDataSource, this, this.container); const renderer = this.instantiationService.createInstance(TreeRenderer, this.id, menus, actionItemProvider); const controller = this.instantiationService.createInstance(TreeController, this.id, menus); this.tree = this.instantiationService.createInstance(FileIconThemableWorkbenchTree, this.treeContainer, { dataSource, renderer, controller }, {}); @@ -395,7 +395,7 @@ class TreeDataSource implements IDataSource { constructor( private treeView: ITreeViewer, - private location: ProgressLocation, + private container: ViewContainer, @IProgressService2 private progressService: IProgressService2 ) { } @@ -410,7 +410,7 @@ class TreeDataSource implements IDataSource { public getChildren(tree: ITree, node: ITreeItem): TPromise { if (this.treeView.dataProvider) { - return this.location ? this.progressService.withProgress({ location: this.location }, () => this.treeView.dataProvider.getChildren(node)) : this.treeView.dataProvider.getChildren(node); + return this.progressService.withProgress({ location: this.container }, () => this.treeView.dataProvider.getChildren(node)); } return TPromise.as([]); } diff --git a/src/vs/workbench/common/views.ts b/src/vs/workbench/common/views.ts index a5c8cc9dbc94ff65ec357ff357c15220d6903cf9..79290bbbb7bef8da0465d78757999d9dedf4e8f0 100644 --- a/src/vs/workbench/common/views.ts +++ b/src/vs/workbench/common/views.ts @@ -243,7 +243,7 @@ export interface ITreeViewer extends IDisposable { export interface ICustomViewDescriptor extends IViewDescriptor { - treeViewer: ITreeViewer; + readonly treeViewer: ITreeViewer; } diff --git a/src/vs/workbench/services/progress/browser/progressService2.ts b/src/vs/workbench/services/progress/browser/progressService2.ts index ba9d4abf323421fcfb7ac8f70fe31b1b6d382a9a..df20cc789259f73e3ac3dbed4bf206be8159e666 100644 --- a/src/vs/workbench/services/progress/browser/progressService2.ts +++ b/src/vs/workbench/services/progress/browser/progressService2.ts @@ -20,6 +20,7 @@ import { ProgressBadge, IActivityService } from 'vs/workbench/services/activity/ import { INotificationService, Severity, INotificationHandle, INotificationActions } from 'vs/platform/notification/common/notification'; import { Action } from 'vs/base/common/actions'; import { once } from 'vs/base/common/event'; +import { ViewContainer } from 'vs/workbench/common/views'; class WindowProgressItem implements IStatusbarItem { @@ -91,6 +92,15 @@ export class ProgressService2 implements IProgressService2 { withProgress

, R=any>(options: IProgressOptions, task: (progress: IProgress) => P, onDidCancel?: () => void): P { const { location } = options; + if (location instanceof ViewContainer) { + const viewlet = this._viewletService.getViewlet(location.id); + if (viewlet) { + return this._withViewletProgress(location.id, task); + } + console.warn(`Bad progress location: ${location.id}`); + return undefined; + } + switch (location) { case ProgressLocation.Notification: return this._withNotificationProgress(options, task, onDidCancel); diff --git a/src/vs/workbench/services/progress/common/progress.ts b/src/vs/workbench/services/progress/common/progress.ts index 14d449b2f03d7450d888f9fdd4f9e285e002aa7d..ddbe6ee7fe18e083d5ae17340545161043b50aea 100644 --- a/src/vs/workbench/services/progress/common/progress.ts +++ b/src/vs/workbench/services/progress/common/progress.ts @@ -6,6 +6,7 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { IProgress } from 'vs/platform/progress/common/progress'; +import { ViewContainer } from 'vs/workbench/common/views'; export enum ProgressLocation { Explorer = 1, @@ -16,7 +17,7 @@ export enum ProgressLocation { } export interface IProgressOptions { - location: ProgressLocation; + location: ProgressLocation | ViewContainer; title?: string; source?: string; total?: number;