提交 e48281d1 编写于 作者: S Sandeep Somavarapu

#35462 Store the hidden views in global storage

上级 c0cfc0e2
......@@ -30,6 +30,7 @@ import { IPanelOptions } from 'vs/base/browser/ui/splitview/panelview';
import { WorkbenchTree, IListService } from 'vs/platform/list/browser/listService';
import { IWorkbenchThemeService, IFileIconTheme } from 'vs/workbench/services/themes/common/workbenchThemeService';
import { ITreeConfiguration, ITreeOptions } from 'vs/base/parts/tree/browser/tree';
import Event, { Emitter } from 'vs/base/common/event';
export interface IViewOptions extends IPanelOptions {
id: string;
......@@ -270,6 +271,9 @@ export class ViewsViewlet extends PanelViewlet implements IViewsViewlet {
protected viewsStates: Map<string, IViewState> = new Map<string, IViewState>();
private areExtensionsReady: boolean = false;
private _onDidChangeViewVisibilityState: Emitter<string> = new Emitter<string>();
readonly onDidChangeViewVisibilityState: Event<string> = this._onDidChangeViewVisibilityState.event;
constructor(
id: string,
private location: ViewLocation,
......@@ -367,6 +371,7 @@ export class ViewsViewlet extends PanelViewlet implements IViewsViewlet {
viewState.isHidden = !!this.getView(id);
this.updateViews()
.then(() => {
this._onDidChangeViewVisibilityState.fire(id);
if (!viewState.isHidden) {
this.openView(id);
} else {
......@@ -579,7 +584,7 @@ export class ViewsViewlet extends PanelViewlet implements IViewsViewlet {
getAnchor: () => anchor,
getActions: () => TPromise.as([<IAction>{
id: `${view.id}.removeView`,
label: nls.localize('hideView', "Hide from Side Bar"),
label: nls.localize('hideView', "Hide"),
enabled: true,
run: () => this.toggleViewVisibility(view.id)
}]),
......@@ -675,10 +680,12 @@ export class ViewsViewlet extends PanelViewlet implements IViewsViewlet {
export class PersistentViewsViewlet extends ViewsViewlet {
private readonly hiddenViewsStorageId: string;
constructor(
id: string,
location: ViewLocation,
private viewletStateStorageId: string,
private readonly viewletStateStorageId: string,
showHeaderInTitleWhenSingleView: boolean,
@ITelemetryService telemetryService: ITelemetryService,
@IStorageService storageService: IStorageService,
......@@ -690,6 +697,8 @@ export class PersistentViewsViewlet extends ViewsViewlet {
@IExtensionService extensionService: IExtensionService
) {
super(id, location, showHeaderInTitleWhenSingleView, telemetryService, storageService, instantiationService, themeService, contextKeyService, contextMenuService, extensionService);
this.hiddenViewsStorageId = `${this.viewletStateStorageId}.hidden`;
this._register(this.onDidChangeViewVisibilityState(id => this.onViewVisibilityChanged(id)));
}
create(parent: Builder): TPromise<void> {
......@@ -728,7 +737,27 @@ export class PersistentViewsViewlet extends ViewsViewlet {
protected loadViewsStates(): void {
const viewsStates = JSON.parse(this.storageService.get(this.viewletStateStorageId, this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY ? StorageScope.WORKSPACE : StorageScope.GLOBAL, '{}'));
Object.keys(viewsStates).forEach(id => this.viewsStates.set(id, <IViewState>viewsStates[id]));
const hiddenViews = this.loadHiddenViews();
Object.keys(viewsStates).forEach(id => this.viewsStates.set(id, <IViewState>{ ...viewsStates[id], ...{ isHidden: hiddenViews.indexOf(id) !== -1 } }));
}
private onViewVisibilityChanged(id: string) {
const hiddenViews = this.loadHiddenViews();
const index = hiddenViews.indexOf(id);
if (this.getView(id) && index !== -1) {
hiddenViews.splice(index, 1);
} else if (index === -1) {
hiddenViews.push(id);
}
this.storeHiddenViews(hiddenViews);
}
private storeHiddenViews(hiddenViews: string[]): void {
this.storageService.store(this.hiddenViewsStorageId, JSON.stringify(hiddenViews), StorageScope.GLOBAL);
}
private loadHiddenViews(): string[] {
return JSON.parse(this.storageService.get(this.hiddenViewsStorageId, StorageScope.GLOBAL, '[]'));
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册