make visibility workspace state (#195739)

This commit is contained in:
Sandeep Somavarapu
2023-10-16 16:49:18 -07:00
committed by GitHub
parent 4be7c199b9
commit 90787304bb
5 changed files with 58 additions and 3 deletions
@@ -46,6 +46,7 @@ export class ActivitybarPart extends Part {
static readonly pinnedViewContainersKey = 'workbench.activity.pinnedViewlets2';
static readonly placeholderViewContainersKey = 'workbench.activity.placeholderViewlets';
static readonly viewContainersWorkspaceStateKey = 'workbench.activity.viewletsWorkspaceState';
//#region IView
@@ -74,6 +75,7 @@ export class ActivitybarPart extends Part {
partContainerClass: 'activitybar',
pinnedViewContainersKey: ActivitybarPart.pinnedViewContainersKey,
placeholderViewContainersKey: ActivitybarPart.placeholderViewContainersKey,
viewContainersWorkspaceStateKey: ActivitybarPart.viewContainersWorkspaceStateKey,
orientation: ActionsOrientation.VERTICAL,
icon: true,
iconSize: 24,
@@ -34,6 +34,7 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart {
static readonly activePanelSettingsKey = 'workbench.auxiliarybar.activepanelid';
static readonly pinnedPanelsKey = 'workbench.auxiliarybar.pinnedPanels';
static readonly placeholdeViewContainersKey = 'workbench.auxiliarybar.placeholderPanels';
static readonly viewContainersWorkspaceStateKey = 'workbench.auxiliarybar.viewContainersWorkspaceState';
// Use the side bar dimensions
override readonly minimumWidth: number = 170;
@@ -127,6 +128,7 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart {
partContainerClass: 'auxiliarybar',
pinnedViewContainersKey: AuxiliaryBarPart.pinnedPanelsKey,
placeholderViewContainersKey: AuxiliaryBarPart.placeholdeViewContainersKey,
viewContainersWorkspaceStateKey: AuxiliaryBarPart.viewContainersWorkspaceStateKey,
icon: true,
orientation: ActionsOrientation.HORIZONTAL,
recomputeSizes: true,
@@ -38,6 +38,7 @@ interface IPlaceholderViewContainer {
readonly themeIcon?: ThemeIcon;
readonly isBuiltin?: boolean;
readonly views?: { when?: string }[];
// TODO @sandy081: Remove this after a while. Migrated to visible in IViewContainerWorkspaceState
readonly visible?: boolean;
}
@@ -45,7 +46,12 @@ interface IPinnedViewContainer {
readonly id: string;
readonly pinned: boolean;
readonly order?: number;
// TODO @sandy081: Remove this after a while. Migrated to visible in IPlaceholderViewContainer
// TODO @sandy081: Remove this after a while. Migrated to visible in IViewContainerWorkspaceState
readonly visible: boolean;
}
interface IViewContainerWorkspaceState {
readonly id: string;
readonly visible: boolean;
}
@@ -64,6 +70,7 @@ export interface IPaneCompositeBarOptions {
readonly partContainerClass: string;
readonly pinnedViewContainersKey: string;
readonly placeholderViewContainersKey: string;
readonly viewContainersWorkspaceStateKey: string;
readonly icon: boolean;
readonly compact?: boolean;
readonly iconSize: number;
@@ -554,6 +561,12 @@ export class PaneCompositeBar extends Disposable {
cachedViewContainer.isBuiltin = placeholderViewContainer.isBuiltin;
}
}
for (const viewContainerWorkspaceState of this.getViewContainersWorkspaceState()) {
const cachedViewContainer = this._cachedViewContainers.find(cached => cached.id === viewContainerWorkspaceState.id);
if (cachedViewContainer) {
cachedViewContainer.visible = viewContainerWorkspaceState.visible ?? cachedViewContainer.visible;
}
}
}
return this._cachedViewContainers;
@@ -568,15 +581,19 @@ export class PaneCompositeBar extends Disposable {
order
})));
this.setPlaceholderViewContainers(cachedViewContainers.map(({ id, icon, name, views, visible, isBuiltin }) => (<IPlaceholderViewContainer>{
this.setPlaceholderViewContainers(cachedViewContainers.map(({ id, icon, name, views, isBuiltin }) => (<IPlaceholderViewContainer>{
id,
iconUrl: URI.isUri(icon) ? icon : undefined,
themeIcon: ThemeIcon.isThemeIcon(icon) ? icon : undefined,
name,
isBuiltin,
visible,
views
})));
this.setViewContainersWorkspaceState(cachedViewContainers.map(({ id, visible }) => (<IViewContainerWorkspaceState>{
id,
visible,
})));
}
private getPinnedViewContainers(): IPinnedViewContainer[] {
@@ -642,6 +659,38 @@ export class PaneCompositeBar extends Disposable {
private setStoredPlaceholderViewContainersValue(value: string): void {
this.storageService.store(this.options.placeholderViewContainersKey, value, StorageScope.PROFILE, StorageTarget.MACHINE);
}
private getViewContainersWorkspaceState(): IViewContainerWorkspaceState[] {
return JSON.parse(this.viewContainersWorkspaceStateValue);
}
private setViewContainersWorkspaceState(viewContainersWorkspaceState: IViewContainerWorkspaceState[]): void {
this.viewContainersWorkspaceStateValue = JSON.stringify(viewContainersWorkspaceState);
}
private _viewContainersWorkspaceStateValue: string | undefined;
private get viewContainersWorkspaceStateValue(): string {
if (!this._viewContainersWorkspaceStateValue) {
this._viewContainersWorkspaceStateValue = this.getStoredViewContainersWorkspaceStateValue();
}
return this._viewContainersWorkspaceStateValue;
}
private set viewContainersWorkspaceStateValue(viewContainersWorkspaceStateValue: string) {
if (this.viewContainersWorkspaceStateValue !== viewContainersWorkspaceStateValue) {
this._viewContainersWorkspaceStateValue = viewContainersWorkspaceStateValue;
this.setStoredViewContainersWorkspaceStateValue(viewContainersWorkspaceStateValue);
}
}
private getStoredViewContainersWorkspaceStateValue(): string {
return this.storageService.get(this.options.viewContainersWorkspaceStateKey, StorageScope.WORKSPACE, '[]');
}
private setStoredViewContainersWorkspaceStateValue(value: string): void {
this.storageService.store(this.options.viewContainersWorkspaceStateKey, value, StorageScope.WORKSPACE, StorageTarget.MACHINE);
}
}
class ViewContainerActivityAction extends CompositeBarAction {
@@ -120,6 +120,7 @@ export class PanelPart extends AbstractPaneCompositePart {
partContainerClass: 'panel',
pinnedViewContainersKey: 'workbench.panel.pinnedPanels',
placeholderViewContainersKey: 'workbench.panel.placeholderPanels',
viewContainersWorkspaceStateKey: 'workbench.panel.viewContainersWorkspaceState',
icon: false,
orientation: ActionsOrientation.HORIZONTAL,
recomputeSizes: true,
@@ -165,6 +165,7 @@ export class SidebarPart extends AbstractPaneCompositePart {
partContainerClass: 'sidebar',
pinnedViewContainersKey: ActivitybarPart.pinnedViewContainersKey,
placeholderViewContainersKey: ActivitybarPart.placeholderViewContainersKey,
viewContainersWorkspaceStateKey: ActivitybarPart.viewContainersWorkspaceStateKey,
icon: true,
orientation: ActionsOrientation.HORIZONTAL,
recomputeSizes: true,