提交 116a3de4 编写于 作者: S Sandeep Somavarapu

Unify into single ViewContainerModel

上级 9275e7ed
......@@ -488,9 +488,9 @@ export class ResetViewLocationsAction extends Action {
async run(): Promise<void> {
const viewContainerRegistry = Registry.as<IViewContainersRegistry>(ViewContainerExtensions.ViewContainersRegistry);
viewContainerRegistry.all.forEach(viewContainer => {
const viewDescriptors = this.viewDescriptorService.getViewDescriptors(viewContainer);
const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer);
viewDescriptors.allViewDescriptors.forEach(viewDescriptor => {
viewContainerModel.allViewDescriptors.forEach(viewDescriptor => {
const defaultContainer = this.viewDescriptorService.getDefaultContainer(viewDescriptor.id);
const currentContainer = this.viewDescriptorService.getViewContainer(viewDescriptor.id);
......@@ -583,7 +583,7 @@ export class MoveFocusedViewAction extends Action {
const currentContainer = this.viewDescriptorService.getViewContainer(focusedViewId)!;
const currentLocation = this.viewDescriptorService.getViewLocation(focusedViewId)!;
const isViewSolo = this.viewDescriptorService.getViewDescriptors(currentContainer).allViewDescriptors.length === 1;
const isViewSolo = this.viewDescriptorService.getViewContainerModel(currentContainer).allViewDescriptors.length === 1;
if (!(isViewSolo && currentLocation === ViewContainerLocation.Sidebar)) {
items.push({
......
......@@ -26,7 +26,7 @@ import { IExtensionService } from 'vs/workbench/services/extensions/common/exten
import { URI, UriComponents } from 'vs/base/common/uri';
import { ToggleCompositePinnedAction, ICompositeBarColors, ActivityAction, ICompositeActivity } from 'vs/workbench/browser/parts/compositeBarActions';
import { ViewletDescriptor } from 'vs/workbench/browser/viewlet';
import { IViewDescriptorService, IViewContainersRegistry, Extensions as ViewContainerExtensions, ViewContainer, TEST_VIEW_CONTAINER_ID, IViewDescriptorCollection, ViewContainerLocation } from 'vs/workbench/common/views';
import { IViewDescriptorService, IViewContainersRegistry, Extensions as ViewContainerExtensions, ViewContainer, TEST_VIEW_CONTAINER_ID, IViewContainerModel, ViewContainerLocation } from 'vs/workbench/common/views';
import { IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
import { IViewlet } from 'vs/workbench/common/viewlet';
import { isUndefinedOrNull, assertIsDefined, isString } from 'vs/base/common/types';
......@@ -218,8 +218,8 @@ export class ActivitybarPart extends Part implements IActivityBarService {
if (viewletDescriptor) {
const viewContainer = this.getViewContainer(viewletDescriptor.id);
if (viewContainer?.hideIfEmpty) {
const viewDescriptors = this.viewDescriptorService.getViewDescriptors(viewContainer);
if (viewDescriptors.activeViewDescriptors.length === 0) {
const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer);
if (viewContainerModel.activeViewDescriptors.length === 0) {
this.hideComposite(viewletDescriptor.id); // Update the composite bar by hiding
}
}
......@@ -490,13 +490,12 @@ export class ActivitybarPart extends Part implements IActivityBarService {
for (const viewlet of viewlets) {
this.enableCompositeActions(viewlet);
const viewContainer = this.getViewContainer(viewlet.id)!;
const viewDescriptors = this.viewDescriptorService.getViewDescriptors(viewContainer);
this.onDidChangeActiveViews(viewlet, viewDescriptors, viewContainer.hideIfEmpty);
const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer);
this.onDidChangeActiveViews(viewlet, viewContainerModel, viewContainer.hideIfEmpty);
const disposables = new DisposableStore();
disposables.add(viewDescriptors.onDidChangeActiveViews(() => this.onDidChangeActiveViews(viewlet, viewDescriptors, viewContainer.hideIfEmpty)));
disposables.add(viewDescriptors.onDidChangeViews(() => this.onDidUpdateViews(viewlet, viewDescriptors)));
disposables.add(viewDescriptors.onDidMove(() => this.onDidUpdateViews(viewlet, viewDescriptors)));
disposables.add(viewContainerModel.onDidChangeActiveViewDescriptors(() => this.onDidChangeActiveViews(viewlet, viewContainerModel, viewContainer.hideIfEmpty)));
disposables.add(viewContainerModel.onDidChangeContainerInfo(() => this.updateActivity(viewlet, viewContainerModel)));
this.viewletDisposables.set(viewlet.id, disposables);
}
......@@ -512,12 +511,12 @@ export class ActivitybarPart extends Part implements IActivityBarService {
this.hideComposite(viewletId);
}
private updateActivity(viewlet: ViewletDescriptor, viewDescriptors: IViewDescriptorCollection): void {
const icon = viewDescriptors.getIcon();
private updateActivity(viewlet: ViewletDescriptor, viewContainerModel: IViewContainerModel): void {
const icon = viewContainerModel.icon;
const activity: IActivity = {
id: viewlet.id,
name: viewDescriptors.getTitle(),
name: viewContainerModel.title,
cssClass: isString(icon) ? icon : undefined,
iconUrl: icon instanceof URI ? icon : undefined,
keybindingId: viewlet.keybindingId
......@@ -531,11 +530,7 @@ export class ActivitybarPart extends Part implements IActivityBarService {
}
}
private onDidUpdateViews(viewlet: ViewletDescriptor, viewDescriptors: IViewDescriptorCollection): void {
this.updateActivity(viewlet, viewDescriptors);
}
private onDidChangeActiveViews(viewlet: ViewletDescriptor, viewDescriptors: IViewDescriptorCollection, hideIfEmpty?: boolean): void {
private onDidChangeActiveViews(viewlet: ViewletDescriptor, viewDescriptors: IViewContainerModel, hideIfEmpty?: boolean): void {
if (viewDescriptors.activeViewDescriptors.length) {
this.updateActivity(viewlet, viewDescriptors);
this.compositeBar.addComposite(viewlet);
......@@ -663,8 +658,8 @@ export class ActivitybarPart extends Part implements IActivityBarService {
if (viewlet) {
const views: { when: string | undefined }[] = [];
if (viewContainer) {
const viewDescriptors = this.viewDescriptorService.getViewDescriptors(viewContainer);
for (const { when } of viewDescriptors.allViewDescriptors) {
const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer);
for (const { when } of viewContainerModel.allViewDescriptors) {
views.push({ when: when ? when.serialize() : undefined });
}
}
......
......@@ -56,7 +56,7 @@ export class CompositeDragAndDrop implements ICompositeDragAndDrop {
}
// ... on a different composite bar
else {
const viewsToMove = this.viewDescriptorService.getViewDescriptors(currentContainer)!.allViewDescriptors;
const viewsToMove = this.viewDescriptorService.getViewContainerModel(currentContainer)!.allViewDescriptors;
if (viewsToMove.some(v => !v.canMoveView)) {
return;
}
......@@ -119,7 +119,7 @@ export class CompositeDragAndDrop implements ICompositeDragAndDrop {
}
// ... to another composite location
const draggedViews = this.viewDescriptorService.getViewDescriptors(currentContainer)!.allViewDescriptors;
const draggedViews = this.viewDescriptorService.getViewContainerModel(currentContainer)!.allViewDescriptors;
// ... all views must be movable
return !draggedViews.some(v => !v.canMoveView);
......
......@@ -33,7 +33,7 @@ import { IContextKey, IContextKeyService, ContextKeyExpr } from 'vs/platform/con
import { isUndefinedOrNull, assertIsDefined } from 'vs/base/common/types';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { ViewContainer, IViewContainersRegistry, Extensions as ViewContainerExtensions, IViewDescriptorService, IViewDescriptorCollection, ViewContainerLocation } from 'vs/workbench/common/views';
import { ViewContainer, IViewContainersRegistry, Extensions as ViewContainerExtensions, IViewDescriptorService, IViewContainerModel, ViewContainerLocation } from 'vs/workbench/common/views';
import { MenuId } from 'vs/platform/actions/common/actions';
import { ViewMenuActions } from 'vs/workbench/browser/parts/views/viewMenuActions';
import { IPaneComposite } from 'vs/workbench/common/panecomposite';
......@@ -178,9 +178,9 @@ export class PanelPart extends CompositePart<Panel> implements IPanelService {
const result: IAction[] = [];
const container = this.getViewContainer(compositeId);
if (container) {
const viewDescriptors = this.viewDescriptorService.getViewDescriptors(container);
if (viewDescriptors.allViewDescriptors.length === 1) {
const viewMenuActions = this.instantiationService.createInstance(ViewMenuActions, viewDescriptors.allViewDescriptors[0].id, MenuId.ViewTitle, MenuId.ViewTitleContext);
const viewContainerModel = this.viewDescriptorService.getViewContainerModel(container);
if (viewContainerModel.allViewDescriptors.length === 1) {
const viewMenuActions = this.instantiationService.createInstance(ViewMenuActions, viewContainerModel.allViewDescriptors[0].id, MenuId.ViewTitle, MenuId.ViewTitleContext);
result.push(...viewMenuActions.getContextMenuActions());
viewMenuActions.dispose();
}
......@@ -211,13 +211,13 @@ export class PanelPart extends CompositePart<Panel> implements IPanelService {
for (const panel of panels) {
this.enableCompositeActions(panel);
const viewContainer = this.getViewContainer(panel.id)!;
const viewDescriptors = this.viewDescriptorService.getViewDescriptors(viewContainer);
this.onDidChangeActiveViews(panel, viewDescriptors, viewContainer.hideIfEmpty);
const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer);
this.onDidChangeActiveViews(panel, viewContainerModel, viewContainer.hideIfEmpty);
const disposables = new DisposableStore();
disposables.add(viewDescriptors.onDidChangeActiveViews(() => this.onDidChangeActiveViews(panel, viewDescriptors, viewContainer.hideIfEmpty)));
disposables.add(viewDescriptors.onDidChangeViews(() => this.onDidUpdateViews(panel, viewDescriptors)));
disposables.add(viewDescriptors.onDidMove(() => this.onDidUpdateViews(panel, viewDescriptors)));
disposables.add(viewContainerModel.onDidChangeActiveViewDescriptors(() => this.onDidChangeActiveViews(panel, viewContainerModel, viewContainer.hideIfEmpty)));
disposables.add(viewContainerModel.onDidChangeAllViewDescriptors(() => this.onDidUpdateViews(panel, viewContainerModel)));
disposables.add(viewContainerModel.onDidMoveVisibleViewDescriptors(() => this.onDidUpdateViews(panel, viewContainerModel)));
this.panelDisposables.set(panel.id, disposables);
}
......@@ -242,10 +242,10 @@ export class PanelPart extends CompositePart<Panel> implements IPanelService {
}
}
private updateActivity(panel: PanelDescriptor, viewDescriptors: IViewDescriptorCollection): void {
private updateActivity(panel: PanelDescriptor, viewContainerModel: IViewContainerModel): void {
const activity: IActivity = {
id: panel.id,
name: viewDescriptors.getTitle(),
name: viewContainerModel.title,
keybindingId: panel.keybindingId
};
......@@ -257,11 +257,11 @@ export class PanelPart extends CompositePart<Panel> implements IPanelService {
}
}
private onDidUpdateViews(panel: PanelDescriptor, viewDescriptors: IViewDescriptorCollection): void {
private onDidUpdateViews(panel: PanelDescriptor, viewDescriptors: IViewContainerModel): void {
this.updateActivity(panel, viewDescriptors);
}
private onDidChangeActiveViews(panel: PanelDescriptor, viewDescriptors: IViewDescriptorCollection, hideIfEmpty?: boolean): void {
private onDidChangeActiveViews(panel: PanelDescriptor, viewDescriptors: IViewContainerModel, hideIfEmpty?: boolean): void {
if (viewDescriptors.activeViewDescriptors.length) {
this.updateActivity(panel, viewDescriptors);
this.compositeBar.addComposite(panel);
......@@ -343,8 +343,8 @@ export class PanelPart extends CompositePart<Panel> implements IPanelService {
if (panelDescriptor) {
const viewContainer = this.getViewContainer(panelDescriptor.id);
if (viewContainer?.hideIfEmpty) {
const viewDescriptors = this.viewDescriptorService.getViewDescriptors(viewContainer);
if (viewDescriptors.activeViewDescriptors.length === 0 && this.compositeBar.getPinnedComposites().length > 1) {
const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer);
if (viewContainerModel.activeViewDescriptors.length === 0 && this.compositeBar.getPinnedComposites().length > 1) {
this.hideComposite(panelDescriptor.id); // Update the composite bar by hiding
}
}
......@@ -610,10 +610,11 @@ export class PanelPart extends CompositePart<Panel> implements IPanelService {
const compositeItems = this.compositeBar.getCompositeBarItems();
for (const compositeItem of compositeItems) {
const viewContainer = this.getViewContainer(compositeItem.id)!;
const viewDescriptors = this.viewDescriptorService.getViewDescriptors(viewContainer);
state.push({ id: compositeItem.id, name: viewDescriptors.getTitle(), pinned: compositeItem.pinned, order: compositeItem.order, visible: compositeItem.visible });
const viewContainer = this.getViewContainer(compositeItem.id);
if (viewContainer) {
const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer);
state.push({ id: compositeItem.id, name: viewContainerModel.title, pinned: compositeItem.pinned, order: compositeItem.order, visible: compositeItem.visible });
}
}
this.cachedPanelsValue = JSON.stringify(state);
......
......@@ -24,7 +24,7 @@ import { PaneView, IPaneViewOptions, IPaneOptions, Pane } from 'vs/base/browser/
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IWorkbenchLayoutService, Position } from 'vs/workbench/services/layout/browser/layoutService';
import { StandardMouseEvent } from 'vs/base/browser/mouseEvent';
import { Extensions as ViewContainerExtensions, IView, FocusedViewContext, IViewContainersRegistry, IViewDescriptor, ViewContainer, IViewDescriptorService, ViewContainerLocation, IViewPaneContainer, IViewsRegistry, IViewContentDescriptor, IAddedViewDescriptorRef, IViewDescriptorRef, IViewDescriptorCollection } from 'vs/workbench/common/views';
import { Extensions as ViewContainerExtensions, IView, FocusedViewContext, IViewContainersRegistry, IViewDescriptor, ViewContainer, IViewDescriptorService, ViewContainerLocation, IViewPaneContainer, IViewsRegistry, IViewContentDescriptor, IAddedViewDescriptorRef, IViewDescriptorRef, IViewContainerModel } from 'vs/workbench/common/views';
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { assertIsDefined } from 'vs/base/common/types';
......@@ -745,7 +745,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
private readonly visibleViewsCountFromCache: number | undefined;
private readonly visibleViewsStorageId: string;
protected readonly viewsDescriptors: IViewDescriptorCollection;
protected readonly viewContainerModel: IViewContainerModel;
private viewDisposables: IDisposable[] = [];
private readonly _onTitleAreaUpdate: Emitter<void> = this._register(new Emitter<void>());
......@@ -806,7 +806,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
this.visibleViewsStorageId = `${id}.numberOfVisibleViews`;
this.visibleViewsCountFromCache = this.storageService.getNumber(this.visibleViewsStorageId, StorageScope.WORKSPACE, undefined);
this._register(toDisposable(() => this.viewDisposables = dispose(this.viewDisposables)));
this.viewsDescriptors = this.viewDescriptorService.getViewDescriptors(container);
this.viewContainerModel = this.viewDescriptorService.getViewContainerModel(container);
}
create(parent: HTMLElement): void {
......@@ -837,7 +837,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
const viewContainerRegistry = Registry.as<IViewContainersRegistry>(ViewContainerExtensions.ViewContainersRegistry);
const container = viewContainerRegistry.get(dropData.id)!;
const viewsToMove = this.viewDescriptorService.getViewDescriptors(container).allViewDescriptors;
const viewsToMove = this.viewDescriptorService.getViewContainerModel(container).allViewDescriptors;
if (!viewsToMove.some(v => !v.canMoveView)) {
overlay = new ViewPaneDropOverlay(parent, undefined, this.themeService);
......@@ -859,7 +859,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
const viewContainerRegistry = Registry.as<IViewContainersRegistry>(ViewContainerExtensions.ViewContainersRegistry);
const container = viewContainerRegistry.get(dropData.id)!;
const allViews = this.viewDescriptorService.getViewDescriptors(container).allViewDescriptors;
const allViews = this.viewDescriptorService.getViewContainerModel(container).allViewDescriptors;
if (!allViews.some(v => !v.canMoveView)) {
viewsToMove.push(...allViews);
}
......@@ -882,11 +882,11 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
}));
this._register(this.onDidSashChange(() => this.saveViewSizes()));
this.viewsDescriptors.onDidAdd(added => this.onDidAddViewDescriptors(added));
this.viewsDescriptors.onDidRemove(removed => this.onDidRemoveViewDescriptors(removed));
const addedViews: IAddedViewDescriptorRef[] = this.viewsDescriptors.visibleViewDescriptors.map((viewDescriptor, index) => {
const size = this.viewsDescriptors.getSize(viewDescriptor.id);
const collapsed = this.viewsDescriptors.isCollapsed(viewDescriptor.id);
this.viewContainerModel.onDidAddVisibleViewDescriptors(added => this.onDidAddViewDescriptors(added));
this.viewContainerModel.onDidRemoveVisibleViewDescriptors(removed => this.onDidRemoveViewDescriptors(removed));
const addedViews: IAddedViewDescriptorRef[] = this.viewContainerModel.visibleViewDescriptors.map((viewDescriptor, index) => {
const size = this.viewContainerModel.getSize(viewDescriptor.id);
const collapsed = this.viewContainerModel.isCollapsed(viewDescriptor.id);
return ({ viewDescriptor, index, size, collapsed });
});
if (addedViews.length) {
......@@ -904,7 +904,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
}
getTitle(): string {
const containerTitle = this.viewsDescriptors.getTitle();
const containerTitle = this.viewContainerModel.title;
if (this.isViewMergedWithContainer()) {
const paneItemTitle = this.paneItems[0].pane.title;
......@@ -955,10 +955,10 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
}
}
const viewToggleActions = this.viewsDescriptors.activeViewDescriptors.map(viewDescriptor => (<IAction>{
const viewToggleActions = this.viewContainerModel.activeViewDescriptors.map(viewDescriptor => (<IAction>{
id: `${viewDescriptor.id}.toggleVisibility`,
label: viewDescriptor.name,
checked: this.viewsDescriptors.isVisible(viewDescriptor.id),
checked: this.viewContainerModel.isVisible(viewDescriptor.id),
enabled: viewDescriptor.canToggleVisibility,
run: () => this.toggleViewVisibility(viewDescriptor.id)
}));
......@@ -1087,7 +1087,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
// Save size only when the layout has happened
if (this.didLayout) {
for (const view of this.panes) {
this.viewsDescriptors.setSize(view.id, this.getPaneSize(view));
this.viewContainerModel.setSize(view.id, this.getPaneSize(view));
}
}
}
......@@ -1096,10 +1096,10 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
// Restore sizes only when the layout has happened
if (this.didLayout) {
let initialSizes;
for (let i = 0; i < this.viewsDescriptors.visibleViewDescriptors.length; i++) {
for (let i = 0; i < this.viewContainerModel.visibleViewDescriptors.length; i++) {
const pane = this.panes[i];
const viewDescriptor = this.viewsDescriptors.visibleViewDescriptors[i];
const size = this.viewsDescriptors.getSize(viewDescriptor.id);
const viewDescriptor = this.viewContainerModel.visibleViewDescriptors[i];
const size = this.viewContainerModel.getSize(viewDescriptor.id);
if (typeof size === 'number') {
this.resizePane(pane, size);
......@@ -1114,8 +1114,8 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
private computeInitialSizes(): Map<string, number> {
const sizes: Map<string, number> = new Map<string, number>();
if (this.dimension) {
const totalWeight = this.viewsDescriptors.visibleViewDescriptors.reduce((totalWeight, { weight }) => totalWeight + (weight || 20), 0);
for (const viewDescriptor of this.viewsDescriptors.visibleViewDescriptors) {
const totalWeight = this.viewContainerModel.visibleViewDescriptors.reduce((totalWeight, { weight }) => totalWeight + (weight || 20), 0);
for (const viewDescriptor of this.viewContainerModel.visibleViewDescriptors) {
if (this.orientation === Orientation.VERTICAL) {
sizes.set(viewDescriptor.id, this.dimension.height * (viewDescriptor.weight || 20) / totalWeight);
} else {
......@@ -1176,7 +1176,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
});
const collapseDisposable = Event.latch(Event.map(pane.onDidChange, () => !pane.isExpanded()))(collapsed => {
this.viewsDescriptors.setCollapsed(viewDescriptor.id, collapsed);
this.viewContainerModel.setCollapsed(viewDescriptor.id, collapsed);
});
this.viewDisposables.splice(index, 0, combinedDisposable(contextMenuDisposable, collapseDisposable));
......@@ -1207,13 +1207,13 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
}
protected toggleViewVisibility(viewId: string): void {
const visible = !this.viewsDescriptors.isVisible(viewId);
const visible = !this.viewContainerModel.isVisible(viewId);
type ViewsToggleVisibilityClassification = {
viewId: { classification: 'SystemMetaData', purpose: 'FeatureInsight' };
visible: { classification: 'SystemMetaData', purpose: 'FeatureInsight' };
};
this.telemetryService.publicLog2<{ viewId: String, visible: boolean }, ViewsToggleVisibilityClassification>('views.toggleVisibility', { viewId, visible });
this.viewsDescriptors.setVisible(viewId, visible);
this.viewContainerModel.setVisible(viewId, visible);
}
private addPane(pane: ViewPane, size: number, index = this.paneItems.length - 1): void {
......@@ -1268,7 +1268,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
const viewContainerRegistry = Registry.as<IViewContainersRegistry>(ViewContainerExtensions.ViewContainersRegistry);
const container = viewContainerRegistry.get(dropData.id)!;
const viewsToMove = this.viewDescriptorService.getViewDescriptors(container).allViewDescriptors;
const viewsToMove = this.viewDescriptorService.getViewContainerModel(container).allViewDescriptors;
if (!viewsToMove.some(v => !v.canMoveView)) {
overlay = new ViewPaneDropOverlay(pane.dropTargetElement, this.orientation ?? Orientation.VERTICAL, this.themeService);
......@@ -1290,7 +1290,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
const viewContainerRegistry = Registry.as<IViewContainersRegistry>(ViewContainerExtensions.ViewContainersRegistry);
const container = viewContainerRegistry.get(dropData.id)!;
const allViews = this.viewDescriptorService.getViewDescriptors(container).allViewDescriptors;
const allViews = this.viewDescriptorService.getViewContainerModel(container).allViewDescriptors;
if (allViews.length > 0 && !allViews.some(v => !v.canMoveView)) {
viewsToMove.push(...allViews);
......@@ -1405,8 +1405,8 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
const fromIndex = firstIndex(this.paneItems, item => item.pane === from);
const toIndex = firstIndex(this.paneItems, item => item.pane === to);
const fromViewDescriptor = this.viewsDescriptors.visibleViewDescriptors[fromIndex];
const toViewDescriptor = this.viewsDescriptors.visibleViewDescriptors[toIndex];
const fromViewDescriptor = this.viewContainerModel.visibleViewDescriptors[fromIndex];
const toViewDescriptor = this.viewContainerModel.visibleViewDescriptors[toIndex];
if (fromIndex < 0 || fromIndex >= this.paneItems.length) {
return;
......@@ -1421,7 +1421,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
assertIsDefined(this.paneview).movePane(from, to);
this.viewsDescriptors.move(fromViewDescriptor.id, toViewDescriptor.id);
this.viewContainerModel.move(fromViewDescriptor.id, toViewDescriptor.id);
this.updateTitleArea();
}
......
......@@ -109,15 +109,15 @@ export class ViewsService extends Disposable implements IViewsService {
private onDidRegisterViewContainer(viewContainer: ViewContainer, viewContainerLocation: ViewContainerLocation): void {
this.registerViewletOrPanel(viewContainer, viewContainerLocation);
const viewDescriptorCollection = this.viewDescriptorService.getViewDescriptors(viewContainer);
this.onViewDescriptorsAdded(viewDescriptorCollection.allViewDescriptors, viewContainer);
this._register(viewDescriptorCollection.onDidChangeViews(({ added, removed }) => {
const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer);
this.onViewDescriptorsAdded(viewContainerModel.allViewDescriptors, viewContainer);
this._register(viewContainerModel.onDidChangeAllViewDescriptors(({ added, removed }) => {
this.onViewDescriptorsAdded(added, viewContainer);
this.onViewDescriptorsRemoved(removed);
}));
}
private onViewDescriptorsAdded(views: IViewDescriptor[], container: ViewContainer): void {
private onViewDescriptorsAdded(views: ReadonlyArray<IViewDescriptor>, container: ViewContainer): void {
const location = this.viewContainersRegistry.getViewContainerLocation(container);
if (location === undefined) {
return;
......@@ -181,7 +181,7 @@ export class ViewsService extends Disposable implements IViewsService {
}
}
private onViewDescriptorsRemoved(views: IViewDescriptor[]): void {
private onViewDescriptorsRemoved(views: ReadonlyArray<IViewDescriptor>): void {
for (const view of views) {
const disposable = this.viewDisposable.get(view);
if (disposable) {
......
......@@ -46,8 +46,8 @@ export abstract class FilterViewPaneContainer extends ViewPaneContainer {
this.onFilterChanged(newFilterValue);
}));
this._register(this.viewsDescriptors.onDidChangeActiveViews((viewDescriptors) => {
this.updateAllViews(viewDescriptors);
this._register(this.viewContainerModel.onDidChangeActiveViewDescriptors(() => {
this.updateAllViews(this.viewContainerModel.activeViewDescriptors);
}));
}
......@@ -62,7 +62,7 @@ export abstract class FilterViewPaneContainer extends ViewPaneContainer {
}
this.allViews.get(filterOnValue)!.set(descriptor.id, descriptor);
if (this.filterValue && !this.filterValue.includes(filterOnValue)) {
this.viewsDescriptors.setVisible(descriptor.id, false);
this.viewContainerModel.setVisible(descriptor.id, false);
}
});
}
......@@ -75,17 +75,17 @@ export abstract class FilterViewPaneContainer extends ViewPaneContainer {
private onFilterChanged(newFilterValue: string[]) {
if (this.allViews.size === 0) {
this.updateAllViews(this.viewsDescriptors.activeViewDescriptors);
this.updateAllViews(this.viewContainerModel.activeViewDescriptors);
}
this.getViewsNotForTarget(newFilterValue).forEach(item => this.viewsDescriptors.setVisible(item.id, false));
this.getViewsForTarget(newFilterValue).forEach(item => this.viewsDescriptors.setVisible(item.id, true));
this.getViewsNotForTarget(newFilterValue).forEach(item => this.viewContainerModel.setVisible(item.id, false));
this.getViewsForTarget(newFilterValue).forEach(item => this.viewContainerModel.setVisible(item.id, true));
}
getContextMenuActions(): IAction[] {
const result: IAction[] = Array.from(this.constantViewDescriptors.values()).map(viewDescriptor => (<IAction>{
id: `${viewDescriptor.id}.toggleVisibility`,
label: viewDescriptor.name,
checked: this.viewsDescriptors.isVisible(viewDescriptor.id),
checked: this.viewContainerModel.isVisible(viewDescriptor.id),
enabled: viewDescriptor.canToggleVisibility,
run: () => this.toggleViewVisibility(viewDescriptor.id)
}));
......@@ -133,7 +133,7 @@ export abstract class FilterViewPaneContainer extends ViewPaneContainer {
}
// Check that allViews is ready
if (this.allViews.size === 0) {
this.updateAllViews(this.viewsDescriptors.activeViewDescriptors);
this.updateAllViews(this.viewContainerModel.activeViewDescriptors);
}
return panes;
}
......
......@@ -219,18 +219,22 @@ export interface IAddedViewDescriptorRef extends IViewDescriptorRef {
size?: number;
}
export interface IViewDescriptorCollection extends IDisposable {
export interface IViewContainerModel {
readonly allViewDescriptors: IViewDescriptor[];
readonly onDidChangeViews: Event<{ added: IViewDescriptor[], removed: IViewDescriptor[] }>;
readonly title: string;
readonly icon: string | URI | undefined;
readonly onDidChangeContainerInfo: Event<{ title?: boolean, icon?: boolean }>;
readonly activeViewDescriptors: IViewDescriptor[];
readonly onDidChangeActiveViews: Event<ReadonlyArray<IViewDescriptor>>;
readonly allViewDescriptors: ReadonlyArray<IViewDescriptor>;
readonly onDidChangeAllViewDescriptors: Event<{ added: ReadonlyArray<IViewDescriptor>, removed: ReadonlyArray<IViewDescriptor> }>;
readonly visibleViewDescriptors: IViewDescriptor[];
readonly onDidAdd: Event<IAddedViewDescriptorRef[]>;
readonly onDidRemove: Event<IViewDescriptorRef[]>
readonly onDidMove: Event<{ from: IViewDescriptorRef; to: IViewDescriptorRef; }>
readonly activeViewDescriptors: ReadonlyArray<IViewDescriptor>;
readonly onDidChangeActiveViewDescriptors: Event<{ added: ReadonlyArray<IViewDescriptor>, removed: ReadonlyArray<IViewDescriptor> }>;
readonly visibleViewDescriptors: ReadonlyArray<IViewDescriptor>;
readonly onDidAddVisibleViewDescriptors: Event<IAddedViewDescriptorRef[]>;
readonly onDidRemoveVisibleViewDescriptors: Event<IViewDescriptorRef[]>
readonly onDidMoveVisibleViewDescriptors: Event<{ from: IViewDescriptorRef; to: IViewDescriptorRef; }>
isVisible(id: string): boolean;
setVisible(id: string, visible: boolean, size?: number): void;
......@@ -241,9 +245,6 @@ export interface IViewDescriptorCollection extends IDisposable {
getSize(id: string): number | undefined;
setSize(id: string, size: number): void
getTitle(): string;
getIcon(): URI | string | undefined;
move(from: string, to: string): void;
}
......@@ -484,7 +485,7 @@ export interface IViewDescriptorService {
moveViewsToContainer(views: IViewDescriptor[], viewContainer: ViewContainer): void;
getViewDescriptors(container: ViewContainer): IViewDescriptorCollection;
getViewContainerModel(container: ViewContainer): IViewContainerModel;
getViewDescriptor(viewId: string): IViewDescriptor | null;
......
......@@ -96,9 +96,9 @@ export class ViewQuickAccessProvider extends PickerQuickAccessProvider<IViewQuic
const viewEntries: Array<IViewQuickPickItem> = [];
const getViewEntriesForViewlet = (viewlet: ViewletDescriptor, viewContainer: ViewContainer): IViewQuickPickItem[] => {
const viewDescriptors = this.viewDescriptorService.getViewDescriptors(viewContainer);
const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer);
const result: IViewQuickPickItem[] = [];
for (const view of viewDescriptors.allViewDescriptors) {
for (const view of viewContainerModel.allViewDescriptors) {
if (this.contextKeyService.contextMatchesRules(view.when)) {
result.push({
label: view.name,
......@@ -176,7 +176,7 @@ export class ViewQuickAccessProvider extends PickerQuickAccessProvider<IViewQuic
private includeViewContainer(container: ViewletDescriptor | IPanelIdentifier): boolean {
const viewContainer = Registry.as<IViewContainersRegistry>(ViewExtensions.ViewContainersRegistry).get(container.id);
if (viewContainer?.hideIfEmpty) {
return this.viewDescriptorService.getViewDescriptors(viewContainer).activeViewDescriptors.length > 0;
return this.viewDescriptorService.getViewContainerModel(viewContainer).activeViewDescriptors.length > 0;
}
return true;
......
......@@ -101,7 +101,7 @@ export class SCMViewPaneContainer extends ViewPaneContainer implements IViewMode
}
get onDidChangeVisibleRepositories(): Event<ISCMRepository[]> {
const modificationEvent = Event.debounce(Event.any(this.viewsDescriptors.onDidAdd, this.viewsDescriptors.onDidRemove), () => null, 0);
const modificationEvent = Event.debounce(Event.any(this.viewContainerModel.onDidAddVisibleViewDescriptors, this.viewContainerModel.onDidRemoveVisibleViewDescriptors), () => null, 0);
return Event.map(modificationEvent, () => this.visibleRepositories);
}
......@@ -140,14 +140,14 @@ export class SCMViewPaneContainer extends ViewPaneContainer implements IViewMode
this._register(configurationService.onDidChangeConfiguration(e => {
if (e.affectsConfiguration('scm.alwaysShowProviders') && configurationService.getValue<boolean>('scm.alwaysShowProviders')) {
this.viewsDescriptors.setVisible(MainPane.ID, true);
this.viewContainerModel.setVisible(MainPane.ID, true);
}
}));
this.repositoryCountKey = contextKeyService.createKey('scm.providerCount', 0);
this._register(this.viewsDescriptors.onDidAdd(this.onDidShowView, this));
this._register(this.viewsDescriptors.onDidRemove(this.onDidHideView, this));
this._register(this.viewContainerModel.onDidAddVisibleViewDescriptors(this.onDidShowView, this));
this._register(this.viewContainerModel.onDidRemoveVisibleViewDescriptors(this.onDidHideView, this));
}
create(parent: HTMLElement): void {
......@@ -214,8 +214,8 @@ export class SCMViewPaneContainer extends ViewPaneContainer implements IViewMode
@debounce(0)
private afterOnDidHideView(): void {
if (this.repositoryCountKey.get()! > 0 && this.viewDescriptors.every(d => !this.viewsDescriptors.isVisible(d.id))) {
this.viewsDescriptors.setVisible(this.viewDescriptors[0].id, true);
if (this.repositoryCountKey.get()! > 0 && this.viewDescriptors.every(d => !this.viewContainerModel.isVisible(d.id))) {
this.viewContainerModel.setVisible(this.viewDescriptors[0].id, true);
}
}
......@@ -282,9 +282,9 @@ export class SCMViewPaneContainer extends ViewPaneContainer implements IViewMode
}
setVisibleRepositories(repositories: ISCMRepository[]): void {
const visibleViewDescriptors = this.viewsDescriptors.visibleViewDescriptors;
const visibleViewDescriptors = this.viewContainerModel.visibleViewDescriptors;
const toSetVisible = this.viewsDescriptors.activeViewDescriptors
const toSetVisible = this.viewContainerModel.activeViewDescriptors
.filter((d): d is RepositoryViewDescriptor => d instanceof RepositoryViewDescriptor && repositories.indexOf(d.repository) > -1 && visibleViewDescriptors.indexOf(d) === -1);
const toSetInvisible = visibleViewDescriptors
......@@ -302,11 +302,11 @@ export class SCMViewPaneContainer extends ViewPaneContainer implements IViewMode
}
}
this.viewsDescriptors.setVisible(viewDescriptor.id, false);
this.viewContainerModel.setVisible(viewDescriptor.id, false);
}
for (const viewDescriptor of toSetVisible) {
this.viewsDescriptors.setVisible(viewDescriptor.id, true, size);
this.viewContainerModel.setVisible(viewDescriptor.id, true, size);
}
}
}
......@@ -704,7 +704,7 @@ export class TerminalService implements ITerminalService {
const location = this._viewDescriptorService.getViewLocation(TERMINAL_VIEW_ID);
if (location === ViewContainerLocation.Panel) {
const panel = this._viewDescriptorService.getViewContainer(TERMINAL_VIEW_ID);
if (panel && this._viewDescriptorService.getViewDescriptors(panel).activeViewDescriptors.length === 1) {
if (panel && this._viewDescriptorService.getViewContainerModel(panel).activeViewDescriptors.length === 1) {
this._layoutService.setPanelHidden(true);
}
}
......
......@@ -11,6 +11,8 @@ import { TestInstantiationService } from 'vs/platform/instantiation/test/common/
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { ViewDescriptorService } from 'vs/workbench/services/views/browser/viewDescriptorService';
import { assertIsDefined } from 'vs/base/common/types';
import { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyService';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
const ViewsRegistry = Registry.as<IViewsRegistry>(ViewContainerExtensions.ViewsRegistry);
const sidebarContainer = Registry.as<IViewContainersRegistry>(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer({ id: 'testSidebar', name: 'test', ctorDescriptor: new SyncDescriptor(<any>{}) }, ViewContainerLocation.Sidebar);
......@@ -22,6 +24,7 @@ suite('ViewDescriptorService', () => {
setup(() => {
const instantiationService: TestInstantiationService = <TestInstantiationService>workbenchInstantiationService();
instantiationService.stub(IContextKeyService, instantiationService.createInstance(ContextKeyService));
viewDescriptorService = instantiationService.createInstance(ViewDescriptorService);
});
......@@ -31,8 +34,8 @@ suite('ViewDescriptorService', () => {
});
test('Empty Containers', function () {
const sidebarViews = viewDescriptorService.getViewDescriptors(sidebarContainer);
const panelViews = viewDescriptorService.getViewDescriptors(panelContainer);
const sidebarViews = viewDescriptorService.getViewContainerModel(sidebarContainer);
const panelViews = viewDescriptorService.getViewContainerModel(panelContainer);
assert.equal(sidebarViews.allViewDescriptors.length, 0, 'The sidebar container should have no views yet.');
assert.equal(panelViews.allViewDescriptors.length, 0, 'The panel container should have no views yet.');
});
......@@ -64,8 +67,8 @@ suite('ViewDescriptorService', () => {
ViewsRegistry.registerViews(viewDescriptors.slice(2), panelContainer);
let sidebarViews = viewDescriptorService.getViewDescriptors(sidebarContainer);
let panelViews = viewDescriptorService.getViewDescriptors(panelContainer);
let sidebarViews = viewDescriptorService.getViewContainerModel(sidebarContainer);
let panelViews = viewDescriptorService.getViewContainerModel(panelContainer);
assert.equal(sidebarViews.activeViewDescriptors.length, 2, 'Sidebar should have 2 views');
assert.equal(panelViews.activeViewDescriptors.length, 1, 'Panel should have 1 view');
......@@ -74,8 +77,8 @@ suite('ViewDescriptorService', () => {
ViewsRegistry.deregisterViews(viewDescriptors.slice(2), panelContainer);
sidebarViews = viewDescriptorService.getViewDescriptors(sidebarContainer);
panelViews = viewDescriptorService.getViewDescriptors(panelContainer);
sidebarViews = viewDescriptorService.getViewContainerModel(sidebarContainer);
panelViews = viewDescriptorService.getViewContainerModel(panelContainer);
assert.equal(sidebarViews.activeViewDescriptors.length, 0, 'Sidebar should have no views');
assert.equal(panelViews.activeViewDescriptors.length, 0, 'Panel should have no views');
......@@ -109,8 +112,8 @@ suite('ViewDescriptorService', () => {
viewDescriptorService.moveViewsToContainer(viewDescriptors.slice(2), sidebarContainer);
viewDescriptorService.moveViewsToContainer(viewDescriptors.slice(0, 2), panelContainer);
let sidebarViews = viewDescriptorService.getViewDescriptors(sidebarContainer);
let panelViews = viewDescriptorService.getViewDescriptors(panelContainer);
let sidebarViews = viewDescriptorService.getViewContainerModel(sidebarContainer);
let panelViews = viewDescriptorService.getViewContainerModel(panelContainer);
assert.equal(sidebarViews.activeViewDescriptors.length, 1, 'Sidebar should have 2 views');
assert.equal(panelViews.activeViewDescriptors.length, 2, 'Panel should have 1 view');
......@@ -148,8 +151,8 @@ suite('ViewDescriptorService', () => {
viewDescriptorService.moveViewToLocation(viewDescriptors[0], ViewContainerLocation.Panel);
viewDescriptorService.moveViewToLocation(viewDescriptors[2], ViewContainerLocation.Sidebar);
let sidebarViews = viewDescriptorService.getViewDescriptors(sidebarContainer);
let panelViews = viewDescriptorService.getViewDescriptors(panelContainer);
let sidebarViews = viewDescriptorService.getViewContainerModel(sidebarContainer);
let panelViews = viewDescriptorService.getViewContainerModel(panelContainer);
assert.equal(sidebarViews.activeViewDescriptors.length, 1, 'Sidebar container should have 1 view');
assert.equal(panelViews.activeViewDescriptors.length, 0, 'Panel container should have no views');
......@@ -169,8 +172,8 @@ suite('ViewDescriptorService', () => {
viewDescriptorService.moveViewToLocation(viewDescriptors[0], ViewContainerLocation.Sidebar);
viewDescriptorService.moveViewToLocation(viewDescriptors[2], ViewContainerLocation.Panel);
sidebarViews = viewDescriptorService.getViewDescriptors(sidebarContainer);
panelViews = viewDescriptorService.getViewDescriptors(panelContainer);
sidebarViews = viewDescriptorService.getViewContainerModel(sidebarContainer);
panelViews = viewDescriptorService.getViewContainerModel(panelContainer);
assert.equal(sidebarViews.activeViewDescriptors.length, 1, 'Sidebar should have 2 views');
assert.equal(panelViews.activeViewDescriptors.length, 0, 'Panel should have 1 view');
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册