Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/sessions/browser/layoutActions.ts
13388 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { alert } from '../../base/browser/ui/aria/aria.js';
7
import { Codicon } from '../../base/common/codicons.js';
8
import { KeyCode, KeyMod } from '../../base/common/keyCodes.js';
9
import { localize, localize2 } from '../../nls.js';
10
import { Categories } from '../../platform/action/common/actionCommonCategories.js';
11
import { Action2, MenuRegistry, registerAction2 } from '../../platform/actions/common/actions.js';
12
import { ContextKeyExpr } from '../../platform/contextkey/common/contextkey.js';
13
import { Menus } from './menus.js';
14
import { ServicesAccessor } from '../../platform/instantiation/common/instantiation.js';
15
import { KeybindingWeight } from '../../platform/keybinding/common/keybindingsRegistry.js';
16
import { registerIcon } from '../../platform/theme/common/iconRegistry.js';
17
import { IsAuxiliaryWindowContext, IsWindowAlwaysOnTopContext, SideBarVisibleContext } from '../../workbench/common/contextkeys.js';
18
import { IWorkbenchLayoutService, Parts } from '../../workbench/services/layout/browser/layoutService.js';
19
import { SessionsWelcomeVisibleContext } from '../common/contextkeys.js';
20
21
// Register Icons
22
const panelCloseIcon = registerIcon('agent-panel-close', Codicon.close, localize('agentPanelCloseIcon', "Icon to close the panel."));
23
const sidebarToggleClosedIcon = registerIcon('agent-sidebar-toggle-closed', Codicon.layoutSidebarLeftOff, localize('agentSidebarToggleClosedIcon', "Icon for the sessions sidebar when closed."));
24
const sidebarToggleOpenIcon = registerIcon('agent-sidebar-toggle-open', Codicon.layoutSidebarLeft, localize('agentSidebarToggleOpenIcon', "Icon for the sessions sidebar when open."));
25
26
class ToggleSidebarVisibilityAction extends Action2 {
27
28
static readonly ID = 'workbench.action.agentToggleSidebarVisibility';
29
30
constructor() {
31
super({
32
id: ToggleSidebarVisibilityAction.ID,
33
title: localize2('toggleSidebar', 'Toggle Primary Side Bar Visibility'),
34
icon: sidebarToggleClosedIcon,
35
toggled: {
36
condition: SideBarVisibleContext,
37
icon: sidebarToggleOpenIcon,
38
},
39
metadata: {
40
description: localize('openAndCloseSidebar', 'Open/Show and Close/Hide Sidebar'),
41
},
42
category: Categories.View,
43
f1: true,
44
keybinding: {
45
weight: KeybindingWeight.WorkbenchContrib,
46
primary: KeyMod.CtrlCmd | KeyCode.KeyB
47
},
48
menu: [
49
{
50
id: Menus.TitleBarLeftLayout,
51
group: 'navigation',
52
order: 0,
53
when: ContextKeyExpr.and(IsAuxiliaryWindowContext.toNegated(), SessionsWelcomeVisibleContext.toNegated())
54
},
55
{
56
id: Menus.TitleBarContext,
57
group: 'navigation',
58
order: 0,
59
when: ContextKeyExpr.and(IsAuxiliaryWindowContext.toNegated(), SessionsWelcomeVisibleContext.toNegated())
60
}
61
]
62
});
63
}
64
65
run(accessor: ServicesAccessor): void {
66
const layoutService = accessor.get(IWorkbenchLayoutService);
67
const isCurrentlyVisible = layoutService.isVisible(Parts.SIDEBAR_PART);
68
69
layoutService.setPartHidden(isCurrentlyVisible, Parts.SIDEBAR_PART);
70
71
// Announce visibility change to screen readers
72
const alertMessage = isCurrentlyVisible
73
? localize('sidebarHidden', "Primary Side Bar hidden")
74
: localize('sidebarVisible', "Primary Side Bar shown");
75
alert(alertMessage);
76
}
77
}
78
79
class ToggleSecondarySidebarVisibilityAction extends Action2 {
80
81
static readonly ID = 'workbench.action.agentToggleSecondarySidebarVisibility';
82
83
constructor() {
84
super({
85
id: ToggleSecondarySidebarVisibilityAction.ID,
86
title: localize2('toggleSecondarySidebar', 'Toggle Secondary Side Bar Visibility'),
87
icon: panelCloseIcon,
88
metadata: {
89
description: localize('openAndCloseSecondarySidebar', 'Open/Show and Close/Hide Secondary Side Bar'),
90
},
91
category: Categories.View,
92
f1: true,
93
menu: [
94
{
95
id: Menus.TitleBarContext,
96
order: 1,
97
when: ContextKeyExpr.and(IsAuxiliaryWindowContext.toNegated(), SessionsWelcomeVisibleContext.toNegated())
98
}
99
]
100
});
101
}
102
103
run(accessor: ServicesAccessor): void {
104
const layoutService = accessor.get(IWorkbenchLayoutService);
105
const isCurrentlyVisible = layoutService.isVisible(Parts.AUXILIARYBAR_PART);
106
107
layoutService.setPartHidden(isCurrentlyVisible, Parts.AUXILIARYBAR_PART);
108
109
// Announce visibility change to screen readers
110
const alertMessage = isCurrentlyVisible
111
? localize('secondarySidebarHidden', "Secondary Side Bar hidden")
112
: localize('secondarySidebarVisible', "Secondary Side Bar shown");
113
alert(alertMessage);
114
}
115
}
116
117
class TogglePanelVisibilityAction extends Action2 {
118
119
static readonly ID = 'workbench.action.agentTogglePanelVisibility';
120
121
constructor() {
122
super({
123
id: TogglePanelVisibilityAction.ID,
124
title: localize2('togglePanel', 'Toggle Panel Visibility'),
125
category: Categories.View,
126
f1: true,
127
icon: panelCloseIcon,
128
menu: [
129
{
130
id: Menus.PanelTitle,
131
group: 'navigation',
132
order: 2,
133
when: IsAuxiliaryWindowContext.toNegated()
134
}
135
]
136
});
137
}
138
139
run(accessor: ServicesAccessor): void {
140
const layoutService = accessor.get(IWorkbenchLayoutService);
141
layoutService.setPartHidden(layoutService.isVisible(Parts.PANEL_PART), Parts.PANEL_PART);
142
}
143
}
144
145
registerAction2(ToggleSidebarVisibilityAction);
146
registerAction2(ToggleSecondarySidebarVisibilityAction);
147
registerAction2(TogglePanelVisibilityAction);
148
149
// Floating window controls: always-on-top
150
MenuRegistry.appendMenuItem(Menus.TitleBarRightLayout, {
151
command: {
152
id: 'workbench.action.toggleWindowAlwaysOnTop',
153
title: localize('toggleWindowAlwaysOnTop', "Toggle Always on Top"),
154
icon: Codicon.pin,
155
toggled: {
156
condition: IsWindowAlwaysOnTopContext,
157
icon: Codicon.pinned,
158
},
159
},
160
when: IsAuxiliaryWindowContext,
161
group: 'navigation',
162
order: 0
163
});
164
165