private applyDefaultLayout()

in src/vs/workbench/browser/layout.ts [565:740]


	private applyDefaultLayout(environmentService: IWorkbenchEnvironmentService, storageService: IStorageService) {
		const defaultLayout = environmentService.options?.defaultLayout;
		if (!defaultLayout) {
			return;
		}

		if (!storageService.isNew(StorageScope.WORKSPACE)) {
			return;
		}

		const { views } = defaultLayout;
		if (views?.length) {
			this.state.views.defaults = views.map(v => v.id);

			return;
		}

		// TODO@eamodio Everything below here is deprecated and will be removed once Codespaces migrates

		const { sidebar } = defaultLayout;
		if (sidebar) {
			if (sidebar.visible !== undefined) {
				if (sidebar.visible) {
					storageService.remove(Storage.SIDEBAR_HIDDEN, StorageScope.WORKSPACE);
				} else {
					storageService.store(Storage.SIDEBAR_HIDDEN, true, StorageScope.WORKSPACE);
				}
			}

			if (sidebar.containers?.length) {
				const sidebarState: SideBarActivityState[] = [];

				let order = -1;
				for (const container of sidebar.containers.sort((a, b) => (a.order ?? 1) - (b.order ?? 1))) {
					let viewletId;
					switch (container.id) {
						case 'explorer':
							viewletId = 'workbench.view.explorer';
							break;
						case 'run':
							viewletId = 'workbench.view.debug';
							break;
						case 'scm':
							viewletId = 'workbench.view.scm';
							break;
						case 'search':
							viewletId = 'workbench.view.search';
							break;
						case 'extensions':
							viewletId = 'workbench.view.extensions';
							break;
						case 'remote':
							viewletId = 'workbench.view.remote';
							break;
						default:
							viewletId = `workbench.view.extension.${container.id}`;
					}

					if (container.active) {
						storageService.store(SidebarPart.activeViewletSettingsKey, viewletId, StorageScope.WORKSPACE);
					}

					if (container.order !== undefined || (container.active === undefined && container.visible !== undefined)) {
						order = container.order ?? (order + 1);
						const state: SideBarActivityState = {
							id: viewletId,
							order: order,
							pinned: (container.active || container.visible) ?? true,
							visible: (container.active || container.visible) ?? true
						};

						sidebarState.push(state);
					}

					if (container.views !== undefined) {
						const viewsState: { id: string, isHidden?: boolean, order?: number }[] = [];
						const viewsWorkspaceState: { [id: string]: { collapsed: boolean, isHidden?: boolean, size?: number } } = {};

						for (const view of container.views) {
							if (view.order !== undefined || view.visible !== undefined) {
								viewsState.push({
									id: view.id,
									isHidden: view.visible === undefined ? undefined : !view.visible,
									order: view.order === undefined ? undefined : view.order
								});
							}

							if (view.collapsed !== undefined) {
								viewsWorkspaceState[view.id] = {
									collapsed: view.collapsed,
									isHidden: view.visible === undefined ? undefined : !view.visible,
								};
							}
						}

						storageService.store(`${viewletId}.state.hidden`, JSON.stringify(viewsState), StorageScope.GLOBAL);
						storageService.store(`${viewletId}.state`, JSON.stringify(viewsWorkspaceState), StorageScope.WORKSPACE);
					}
				}

				if (sidebarState.length) {
					storageService.store(ActivitybarPart.PINNED_VIEW_CONTAINERS, JSON.stringify(sidebarState), StorageScope.GLOBAL);
				}
			}
		}

		const { panel } = defaultLayout;
		if (panel) {
			if (panel.visible !== undefined) {
				if (panel.visible) {
					storageService.store(Storage.PANEL_HIDDEN, false, StorageScope.WORKSPACE);
				} else {
					storageService.remove(Storage.PANEL_HIDDEN, StorageScope.WORKSPACE);
				}
			}

			if (panel.containers?.length) {
				const panelState: PanelActivityState[] = [];

				let order = -1;
				for (const container of panel.containers.sort((a, b) => (a.order ?? 1) - (b.order ?? 1))) {
					let name;
					let panelId = container.id;
					switch (panelId) {
						case 'terminal':
							name = 'Terminal';
							panelId = 'workbench.panel.terminal';
							break;
						case 'debug':
							name = 'Debug Console';
							panelId = 'workbench.panel.repl';
							break;
						case 'problems':
							name = 'Problems';
							panelId = 'workbench.panel.markers';
							break;
						case 'output':
							name = 'Output';
							panelId = 'workbench.panel.output';
							break;
						case 'comments':
							name = 'Comments';
							panelId = 'workbench.panel.comments';
							break;
						case 'refactor':
							name = 'Refactor Preview';
							panelId = 'refactorPreview';
							break;
						default:
							continue;
					}

					if (container.active) {
						storageService.store(PanelPart.activePanelSettingsKey, panelId, StorageScope.WORKSPACE);
					}

					if (container.order !== undefined || (container.active === undefined && container.visible !== undefined)) {
						order = container.order ?? (order + 1);
						const state: PanelActivityState = {
							id: panelId,
							name: name,
							order: order,
							pinned: (container.active || container.visible) ?? true,
							visible: (container.active || container.visible) ?? true
						};

						panelState.push(state);
					}
				}

				if (panelState.length) {
					storageService.store(PanelPart.PINNED_PANELS, JSON.stringify(panelState), StorageScope.GLOBAL);
				}
			}
		}
	}