Path: blob/main/src/vs/sessions/browser/layoutActions.ts
13388 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 { alert } from '../../base/browser/ui/aria/aria.js';6import { Codicon } from '../../base/common/codicons.js';7import { KeyCode, KeyMod } from '../../base/common/keyCodes.js';8import { localize, localize2 } from '../../nls.js';9import { Categories } from '../../platform/action/common/actionCommonCategories.js';10import { Action2, MenuRegistry, registerAction2 } from '../../platform/actions/common/actions.js';11import { ContextKeyExpr } from '../../platform/contextkey/common/contextkey.js';12import { Menus } from './menus.js';13import { ServicesAccessor } from '../../platform/instantiation/common/instantiation.js';14import { KeybindingWeight } from '../../platform/keybinding/common/keybindingsRegistry.js';15import { registerIcon } from '../../platform/theme/common/iconRegistry.js';16import { IsAuxiliaryWindowContext, IsWindowAlwaysOnTopContext, SideBarVisibleContext } from '../../workbench/common/contextkeys.js';17import { IWorkbenchLayoutService, Parts } from '../../workbench/services/layout/browser/layoutService.js';18import { SessionsWelcomeVisibleContext } from '../common/contextkeys.js';1920// Register Icons21const panelCloseIcon = registerIcon('agent-panel-close', Codicon.close, localize('agentPanelCloseIcon', "Icon to close the panel."));22const sidebarToggleClosedIcon = registerIcon('agent-sidebar-toggle-closed', Codicon.layoutSidebarLeftOff, localize('agentSidebarToggleClosedIcon', "Icon for the sessions sidebar when closed."));23const sidebarToggleOpenIcon = registerIcon('agent-sidebar-toggle-open', Codicon.layoutSidebarLeft, localize('agentSidebarToggleOpenIcon', "Icon for the sessions sidebar when open."));2425class ToggleSidebarVisibilityAction extends Action2 {2627static readonly ID = 'workbench.action.agentToggleSidebarVisibility';2829constructor() {30super({31id: ToggleSidebarVisibilityAction.ID,32title: localize2('toggleSidebar', 'Toggle Primary Side Bar Visibility'),33icon: sidebarToggleClosedIcon,34toggled: {35condition: SideBarVisibleContext,36icon: sidebarToggleOpenIcon,37},38metadata: {39description: localize('openAndCloseSidebar', 'Open/Show and Close/Hide Sidebar'),40},41category: Categories.View,42f1: true,43keybinding: {44weight: KeybindingWeight.WorkbenchContrib,45primary: KeyMod.CtrlCmd | KeyCode.KeyB46},47menu: [48{49id: Menus.TitleBarLeftLayout,50group: 'navigation',51order: 0,52when: ContextKeyExpr.and(IsAuxiliaryWindowContext.toNegated(), SessionsWelcomeVisibleContext.toNegated())53},54{55id: Menus.TitleBarContext,56group: 'navigation',57order: 0,58when: ContextKeyExpr.and(IsAuxiliaryWindowContext.toNegated(), SessionsWelcomeVisibleContext.toNegated())59}60]61});62}6364run(accessor: ServicesAccessor): void {65const layoutService = accessor.get(IWorkbenchLayoutService);66const isCurrentlyVisible = layoutService.isVisible(Parts.SIDEBAR_PART);6768layoutService.setPartHidden(isCurrentlyVisible, Parts.SIDEBAR_PART);6970// Announce visibility change to screen readers71const alertMessage = isCurrentlyVisible72? localize('sidebarHidden', "Primary Side Bar hidden")73: localize('sidebarVisible', "Primary Side Bar shown");74alert(alertMessage);75}76}7778class ToggleSecondarySidebarVisibilityAction extends Action2 {7980static readonly ID = 'workbench.action.agentToggleSecondarySidebarVisibility';8182constructor() {83super({84id: ToggleSecondarySidebarVisibilityAction.ID,85title: localize2('toggleSecondarySidebar', 'Toggle Secondary Side Bar Visibility'),86icon: panelCloseIcon,87metadata: {88description: localize('openAndCloseSecondarySidebar', 'Open/Show and Close/Hide Secondary Side Bar'),89},90category: Categories.View,91f1: true,92menu: [93{94id: Menus.TitleBarContext,95order: 1,96when: ContextKeyExpr.and(IsAuxiliaryWindowContext.toNegated(), SessionsWelcomeVisibleContext.toNegated())97}98]99});100}101102run(accessor: ServicesAccessor): void {103const layoutService = accessor.get(IWorkbenchLayoutService);104const isCurrentlyVisible = layoutService.isVisible(Parts.AUXILIARYBAR_PART);105106layoutService.setPartHidden(isCurrentlyVisible, Parts.AUXILIARYBAR_PART);107108// Announce visibility change to screen readers109const alertMessage = isCurrentlyVisible110? localize('secondarySidebarHidden', "Secondary Side Bar hidden")111: localize('secondarySidebarVisible', "Secondary Side Bar shown");112alert(alertMessage);113}114}115116class TogglePanelVisibilityAction extends Action2 {117118static readonly ID = 'workbench.action.agentTogglePanelVisibility';119120constructor() {121super({122id: TogglePanelVisibilityAction.ID,123title: localize2('togglePanel', 'Toggle Panel Visibility'),124category: Categories.View,125f1: true,126icon: panelCloseIcon,127menu: [128{129id: Menus.PanelTitle,130group: 'navigation',131order: 2,132when: IsAuxiliaryWindowContext.toNegated()133}134]135});136}137138run(accessor: ServicesAccessor): void {139const layoutService = accessor.get(IWorkbenchLayoutService);140layoutService.setPartHidden(layoutService.isVisible(Parts.PANEL_PART), Parts.PANEL_PART);141}142}143144registerAction2(ToggleSidebarVisibilityAction);145registerAction2(ToggleSecondarySidebarVisibilityAction);146registerAction2(TogglePanelVisibilityAction);147148// Floating window controls: always-on-top149MenuRegistry.appendMenuItem(Menus.TitleBarRightLayout, {150command: {151id: 'workbench.action.toggleWindowAlwaysOnTop',152title: localize('toggleWindowAlwaysOnTop', "Toggle Always on Top"),153icon: Codicon.pin,154toggled: {155condition: IsWindowAlwaysOnTopContext,156icon: Codicon.pinned,157},158},159when: IsAuxiliaryWindowContext,160group: 'navigation',161order: 0162});163164165