@theia/core 1.61.0 → 1.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/i18n/nls.cs.json +158 -13
- package/i18n/nls.de.json +158 -13
- package/i18n/nls.es.json +158 -13
- package/i18n/nls.fr.json +158 -13
- package/i18n/nls.hu.json +158 -13
- package/i18n/nls.it.json +158 -13
- package/i18n/nls.ja.json +158 -13
- package/i18n/nls.json +159 -14
- package/i18n/nls.ko.json +158 -13
- package/i18n/nls.pl.json +158 -13
- package/i18n/nls.pt-br.json +158 -13
- package/i18n/nls.ru.json +158 -13
- package/i18n/nls.tr.json +158 -13
- package/i18n/nls.zh-cn.json +158 -13
- package/i18n/nls.zh-tw.json +158 -13
- package/lib/browser/catalog.json +197 -33
- package/lib/browser/common-frontend-contribution.d.ts +1 -1
- package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
- package/lib/browser/common-frontend-contribution.js +13 -11
- package/lib/browser/common-frontend-contribution.js.map +1 -1
- package/lib/browser/context-menu-renderer.d.ts +14 -3
- package/lib/browser/context-menu-renderer.d.ts.map +1 -1
- package/lib/browser/context-menu-renderer.js +23 -1
- package/lib/browser/context-menu-renderer.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js +1 -3
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/hover-service.d.ts.map +1 -1
- package/lib/browser/hover-service.js +7 -0
- package/lib/browser/hover-service.js.map +1 -1
- package/lib/browser/menu/action-menu-node.d.ts +36 -0
- package/lib/browser/menu/action-menu-node.d.ts.map +1 -0
- package/lib/browser/menu/action-menu-node.js +113 -0
- package/lib/browser/menu/action-menu-node.js.map +1 -0
- package/lib/browser/menu/browser-context-menu-renderer.d.ts +12 -4
- package/lib/browser/menu/browser-context-menu-renderer.d.ts.map +1 -1
- package/lib/browser/menu/browser-context-menu-renderer.js +12 -13
- package/lib/browser/menu/browser-context-menu-renderer.js.map +1 -1
- package/lib/browser/menu/browser-menu-module.d.ts.map +1 -1
- package/lib/browser/menu/browser-menu-module.js +4 -0
- package/lib/browser/menu/browser-menu-module.js.map +1 -1
- package/lib/browser/menu/browser-menu-node-factory.d.ts +13 -0
- package/lib/browser/menu/browser-menu-node-factory.d.ts.map +1 -0
- package/lib/browser/menu/browser-menu-node-factory.js +54 -0
- package/lib/browser/menu/browser-menu-node-factory.js.map +1 -0
- package/lib/browser/menu/browser-menu-plugin.d.ts +12 -30
- package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
- package/lib/browser/menu/browser-menu-plugin.js +78 -159
- package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
- package/lib/browser/menu/composite-menu-node.d.ts +49 -0
- package/lib/browser/menu/composite-menu-node.d.ts.map +1 -0
- package/lib/browser/menu/composite-menu-node.js +127 -0
- package/lib/browser/menu/composite-menu-node.js.map +1 -0
- package/lib/browser/menu/menu.spec.d.ts.map +1 -0
- package/lib/{common → browser}/menu/menu.spec.js +38 -13
- package/lib/browser/menu/menu.spec.js.map +1 -0
- package/lib/browser/open-with-service.d.ts +1 -1
- package/lib/browser/saveable-service.d.ts.map +1 -1
- package/lib/browser/saveable-service.js +6 -1
- package/lib/browser/saveable-service.js.map +1 -1
- package/lib/browser/shell/application-shell.d.ts +7 -5
- package/lib/browser/shell/application-shell.d.ts.map +1 -1
- package/lib/browser/shell/application-shell.js +82 -28
- package/lib/browser/shell/application-shell.js.map +1 -1
- package/lib/browser/shell/index.d.ts +1 -0
- package/lib/browser/shell/index.d.ts.map +1 -1
- package/lib/browser/shell/index.js +1 -0
- package/lib/browser/shell/index.js.map +1 -1
- package/lib/browser/shell/sidebar-bottom-menu-widget.d.ts.map +1 -1
- package/lib/browser/shell/sidebar-bottom-menu-widget.js +2 -1
- package/lib/browser/shell/sidebar-bottom-menu-widget.js.map +1 -1
- package/lib/browser/shell/sidebar-menu-widget.d.ts +4 -1
- package/lib/browser/shell/sidebar-menu-widget.d.ts.map +1 -1
- package/lib/browser/shell/sidebar-menu-widget.js +14 -1
- package/lib/browser/shell/sidebar-menu-widget.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +66 -8
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +161 -8
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +18 -32
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +52 -88
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts +17 -21
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js +9 -9
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +7 -39
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +30 -238
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.js +13 -13
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts +56 -0
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts.map +1 -0
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js +208 -0
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js.map +1 -0
- package/lib/browser/shell/tab-bars.d.ts.map +1 -1
- package/lib/browser/shell/tab-bars.js +2 -1
- package/lib/browser/shell/tab-bars.js.map +1 -1
- package/lib/browser/shell/theia-dock-panel.d.ts +4 -10
- package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
- package/lib/browser/shell/theia-dock-panel.js +7 -84
- package/lib/browser/shell/theia-dock-panel.js.map +1 -1
- package/lib/browser/shell/theia-split-panel.d.ts +6 -0
- package/lib/browser/shell/theia-split-panel.d.ts.map +1 -0
- package/lib/browser/shell/theia-split-panel.js +56 -0
- package/lib/browser/shell/theia-split-panel.js.map +1 -0
- package/lib/browser/tree/tree-widget.d.ts +1 -0
- package/lib/browser/tree/tree-widget.d.ts.map +1 -1
- package/lib/browser/tree/tree-widget.js +6 -0
- package/lib/browser/tree/tree-widget.js.map +1 -1
- package/lib/browser/view-container.d.ts +6 -3
- package/lib/browser/view-container.d.ts.map +1 -1
- package/lib/browser/view-container.js +36 -26
- package/lib/browser/view-container.js.map +1 -1
- package/lib/browser/window/default-secondary-window-service.d.ts +1 -0
- package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
- package/lib/browser/window/default-secondary-window-service.js +3 -0
- package/lib/browser/window/default-secondary-window-service.js.map +1 -1
- package/lib/common/listener.d.ts +21 -0
- package/lib/common/listener.d.ts.map +1 -0
- package/lib/common/listener.js +81 -0
- package/lib/common/listener.js.map +1 -0
- package/lib/common/listener.spec.d.ts +2 -0
- package/lib/common/listener.spec.d.ts.map +1 -0
- package/lib/common/listener.spec.js +255 -0
- package/lib/common/listener.spec.js.map +1 -0
- package/lib/common/menu/index.d.ts +2 -3
- package/lib/common/menu/index.d.ts.map +1 -1
- package/lib/common/menu/index.js +2 -3
- package/lib/common/menu/index.js.map +1 -1
- package/lib/common/menu/menu-model-registry.d.ts +37 -50
- package/lib/common/menu/menu-model-registry.d.ts.map +1 -1
- package/lib/common/menu/menu-model-registry.js +176 -225
- package/lib/common/menu/menu-model-registry.js.map +1 -1
- package/lib/common/menu/menu-types.d.ts +58 -96
- package/lib/common/menu/menu-types.d.ts.map +1 -1
- package/lib/common/menu/menu-types.js +43 -39
- package/lib/common/menu/menu-types.js.map +1 -1
- package/lib/common/messaging/proxy-factory.d.ts.map +1 -1
- package/lib/common/messaging/proxy-factory.js +4 -0
- package/lib/common/messaging/proxy-factory.js.map +1 -1
- package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts +15 -5
- package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-context-menu-renderer.js +21 -14
- package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +4 -16
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.js +84 -104
- package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
- package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-menu-contribution.js +1 -4
- package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
- package/lib/electron-browser/menu/electron-menu-module.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-menu-module.js +5 -0
- package/lib/electron-browser/menu/electron-menu-module.js.map +1 -1
- package/lib/electron-browser/window/electron-secondary-window-service.d.ts +1 -0
- package/lib/electron-browser/window/electron-secondary-window-service.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-secondary-window-service.js +20 -0
- package/lib/electron-browser/window/electron-secondary-window-service.js.map +1 -1
- package/lib/electron-browser/window/electron-window-service.d.ts +3 -0
- package/lib/electron-browser/window/electron-window-service.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-window-service.js +10 -1
- package/lib/electron-browser/window/electron-window-service.js.map +1 -1
- package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
- package/lib/electron-main/theia-electron-window.js +2 -0
- package/lib/electron-main/theia-electron-window.js.map +1 -1
- package/package.json +7 -8
- package/src/browser/common-frontend-contribution.ts +14 -14
- package/src/browser/context-menu-renderer.ts +33 -5
- package/src/browser/frontend-application-module.ts +1 -7
- package/src/browser/hover-service.ts +7 -0
- package/src/browser/menu/action-menu-node.ts +128 -0
- package/src/browser/menu/browser-context-menu-renderer.ts +18 -11
- package/src/browser/menu/browser-menu-module.ts +4 -0
- package/src/browser/menu/browser-menu-node-factory.ts +48 -0
- package/src/browser/menu/browser-menu-plugin.ts +80 -168
- package/src/browser/menu/composite-menu-node.ts +140 -0
- package/src/{common → browser}/menu/menu.spec.ts +47 -15
- package/src/browser/open-with-service.ts +1 -1
- package/src/browser/saveable-service.ts +6 -1
- package/src/browser/shell/application-shell.ts +91 -29
- package/src/browser/shell/index.ts +1 -0
- package/src/browser/shell/sidebar-bottom-menu-widget.tsx +2 -1
- package/src/browser/shell/sidebar-menu-widget.tsx +12 -2
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.tsx +239 -0
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +59 -102
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.ts +14 -23
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +14 -14
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +34 -261
- package/src/browser/shell/tab-bar-toolbar/tab-toolbar-item.tsx +251 -0
- package/src/browser/shell/tab-bars.ts +2 -1
- package/src/browser/shell/theia-dock-panel.ts +10 -91
- package/src/browser/shell/theia-split-panel.ts +56 -0
- package/src/browser/style/hover-service.css +6 -1
- package/src/browser/style/index.css +3 -11
- package/src/browser/style/view-container.css +17 -31
- package/src/browser/tree/tree-widget.tsx +7 -0
- package/src/browser/view-container.ts +51 -30
- package/src/browser/window/default-secondary-window-service.ts +4 -0
- package/src/common/listener.spec.ts +315 -0
- package/src/common/listener.ts +88 -0
- package/src/common/menu/index.ts +2 -3
- package/src/common/menu/menu-model-registry.ts +187 -230
- package/src/common/menu/menu-types.ts +82 -128
- package/src/common/messaging/proxy-factory.ts +4 -1
- package/src/electron-browser/menu/electron-context-menu-renderer.ts +29 -13
- package/src/electron-browser/menu/electron-main-menu-factory.ts +92 -116
- package/src/electron-browser/menu/electron-menu-contribution.ts +1 -4
- package/src/electron-browser/menu/electron-menu-module.ts +6 -1
- package/src/electron-browser/window/electron-secondary-window-service.ts +22 -0
- package/src/electron-browser/window/electron-window-service.ts +11 -1
- package/src/electron-main/theia-electron-window.ts +2 -0
- package/lib/common/menu/action-menu-node.d.ts +0 -20
- package/lib/common/menu/action-menu-node.d.ts.map +0 -1
- package/lib/common/menu/action-menu-node.js +0 -57
- package/lib/common/menu/action-menu-node.js.map +0 -1
- package/lib/common/menu/composite-menu-node.d.ts +0 -47
- package/lib/common/menu/composite-menu-node.d.ts.map +0 -1
- package/lib/common/menu/composite-menu-node.js +0 -96
- package/lib/common/menu/composite-menu-node.js.map +0 -1
- package/lib/common/menu/composite-menu-node.spec.d.ts +0 -2
- package/lib/common/menu/composite-menu-node.spec.d.ts.map +0 -1
- package/lib/common/menu/composite-menu-node.spec.js +0 -68
- package/lib/common/menu/composite-menu-node.spec.js.map +0 -1
- package/lib/common/menu/menu-adapter.d.ts +0 -36
- package/lib/common/menu/menu-adapter.d.ts.map +0 -1
- package/lib/common/menu/menu-adapter.js +0 -93
- package/lib/common/menu/menu-adapter.js.map +0 -1
- package/lib/common/menu/menu.spec.d.ts.map +0 -1
- package/lib/common/menu/menu.spec.js.map +0 -1
- package/lib/common/test/mock-menu.d.ts +0 -8
- package/lib/common/test/mock-menu.d.ts.map +0 -1
- package/lib/common/test/mock-menu.js +0 -35
- package/lib/common/test/mock-menu.js.map +0 -1
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.ts +0 -31
- package/src/common/menu/action-menu-node.ts +0 -65
- package/src/common/menu/composite-menu-node.spec.ts +0 -67
- package/src/common/menu/composite-menu-node.ts +0 -116
- package/src/common/menu/menu-adapter.ts +0 -103
- package/src/common/test/mock-menu.ts +0 -35
- /package/lib/{common → browser}/menu/menu.spec.d.ts +0 -0
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2022 Ericsson and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { Disposable } from '../disposable';
|
|
18
|
-
import { CompoundMenuNode, CompoundMenuNodeRole, MenuNode, MutableCompoundMenuNode, SubMenuOptions } from './menu-types';
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Node representing a (sub)menu in the menu tree structure.
|
|
22
|
-
*/
|
|
23
|
-
export class CompositeMenuNode implements MutableCompoundMenuNode {
|
|
24
|
-
protected readonly _children: MenuNode[] = [];
|
|
25
|
-
public iconClass?: string;
|
|
26
|
-
public order?: string;
|
|
27
|
-
protected _when?: string;
|
|
28
|
-
protected _role?: CompoundMenuNodeRole;
|
|
29
|
-
|
|
30
|
-
constructor(
|
|
31
|
-
public readonly id: string,
|
|
32
|
-
public label?: string,
|
|
33
|
-
options?: SubMenuOptions,
|
|
34
|
-
readonly parent?: MenuNode & CompoundMenuNode,
|
|
35
|
-
) {
|
|
36
|
-
this.updateOptions(options);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
get when(): string | undefined { return this._when; }
|
|
40
|
-
get icon(): string | undefined { return this.iconClass; }
|
|
41
|
-
get children(): ReadonlyArray<MenuNode> { return this._children; }
|
|
42
|
-
get role(): CompoundMenuNodeRole { return this._role ?? (this.label ? CompoundMenuNodeRole.Submenu : CompoundMenuNodeRole.Group); }
|
|
43
|
-
|
|
44
|
-
addNode(node: MenuNode): Disposable {
|
|
45
|
-
this._children.push(node);
|
|
46
|
-
this._children.sort(CompoundMenuNode.sortChildren);
|
|
47
|
-
return {
|
|
48
|
-
dispose: () => {
|
|
49
|
-
const idx = this._children.indexOf(node);
|
|
50
|
-
if (idx >= 0) {
|
|
51
|
-
this._children.splice(idx, 1);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
removeNode(id: string): boolean {
|
|
58
|
-
const idx = this._children.findIndex(n => n.id === id);
|
|
59
|
-
if (idx >= 0) {
|
|
60
|
-
this._children.splice(idx, 1);
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
updateOptions(options?: SubMenuOptions): void {
|
|
67
|
-
if (options) {
|
|
68
|
-
this.iconClass = options.icon ?? options.iconClass ?? this.iconClass;
|
|
69
|
-
this.label = options.label ?? this.label;
|
|
70
|
-
this.order = options.order ?? this.order;
|
|
71
|
-
this._role = options.role ?? this._role;
|
|
72
|
-
this._when = options.when ?? this._when;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
get sortString(): string {
|
|
77
|
-
return this.order || this.id;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
get isSubmenu(): boolean {
|
|
81
|
-
return Boolean(this.label);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/** @deprecated @since 1.28 use CompoundMenuNode.isNavigationGroup instead */
|
|
85
|
-
static isNavigationGroup = CompoundMenuNode.isNavigationGroup;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export class CompositeMenuNodeWrapper implements MutableCompoundMenuNode {
|
|
89
|
-
constructor(protected readonly wrapped: Readonly<MutableCompoundMenuNode>, readonly parent: CompoundMenuNode, protected readonly options?: SubMenuOptions) { }
|
|
90
|
-
|
|
91
|
-
get id(): string { return this.wrapped.id; }
|
|
92
|
-
|
|
93
|
-
get label(): string | undefined { return this.wrapped.label; }
|
|
94
|
-
|
|
95
|
-
get sortString(): string { return this.options?.order || this.wrapped.sortString; }
|
|
96
|
-
|
|
97
|
-
get isSubmenu(): boolean { return Boolean(this.label); }
|
|
98
|
-
|
|
99
|
-
get role(): CompoundMenuNodeRole { return this.options?.role ?? this.wrapped.role; }
|
|
100
|
-
|
|
101
|
-
get icon(): string | undefined { return this.iconClass; }
|
|
102
|
-
|
|
103
|
-
get iconClass(): string | undefined { return this.options?.iconClass ?? this.wrapped.icon; }
|
|
104
|
-
|
|
105
|
-
get order(): string | undefined { return this.sortString; }
|
|
106
|
-
|
|
107
|
-
get when(): string | undefined { return this.options?.when ?? this.wrapped.when; }
|
|
108
|
-
|
|
109
|
-
get children(): ReadonlyArray<MenuNode> { return this.wrapped.children; }
|
|
110
|
-
|
|
111
|
-
addNode(node: MenuNode): Disposable { return this.wrapped.addNode(node); }
|
|
112
|
-
|
|
113
|
-
removeNode(id: string): boolean { return this.wrapped.removeNode(id); }
|
|
114
|
-
|
|
115
|
-
updateOptions(options: SubMenuOptions): void { return this.wrapped.updateOptions(options); }
|
|
116
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2022 Ericsson and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { inject, injectable } from 'inversify';
|
|
18
|
-
import { CommandRegistry } from '../command';
|
|
19
|
-
import { Disposable } from '../disposable';
|
|
20
|
-
import { MenuPath } from './menu-types';
|
|
21
|
-
|
|
22
|
-
export type MenuCommandArguments = [menuPath: MenuPath, command: string, ...commandArgs: unknown[]];
|
|
23
|
-
|
|
24
|
-
export const MenuCommandExecutor = Symbol('MenuCommandExecutor');
|
|
25
|
-
export interface MenuCommandExecutor {
|
|
26
|
-
isVisible(...args: MenuCommandArguments): boolean;
|
|
27
|
-
isEnabled(...args: MenuCommandArguments): boolean;
|
|
28
|
-
isToggled(...args: MenuCommandArguments): boolean;
|
|
29
|
-
executeCommand(...args: MenuCommandArguments): Promise<unknown>;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export const MenuCommandAdapter = Symbol('MenuCommandAdapter');
|
|
33
|
-
export interface MenuCommandAdapter extends MenuCommandExecutor {
|
|
34
|
-
/** Return values less than or equal to 0 are treated as rejections. */
|
|
35
|
-
canHandle(...args: MenuCommandArguments): number;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export const MenuCommandAdapterRegistry = Symbol('MenuCommandAdapterRegistry');
|
|
39
|
-
export interface MenuCommandAdapterRegistry {
|
|
40
|
-
registerAdapter(adapter: MenuCommandAdapter): Disposable;
|
|
41
|
-
getAdapterFor(...args: MenuCommandArguments): MenuCommandAdapter | undefined;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
@injectable()
|
|
45
|
-
export class MenuCommandExecutorImpl implements MenuCommandExecutor {
|
|
46
|
-
@inject(MenuCommandAdapterRegistry) protected readonly adapterRegistry: MenuCommandAdapterRegistry;
|
|
47
|
-
@inject(CommandRegistry) protected readonly commandRegistry: CommandRegistry;
|
|
48
|
-
|
|
49
|
-
executeCommand(menuPath: MenuPath, command: string, ...commandArgs: unknown[]): Promise<unknown> {
|
|
50
|
-
return this.delegate(menuPath, command, commandArgs, 'executeCommand');
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
isVisible(menuPath: MenuPath, command: string, ...commandArgs: unknown[]): boolean {
|
|
54
|
-
return this.delegate(menuPath, command, commandArgs, 'isVisible');
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
isEnabled(menuPath: MenuPath, command: string, ...commandArgs: unknown[]): boolean {
|
|
58
|
-
return this.delegate(menuPath, command, commandArgs, 'isEnabled');
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
isToggled(menuPath: MenuPath, command: string, ...commandArgs: unknown[]): boolean {
|
|
62
|
-
return this.delegate(menuPath, command, commandArgs, 'isToggled');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
protected delegate<T extends keyof MenuCommandExecutor>(menuPath: MenuPath, command: string, commandArgs: unknown[], method: T): ReturnType<MenuCommandExecutor[T]> {
|
|
66
|
-
const adapter = this.adapterRegistry.getAdapterFor(menuPath, command, commandArgs);
|
|
67
|
-
return (adapter
|
|
68
|
-
? adapter[method](menuPath, command, ...commandArgs)
|
|
69
|
-
: this.commandRegistry[method](command, ...commandArgs)) as ReturnType<MenuCommandExecutor[T]>;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
@injectable()
|
|
74
|
-
export class MenuCommandAdapterRegistryImpl implements MenuCommandAdapterRegistry {
|
|
75
|
-
protected readonly adapters = new Array<MenuCommandAdapter>();
|
|
76
|
-
|
|
77
|
-
registerAdapter(adapter: MenuCommandAdapter): Disposable {
|
|
78
|
-
if (!this.adapters.includes(adapter)) {
|
|
79
|
-
this.adapters.push(adapter);
|
|
80
|
-
return Disposable.create(() => {
|
|
81
|
-
const index = this.adapters.indexOf(adapter);
|
|
82
|
-
if (index !== -1) {
|
|
83
|
-
this.adapters.splice(index, 1);
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
return Disposable.NULL;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
getAdapterFor(menuPath: MenuPath, command: string, ...commandArgs: unknown[]): MenuCommandAdapter | undefined {
|
|
91
|
-
let bestAdapter: MenuCommandAdapter | undefined = undefined;
|
|
92
|
-
let bestScore = 0;
|
|
93
|
-
let currentScore = 0;
|
|
94
|
-
for (const adapter of this.adapters) {
|
|
95
|
-
// Greater than or equal: favor later registrations over earlier.
|
|
96
|
-
if ((currentScore = adapter.canHandle(menuPath, command, ...commandArgs)) >= bestScore) {
|
|
97
|
-
bestScore = currentScore;
|
|
98
|
-
bestAdapter = adapter;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return bestAdapter;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2018 Red Hat, Inc. and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { Disposable } from '../disposable';
|
|
18
|
-
import { CommandRegistry } from '../command';
|
|
19
|
-
import { MenuModelRegistry, MenuPath, MenuAction } from '../menu';
|
|
20
|
-
|
|
21
|
-
export class MockMenuModelRegistry extends MenuModelRegistry {
|
|
22
|
-
|
|
23
|
-
constructor() {
|
|
24
|
-
const commands = new CommandRegistry({ getContributions: () => [] });
|
|
25
|
-
super({ getContributions: () => [] }, commands);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
override registerMenuAction(menuPath: MenuPath, item: MenuAction): Disposable {
|
|
29
|
-
return Disposable.NULL;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
override registerSubmenu(menuPath: MenuPath, label: string): Disposable {
|
|
33
|
-
return Disposable.NULL;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
File without changes
|