提交 e8fc8943 编写于 作者: R ryenus 提交者: Ramya Rao

Allow customization of the viewlets in the default Extensions view (#47766)

* add Enabled/Disabled extensions list view

* extract viewOrder calculation logic

and return Number.MAX_VALUE instead of Number.POSITIVE_INFINITY for
views end up with undefined order, when comparing two views like this,
we get Number.MAX_VALUE - Number.MAX_VALUE = 0, rather than NaN
caused by infinity arithmetic.

* allow Installed Extensions view to be toggled off

* refine query for enabled/disabled extensions

* simplify query for enabled/disabled extensions

* disabled extensions also include built-in ones
上级 09e120ac
......@@ -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 {
......
......@@ -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
};
}
......
......@@ -593,6 +593,20 @@ export class InstalledExtensionsView extends ExtensionsListView {
}
}
export class EnabledExtensionsView extends ExtensionsListView {
async show(query: string): TPromise<IPagedModel<IExtension>> {
return super.show('@enabled');
}
}
export class DisabledExtensionsView extends ExtensionsListView {
async show(query: string): TPromise<IPagedModel<IExtension>> {
return super.show('@disabled');
}
}
export class BuiltInExtensionsView extends ExtensionsListView {
async show(query: string): TPromise<IPagedModel<IExtension>> {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册