diff --git a/src/vs/workbench/browser/parts/views/views.ts b/src/vs/workbench/browser/parts/views/views.ts index d70d02357d6d300cbe9b0076faf4fa8901225bdb..ca07278ca55bb008ff87a28e909ce0353ba6e58b 100644 --- a/src/vs/workbench/browser/parts/views/views.ts +++ b/src/vs/workbench/browser/parts/views/views.ts @@ -316,26 +316,17 @@ export class ContributableViewsModel extends Disposable { } private compareViewDescriptors(a: IViewDescriptor, b: IViewDescriptor): number { - const viewStateA = this.viewStates.get(a.id); - const viewStateB = this.viewStates.get(b.id); - - let orderA = viewStateA && viewStateA.order; - orderA = typeof orderA === 'number' ? orderA : a.order; - orderA = typeof orderA === 'number' ? orderA : Number.POSITIVE_INFINITY; - - let orderB = viewStateB && viewStateB.order; - orderB = typeof orderB === 'number' ? orderB : b.order; - orderB = typeof orderB === 'number' ? orderB : Number.POSITIVE_INFINITY; - - if (orderA !== orderB) { - return orderA - orderB; - } - if (a.id === b.id) { return 0; } - return a.id < b.id ? -1 : 1; + return (this.getViewOrder(a) - this.getViewOrder(b)) || (a.id < b.id ? -1 : 1); + } + + private getViewOrder(viewDescriptor: IViewDescriptor): number { + const viewState = this.viewStates.get(viewDescriptor.id); + const viewOrder = viewState && typeof viewState.order === 'number' ? viewState.order : viewDescriptor.order; + return typeof viewOrder === 'number' ? viewOrder : Number.MAX_VALUE; } private onDidChangeViewDescriptors(viewDescriptors: IViewDescriptor[]): void { diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts index 85a0d851bc94e25e53ea0fa4eaf47b4e5433f3c3..48fe8196564622aa5b41e77d980623021c4f72d7 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts @@ -32,7 +32,7 @@ import { } from 'vs/workbench/parts/extensions/browser/extensionsActions'; import { LocalExtensionType, IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement'; import { ExtensionsInput } from 'vs/workbench/parts/extensions/common/extensionsInput'; -import { ExtensionsListView, InstalledExtensionsView, RecommendedExtensionsView, WorkspaceRecommendedExtensionsView, BuiltInExtensionsView, BuiltInThemesExtensionsView, BuiltInBasicsExtensionsView } from './extensionsViews'; +import { ExtensionsListView, InstalledExtensionsView, EnabledExtensionsView, DisabledExtensionsView, RecommendedExtensionsView, WorkspaceRecommendedExtensionsView, BuiltInExtensionsView, BuiltInThemesExtensionsView, BuiltInBasicsExtensionsView } from './extensionsViews'; import { OpenGlobalSettingsAction } from 'vs/workbench/parts/preferences/browser/preferencesActions'; import { IProgressService } from 'vs/platform/progress/common/progress'; import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService'; @@ -78,6 +78,8 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio let viewDescriptors = []; viewDescriptors.push(this.createMarketPlaceExtensionsListViewDescriptor()); viewDescriptors.push(this.createInstalledExtensionsListViewDescriptor()); + viewDescriptors.push(this.createEnabledExtensionsListViewDescriptor()); + viewDescriptors.push(this.createDisabledExtensionsListViewDescriptor()); viewDescriptors.push(this.createSearchInstalledExtensionsListViewDescriptor()); viewDescriptors.push(this.createSearchBuiltInExtensionsListViewDescriptor()); viewDescriptors.push(this.createSearchBuiltInBasicsExtensionsListViewDescriptor()); @@ -107,7 +109,36 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio ctor: InstalledExtensionsView, when: ContextKeyExpr.and(ContextKeyExpr.not('donotshowExtensions'), ContextKeyExpr.not('searchExtensions')), order: 1, - weight: 30 + weight: 30, + canToggleVisibility: true + }; + } + + private createEnabledExtensionsListViewDescriptor(): IViewDescriptor { + return { + id: 'extensions.enabledList', + name: localize('enabledExtensions', "Enabled"), + container: VIEW_CONTAINER, + ctor: EnabledExtensionsView, + when: ContextKeyExpr.and(ContextKeyExpr.not('searchExtensions')), + weight: 30, + canToggleVisibility: true, + order: 30, + collapsed: true + }; + } + + private createDisabledExtensionsListViewDescriptor(): IViewDescriptor { + return { + id: 'extensions.disabledList', + name: localize('disabledExtensions', "Disabled"), + container: VIEW_CONTAINER, + ctor: DisabledExtensionsView, + when: ContextKeyExpr.and(ContextKeyExpr.not('searchExtensions')), + weight: 30, + canToggleVisibility: true, + order: 40, + collapsed: true }; } diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts index 9e74a3c633c343348279acce10478b2db9f77c1d..55015aad019ec3f494372a7f29218186fd13170f 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts @@ -593,6 +593,20 @@ export class InstalledExtensionsView extends ExtensionsListView { } } +export class EnabledExtensionsView extends ExtensionsListView { + + async show(query: string): TPromise> { + return super.show('@enabled'); + } +} + +export class DisabledExtensionsView extends ExtensionsListView { + + async show(query: string): TPromise> { + return super.show('@disabled'); + } +} + export class BuiltInExtensionsView extends ExtensionsListView { async show(query: string): TPromise> {