Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/multiDiffEditor/browser/actions.ts
3296 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 { Codicon } from '../../../../base/common/codicons.js';
7
import { URI } from '../../../../base/common/uri.js';
8
import { Selection } from '../../../../editor/common/core/selection.js';
9
import { localize2 } from '../../../../nls.js';
10
import { Action2, MenuId } from '../../../../platform/actions/common/actions.js';
11
import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';
12
import { ITextEditorOptions, TextEditorSelectionRevealType } from '../../../../platform/editor/common/editor.js';
13
import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';
14
import { IListService } from '../../../../platform/list/browser/listService.js';
15
import { resolveCommandsContext } from '../../../browser/parts/editor/editorCommandsContext.js';
16
import { MultiDiffEditor } from './multiDiffEditor.js';
17
import { MultiDiffEditorInput } from './multiDiffEditorInput.js';
18
import { IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js';
19
import { IEditorService } from '../../../services/editor/common/editorService.js';
20
import { ActiveEditorContext } from '../../../common/contextkeys.js';
21
22
export class GoToFileAction extends Action2 {
23
constructor() {
24
super({
25
id: 'multiDiffEditor.goToFile',
26
title: localize2('goToFile', 'Open File'),
27
icon: Codicon.goToFile,
28
precondition: ActiveEditorContext.isEqualTo(MultiDiffEditor.ID),
29
menu: {
30
when: ActiveEditorContext.isEqualTo(MultiDiffEditor.ID),
31
id: MenuId.MultiDiffEditorFileToolbar,
32
order: 22,
33
group: 'navigation',
34
},
35
});
36
}
37
38
async run(accessor: ServicesAccessor, ...args: any[]): Promise<void> {
39
const uri = args[0] as URI;
40
const editorService = accessor.get(IEditorService);
41
const activeEditorPane = editorService.activeEditorPane;
42
let selections: Selection[] | undefined = undefined;
43
if (!(activeEditorPane instanceof MultiDiffEditor)) {
44
return;
45
}
46
47
const editor = activeEditorPane.tryGetCodeEditor(uri);
48
if (editor) {
49
selections = editor.editor.getSelections() ?? undefined;
50
}
51
52
let targetUri = uri;
53
const item = activeEditorPane.findDocumentDiffItem(uri);
54
if (item && item.goToFileUri) {
55
targetUri = item.goToFileUri;
56
}
57
58
await editorService.openEditor({
59
label: item?.goToFileEditorTitle,
60
resource: targetUri,
61
options: {
62
selection: selections?.[0],
63
selectionRevealType: TextEditorSelectionRevealType.CenterIfOutsideViewport,
64
} satisfies ITextEditorOptions,
65
});
66
}
67
}
68
69
export class CollapseAllAction extends Action2 {
70
constructor() {
71
super({
72
id: 'multiDiffEditor.collapseAll',
73
title: localize2('collapseAllDiffs', 'Collapse All Diffs'),
74
icon: Codicon.collapseAll,
75
precondition: ContextKeyExpr.and(ContextKeyExpr.equals('activeEditor', MultiDiffEditor.ID), ContextKeyExpr.not('multiDiffEditorAllCollapsed')),
76
menu: [MenuId.EditorTitle, MenuId.CompactWindowEditorTitle].map(id => ({
77
id,
78
when: ContextKeyExpr.and(ContextKeyExpr.equals('activeEditor', MultiDiffEditor.ID), ContextKeyExpr.not('multiDiffEditorAllCollapsed')),
79
group: 'navigation',
80
order: 100
81
})),
82
f1: true,
83
});
84
}
85
86
async run(accessor: ServicesAccessor, ...args: unknown[]): Promise<void> {
87
const resolvedContext = resolveCommandsContext(args, accessor.get(IEditorService), accessor.get(IEditorGroupsService), accessor.get(IListService));
88
89
const groupContext = resolvedContext.groupedEditors[0];
90
if (!groupContext) {
91
return;
92
}
93
94
const editor = groupContext.editors[0];
95
if (editor instanceof MultiDiffEditorInput) {
96
const viewModel = await editor.getViewModel();
97
viewModel.collapseAll();
98
}
99
}
100
}
101
102
export class ExpandAllAction extends Action2 {
103
constructor() {
104
super({
105
id: 'multiDiffEditor.expandAll',
106
title: localize2('ExpandAllDiffs', 'Expand All Diffs'),
107
icon: Codicon.expandAll,
108
precondition: ContextKeyExpr.and(ContextKeyExpr.equals('activeEditor', MultiDiffEditor.ID), ContextKeyExpr.has('multiDiffEditorAllCollapsed')),
109
menu: [MenuId.EditorTitle, MenuId.CompactWindowEditorTitle].map(id => ({
110
id,
111
when: ContextKeyExpr.and(ContextKeyExpr.equals('activeEditor', MultiDiffEditor.ID), ContextKeyExpr.has('multiDiffEditorAllCollapsed')),
112
group: 'navigation',
113
order: 100
114
})),
115
f1: true,
116
});
117
}
118
119
async run(accessor: ServicesAccessor, ...args: unknown[]): Promise<void> {
120
const resolvedContext = resolveCommandsContext(args, accessor.get(IEditorService), accessor.get(IEditorGroupsService), accessor.get(IListService));
121
122
const groupContext = resolvedContext.groupedEditors[0];
123
if (!groupContext) {
124
return;
125
}
126
127
const editor = groupContext.editors[0];
128
if (editor instanceof MultiDiffEditorInput) {
129
const viewModel = await editor.getViewModel();
130
viewModel.expandAll();
131
}
132
}
133
}
134
135