Path: blob/main/src/vs/sessions/contrib/files/browser/files.contribution.ts
13401 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { Codicon } from '../../../../base/common/codicons.js';6import { localize, localize2 } from '../../../../nls.js';7import { Action2, MenuId, registerAction2 } from '../../../../platform/actions/common/actions.js';8import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';9import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js';10import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';11import { Registry } from '../../../../platform/registry/common/platform.js';12import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js';13import { IWorkbenchContribution, registerWorkbenchContribution2, WorkbenchPhase } from '../../../../workbench/common/contributions.js';14import { IViewContainersRegistry, IViewsRegistry, ViewContainerLocation, Extensions as ViewContainerExtensions, WindowEnablement } from '../../../../workbench/common/views.js';15import { ExplorerView } from '../../../../workbench/contrib/files/browser/views/explorerView.js';16import { ViewPaneContainer } from '../../../../workbench/browser/parts/views/viewPaneContainer.js';17import { IViewsService } from '../../../../workbench/services/views/common/viewsService.js';18import { WorkspaceFolderCountContext } from '../../../../workbench/common/contextkeys.js';19import { SESSIONS_FILES_EMPTY_VIEW_ID, SESSIONS_FILES_VIEW_ID, SessionsExplorerEmptyView, SessionsExplorerView } from './filesView.js';20import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js';21import { IsPhoneLayoutContext } from '../../../common/contextkeys.js';2223export const SESSIONS_FILES_CONTAINER_ID = 'workbench.sessions.auxiliaryBar.filesContainer';2425const filesViewIcon = registerIcon('sessions-files-view-icon', Codicon.files, localize2('sessionsFilesViewIcon', 'View icon of the files view in the sessions window.').value);2627const viewContainerRegistry = Registry.as<IViewContainersRegistry>(ViewContainerExtensions.ViewContainersRegistry);2829// Files view container30const filesViewContainer = viewContainerRegistry.registerViewContainer({31id: SESSIONS_FILES_CONTAINER_ID,32title: localize2('files', "Files"),33icon: filesViewIcon,34order: 11,35ctorDescriptor: new SyncDescriptor(ViewPaneContainer, [SESSIONS_FILES_CONTAINER_ID, { mergeViewWithContainerWhenSingleView: true }]),36storageId: SESSIONS_FILES_CONTAINER_ID,37hideIfEmpty: false,38openCommandActionDescriptor: {39id: SESSIONS_FILES_CONTAINER_ID,40title: localize2('explore', "Explorer"),41mnemonicTitle: localize({ key: 'miFiles', comment: ['&& denotes a mnemonic'] }, "Fil&&es"),42keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyE },43order: 044},45windowEnablement: WindowEnablement.Sessions,46}, ViewContainerLocation.AuxiliaryBar, { isDefault: true });4748class RegisterFilesViewContribution implements IWorkbenchContribution {4950static readonly ID = 'sessions.registerFilesView';5152constructor() {53const viewsRegistry = Registry.as<IViewsRegistry>(ViewContainerExtensions.ViewsRegistry);5455// Re-register the explorer view inside the new Files container56viewsRegistry.registerViews([{57id: SESSIONS_FILES_VIEW_ID,58name: localize2('files', "Files"),59containerIcon: filesViewIcon,60ctorDescriptor: new SyncDescriptor(SessionsExplorerView),61canToggleVisibility: false,62canMoveView: false,63when: ContextKeyExpr.and(WorkspaceFolderCountContext.notEqualsTo('0'), IsPhoneLayoutContext.negate()),64windowEnablement: WindowEnablement.Sessions,65}], filesViewContainer);6667// Register an empty view to show when there are no workspace folders68viewsRegistry.registerViews([{69id: SESSIONS_FILES_EMPTY_VIEW_ID,70name: localize2('files', "Files"),71containerIcon: filesViewIcon,72ctorDescriptor: new SyncDescriptor(SessionsExplorerEmptyView),73canToggleVisibility: false,74canMoveView: false,75when: ContextKeyExpr.and(WorkspaceFolderCountContext.isEqualTo('0'), IsPhoneLayoutContext.negate()),76windowEnablement: WindowEnablement.Sessions,77}], filesViewContainer);78}79}8081registerWorkbenchContribution2(RegisterFilesViewContribution.ID, RegisterFilesViewContribution, WorkbenchPhase.BlockStartup);8283registerAction2(class extends Action2 {84constructor() {85super({86id: 'sessions.files.action.collapseExplorerFolders',87title: localize2('collapseExplorerFolders', "Collapse Folders in Explorer"),88icon: Codicon.collapseAll,89menu: {90id: MenuId.ViewTitle,91group: 'navigation',92when: ContextKeyExpr.equals('view', SESSIONS_FILES_VIEW_ID),93},94});95}9697run(accessor: ServicesAccessor) {98const viewsService = accessor.get(IViewsService);99const view = viewsService.getViewWithId(SESSIONS_FILES_VIEW_ID);100if (view !== null) {101(view as ExplorerView).collapseAll();102}103}104});105106107