@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
|
@@ -17,11 +17,9 @@
|
|
|
17
17
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
18
18
|
|
|
19
19
|
import { inject, injectable, postConstruct } from 'inversify';
|
|
20
|
-
import { isOSX, MAIN_MENU_BAR,
|
|
21
|
-
import { Keybinding } from '../../common/keybinding';
|
|
20
|
+
import { isOSX, MAIN_MENU_BAR, MenuNode, CompoundMenuNode, Group, RenderedMenuNode, CommandMenu, AcceleratorSource, MenuPath } from '../../common';
|
|
22
21
|
import { PreferenceService, CommonCommands } from '../../browser';
|
|
23
22
|
import debounce = require('lodash.debounce');
|
|
24
|
-
import { MAXIMIZED_CLASS } from '../../browser/shell/theia-dock-panel';
|
|
25
23
|
import { BrowserMainMenuFactory } from '../../browser/menu/browser-menu-plugin';
|
|
26
24
|
import { ContextMatcher } from '../../browser/context-key-service';
|
|
27
25
|
import { MenuDto, MenuRole } from '../../electron-common/electron-api';
|
|
@@ -51,10 +49,6 @@ export interface ElectronMenuOptions {
|
|
|
51
49
|
* If none is provided, the global context will be used.
|
|
52
50
|
*/
|
|
53
51
|
contextKeyService?: ContextMatcher;
|
|
54
|
-
/**
|
|
55
|
-
* The root menu path for which the menu is being built.
|
|
56
|
-
*/
|
|
57
|
-
rootMenuPath: MenuPath
|
|
58
52
|
}
|
|
59
53
|
|
|
60
54
|
/**
|
|
@@ -71,11 +65,28 @@ export type ElectronMenuItemRole = ('undo' | 'redo' | 'cut' | 'copy' | 'paste' |
|
|
|
71
65
|
'selectNextTab' | 'selectPreviousTab' | 'mergeAllWindows' | 'clearRecentDocuments' |
|
|
72
66
|
'moveTabToNewWindow' | 'windowMenu');
|
|
73
67
|
|
|
68
|
+
function traverseMenuDto(items: MenuDto[], callback: (item: MenuDto) => void): void {
|
|
69
|
+
for (const item of items) {
|
|
70
|
+
callback(item);
|
|
71
|
+
if (item.submenu) {
|
|
72
|
+
traverseMenuDto(item.submenu, callback);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function traverseMenuModel(effectivePath: MenuPath, item: MenuNode, callback: (item: MenuNode, path: MenuPath) => void): void {
|
|
78
|
+
callback(item, effectivePath);
|
|
79
|
+
if (CompoundMenuNode.is(item)) {
|
|
80
|
+
for (const child of item.children) {
|
|
81
|
+
traverseMenuModel([...effectivePath, child.id], child, callback);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
74
86
|
@injectable()
|
|
75
87
|
export class ElectronMainMenuFactory extends BrowserMainMenuFactory {
|
|
76
88
|
|
|
77
89
|
protected menu?: MenuDto[];
|
|
78
|
-
protected toggledCommands: Set<string> = new Set();
|
|
79
90
|
|
|
80
91
|
@inject(PreferenceService)
|
|
81
92
|
protected preferencesService: PreferenceService;
|
|
@@ -94,16 +105,33 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory {
|
|
|
94
105
|
this.preferencesService.onPreferenceChanged(
|
|
95
106
|
debounce(e => {
|
|
96
107
|
if (e.preferenceName === 'window.menuBarVisibility') {
|
|
97
|
-
this.
|
|
108
|
+
this.setMenuBar();
|
|
98
109
|
}
|
|
99
110
|
if (this.menu) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
111
|
+
const menuModel = this.menuProvider.getMenu(MAIN_MENU_BAR)!;
|
|
112
|
+
const toggledMap = new Map<string, MenuDto>();
|
|
113
|
+
traverseMenuDto(this.menu, item => {
|
|
114
|
+
if (item.id) {
|
|
115
|
+
toggledMap.set(item.id, item);
|
|
104
116
|
}
|
|
117
|
+
});
|
|
118
|
+
let anyChanged = false;
|
|
119
|
+
|
|
120
|
+
traverseMenuModel(MAIN_MENU_BAR, menuModel, ((item, path) => {
|
|
121
|
+
if (CommandMenu.is(item)) {
|
|
122
|
+
const isToggled = item.isToggled(path);
|
|
123
|
+
const menuItem = toggledMap.get(item.id);
|
|
124
|
+
if (menuItem && isToggled !== menuItem.checked) {
|
|
125
|
+
anyChanged = true;
|
|
126
|
+
menuItem.type = isToggled ? 'checkbox' : 'normal';
|
|
127
|
+
menuItem.checked = isToggled;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}));
|
|
131
|
+
|
|
132
|
+
if (anyChanged) {
|
|
133
|
+
window.electronTheiaCore.setMenu(this.menu);
|
|
105
134
|
}
|
|
106
|
-
window.electronTheiaCore.setMenu(this.menu);
|
|
107
135
|
}
|
|
108
136
|
}, 10)
|
|
109
137
|
);
|
|
@@ -111,50 +139,58 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory {
|
|
|
111
139
|
}
|
|
112
140
|
|
|
113
141
|
doSetMenuBar(): void {
|
|
114
|
-
|
|
115
|
-
window.electronTheiaCore.
|
|
142
|
+
const preference = this.preferencesService.get<string>('window.menuBarVisibility') || 'classic';
|
|
143
|
+
const shouldShowTop = !window.electronTheiaCore.isFullScreen() || preference === 'visible';
|
|
144
|
+
if (shouldShowTop) {
|
|
145
|
+
this.menu = this.createElectronMenuBar();
|
|
146
|
+
window.electronTheiaCore.setMenu(this.menu);
|
|
147
|
+
window.electronTheiaCore.setMenuBarVisible(true);
|
|
148
|
+
} else {
|
|
149
|
+
window.electronTheiaCore.setMenuBarVisible(false);
|
|
150
|
+
}
|
|
116
151
|
}
|
|
117
152
|
|
|
118
|
-
createElectronMenuBar(): MenuDto[]
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
if (
|
|
122
|
-
|
|
123
|
-
const menu = this.fillMenuTemplate([], menuModel, [], { honorDisabled: false, rootMenuPath: MAIN_MENU_BAR }, false);
|
|
124
|
-
if (isOSX) {
|
|
125
|
-
menu.unshift(this.createOSXMenu());
|
|
126
|
-
}
|
|
127
|
-
return menu;
|
|
153
|
+
createElectronMenuBar(): MenuDto[] {
|
|
154
|
+
const menuModel = this.menuProvider.getMenu(MAIN_MENU_BAR)!;
|
|
155
|
+
const menu = this.fillMenuTemplate([], MAIN_MENU_BAR, menuModel, [], this.contextKeyService, { honorDisabled: false }, false);
|
|
156
|
+
if (isOSX) {
|
|
157
|
+
menu.unshift(this.createOSXMenu());
|
|
128
158
|
}
|
|
129
|
-
return
|
|
159
|
+
return menu;
|
|
130
160
|
}
|
|
131
161
|
|
|
132
|
-
createElectronContextMenu(menuPath: MenuPath,
|
|
133
|
-
|
|
134
|
-
return this.fillMenuTemplate([],
|
|
162
|
+
createElectronContextMenu(menuPath: MenuPath, menu: CompoundMenuNode, contextMatcher: ContextMatcher, args?: any[],
|
|
163
|
+
context?: HTMLElement, skipSingleRootNode?: boolean): MenuDto[] {
|
|
164
|
+
return this.fillMenuTemplate([], menuPath, menu, args, contextMatcher, { showDisabled: true, context }, true);
|
|
135
165
|
}
|
|
136
166
|
|
|
137
167
|
protected fillMenuTemplate(parentItems: MenuDto[],
|
|
168
|
+
menuPath: MenuPath,
|
|
138
169
|
menu: MenuNode,
|
|
139
170
|
args: unknown[] = [],
|
|
171
|
+
contextMatcher: ContextMatcher,
|
|
140
172
|
options: ElectronMenuOptions,
|
|
141
173
|
skipRoot: boolean
|
|
142
174
|
): MenuDto[] {
|
|
143
175
|
const showDisabled = options?.showDisabled !== false;
|
|
144
176
|
const honorDisabled = options?.honorDisabled !== false;
|
|
145
177
|
|
|
146
|
-
if (CompoundMenuNode.is(menu) && menu.children.length &&
|
|
147
|
-
|
|
148
|
-
if (role === CompoundMenuNodeRole.Group && menu.id === 'inline') {
|
|
178
|
+
if (CompoundMenuNode.is(menu) && menu.children.length && menu.isVisible(menuPath, contextMatcher, options.context, ...args)) {
|
|
179
|
+
if (Group.is(menu) && menu.id === 'inline') {
|
|
149
180
|
return parentItems;
|
|
150
181
|
}
|
|
151
|
-
|
|
182
|
+
|
|
183
|
+
if (menu.contextKeyOverlays) {
|
|
184
|
+
const overlays = menu.contextKeyOverlays;
|
|
185
|
+
contextMatcher = this.services.contextKeyService.createOverlay(Object.keys(overlays).map(key => [key, overlays[key]]));
|
|
186
|
+
}
|
|
187
|
+
const children = menu.children;
|
|
152
188
|
const myItems: MenuDto[] = [];
|
|
153
|
-
children.forEach(child => this.fillMenuTemplate(myItems, child, args, options, false));
|
|
189
|
+
children.forEach(child => this.fillMenuTemplate(myItems, [...menuPath, child.id], child, args, contextMatcher, options, false));
|
|
154
190
|
if (myItems.length === 0) {
|
|
155
191
|
return parentItems;
|
|
156
192
|
}
|
|
157
|
-
if (!skipRoot &&
|
|
193
|
+
if (!skipRoot && RenderedMenuNode.is(menu)) {
|
|
158
194
|
parentItems.push({ label: menu.label, submenu: myItems });
|
|
159
195
|
} else {
|
|
160
196
|
if (parentItems.length && parentItems[parentItems.length - 1].type !== 'separator') {
|
|
@@ -163,54 +199,46 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory {
|
|
|
163
199
|
parentItems.push(...myItems);
|
|
164
200
|
parentItems.push({ type: 'separator' });
|
|
165
201
|
}
|
|
166
|
-
} else if (menu
|
|
167
|
-
|
|
168
|
-
const commandId = node.command;
|
|
169
|
-
|
|
170
|
-
// That is only a sanity check at application startup.
|
|
171
|
-
if (!this.commandRegistry.getCommand(commandId)) {
|
|
172
|
-
console.debug(`Skipping menu item with missing command: "${commandId}".`);
|
|
173
|
-
return parentItems;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
if (
|
|
177
|
-
!this.menuCommandExecutor.isVisible(options.rootMenuPath, commandId, ...args)
|
|
178
|
-
|| !this.undefinedOrMatch(options.contextKeyService ?? this.contextKeyService, node.when, options.context)) {
|
|
202
|
+
} else if (CommandMenu.is(menu)) {
|
|
203
|
+
if (!menu.isVisible(menuPath, contextMatcher, options.context, ...args)) {
|
|
179
204
|
return parentItems;
|
|
180
205
|
}
|
|
181
206
|
|
|
182
207
|
// We should omit rendering context-menu items which are disabled.
|
|
183
|
-
if (!showDisabled && !
|
|
208
|
+
if (!showDisabled && !menu.isEnabled(menuPath, ...args)) {
|
|
184
209
|
return parentItems;
|
|
185
210
|
}
|
|
186
211
|
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
const accelerator = bindings[0] && this.acceleratorFor(bindings[0]);
|
|
212
|
+
const accelerator = AcceleratorSource.is(menu) ? menu.getAccelerator(options.context).join(' ') : undefined;
|
|
190
213
|
|
|
191
214
|
const menuItem: MenuDto = {
|
|
192
|
-
id:
|
|
193
|
-
label:
|
|
194
|
-
type:
|
|
195
|
-
checked:
|
|
196
|
-
enabled: !honorDisabled ||
|
|
215
|
+
id: menu.id,
|
|
216
|
+
label: menu.label,
|
|
217
|
+
type: menu.isToggled(menuPath, ...args) ? 'checkbox' : 'normal',
|
|
218
|
+
checked: menu.isToggled(menuPath, ...args),
|
|
219
|
+
enabled: !honorDisabled || menu.isEnabled(menuPath, ...args), // see https://github.com/eclipse-theia/theia/issues/446
|
|
197
220
|
visible: true,
|
|
198
221
|
accelerator,
|
|
199
|
-
execute: () =>
|
|
222
|
+
execute: async () => {
|
|
223
|
+
const wasToggled = menuItem.checked;
|
|
224
|
+
await menu.run(menuPath, ...args);
|
|
225
|
+
const isToggled = menu.isToggled(menuPath, ...args);
|
|
226
|
+
if (isToggled !== wasToggled) {
|
|
227
|
+
menuItem.type = isToggled ? 'checkbox' : 'normal';
|
|
228
|
+
menuItem.checked = isToggled;
|
|
229
|
+
window.electronTheiaCore.setMenu(this.menu);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
200
232
|
};
|
|
201
233
|
|
|
202
234
|
if (isOSX) {
|
|
203
|
-
const role = this.roleFor(
|
|
235
|
+
const role = this.roleFor(menu.id);
|
|
204
236
|
if (role) {
|
|
205
237
|
menuItem.role = role;
|
|
206
238
|
delete menuItem.execute;
|
|
207
239
|
}
|
|
208
240
|
}
|
|
209
241
|
parentItems.push(menuItem);
|
|
210
|
-
|
|
211
|
-
if (this.commandRegistry.getToggledHandler(commandId, ...args)) {
|
|
212
|
-
this.toggledCommands.add(commandId);
|
|
213
|
-
}
|
|
214
242
|
}
|
|
215
243
|
return parentItems;
|
|
216
244
|
}
|
|
@@ -222,24 +250,6 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory {
|
|
|
222
250
|
return true;
|
|
223
251
|
}
|
|
224
252
|
|
|
225
|
-
/**
|
|
226
|
-
* Return a user visible representation of a keybinding.
|
|
227
|
-
*/
|
|
228
|
-
protected acceleratorFor(keybinding: Keybinding): string {
|
|
229
|
-
const bindingKeySequence = this.keybindingRegistry.resolveKeybinding(keybinding);
|
|
230
|
-
// FIXME see https://github.com/electron/electron/issues/11740
|
|
231
|
-
// Key Sequences can't be represented properly in the electron menu.
|
|
232
|
-
//
|
|
233
|
-
// We can do what VS Code does, and append the chords as a suffix to the menu label.
|
|
234
|
-
// https://github.com/eclipse-theia/theia/issues/1199#issuecomment-430909480
|
|
235
|
-
if (bindingKeySequence.length > 1) {
|
|
236
|
-
return '';
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
const keyCode = bindingKeySequence[0];
|
|
240
|
-
return this.keybindingRegistry.acceleratorForKeyCode(keyCode, '+', true);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
253
|
protected roleFor(id: string): MenuRole | undefined {
|
|
244
254
|
let role: MenuRole | undefined;
|
|
245
255
|
switch (id) {
|
|
@@ -267,40 +277,6 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory {
|
|
|
267
277
|
return role;
|
|
268
278
|
}
|
|
269
279
|
|
|
270
|
-
protected async execute(cmd: string, args: any[], menuPath: MenuPath): Promise<void> {
|
|
271
|
-
try {
|
|
272
|
-
// This is workaround for https://github.com/eclipse-theia/theia/issues/446.
|
|
273
|
-
// Electron menus do not update based on the `isEnabled`, `isVisible` property of the command.
|
|
274
|
-
// We need to check if we can execute it.
|
|
275
|
-
if (this.menuCommandExecutor.isEnabled(menuPath, cmd, ...args)) {
|
|
276
|
-
await this.menuCommandExecutor.executeCommand(menuPath, cmd, ...args);
|
|
277
|
-
if (this.menu && this.menuCommandExecutor.isVisible(menuPath, cmd, ...args)) {
|
|
278
|
-
const item = this.findMenuById(this.menu, cmd);
|
|
279
|
-
if (item) {
|
|
280
|
-
item.checked = this.menuCommandExecutor.isToggled(menuPath, cmd, ...args);
|
|
281
|
-
window.electronTheiaCore.setMenu(this.menu);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
} catch {
|
|
286
|
-
// no-op
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
findMenuById(items: MenuDto[], id: string): MenuDto | undefined {
|
|
290
|
-
for (const item of items) {
|
|
291
|
-
if (item.id === id) {
|
|
292
|
-
return item;
|
|
293
|
-
}
|
|
294
|
-
if (item.submenu) {
|
|
295
|
-
const found = this.findMenuById(item.submenu, id);
|
|
296
|
-
if (found) {
|
|
297
|
-
return found;
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
return undefined;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
280
|
protected createOSXMenu(): MenuDto {
|
|
305
281
|
return {
|
|
306
282
|
label: 'Theia',
|
|
@@ -120,10 +120,7 @@ export class ElectronMenuContribution extends BrowserMenuBarContribution impleme
|
|
|
120
120
|
}
|
|
121
121
|
};
|
|
122
122
|
onStateChange = this.stateService.onStateChanged(stateServiceListener);
|
|
123
|
-
this.shell.
|
|
124
|
-
this.handleToggleMaximized();
|
|
125
|
-
});
|
|
126
|
-
this.shell.bottomPanel.onDidToggleMaximized(() => {
|
|
123
|
+
this.shell.onDidToggleMaximized(() => {
|
|
127
124
|
this.handleToggleMaximized();
|
|
128
125
|
});
|
|
129
126
|
this.attachMenuBarVisibilityListener();
|
|
@@ -15,14 +15,17 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import { ContainerModule } from 'inversify';
|
|
18
|
-
import { CommandContribution, MenuContribution } from '../../common';
|
|
18
|
+
import { CommandContribution, MenuContribution, MenuNodeFactory } from '../../common';
|
|
19
19
|
import { FrontendApplicationContribution, ContextMenuRenderer, KeybindingContribution, KeybindingContext } from '../../browser';
|
|
20
20
|
import { ElectronMainMenuFactory } from './electron-main-menu-factory';
|
|
21
21
|
import { ElectronContextMenuRenderer, ElectronTextInputContextMenuContribution } from './electron-context-menu-renderer';
|
|
22
22
|
import { CustomTitleWidget, CustomTitleWidgetFactory, ElectronMenuContribution } from './electron-menu-contribution';
|
|
23
|
+
import { BrowserMenuNodeFactory } from '../../browser/menu/browser-menu-node-factory';
|
|
24
|
+
import { BrowserMainMenuFactory } from '../../browser/menu/browser-menu-plugin';
|
|
23
25
|
|
|
24
26
|
export default new ContainerModule(bind => {
|
|
25
27
|
bind(ElectronMainMenuFactory).toSelf().inSingletonScope();
|
|
28
|
+
bind(BrowserMainMenuFactory).toService(ElectronMainMenuFactory);
|
|
26
29
|
bind(ContextMenuRenderer).to(ElectronContextMenuRenderer).inSingletonScope();
|
|
27
30
|
bind(KeybindingContext).toConstantValue({
|
|
28
31
|
id: 'theia.context',
|
|
@@ -37,4 +40,6 @@ export default new ContainerModule(bind => {
|
|
|
37
40
|
bind(CustomTitleWidgetFactory).toFactory(context => () => context.container.get(CustomTitleWidget));
|
|
38
41
|
bind(FrontendApplicationContribution).to(ElectronTextInputContextMenuContribution).inSingletonScope();
|
|
39
42
|
bind(MenuContribution).to(ElectronTextInputContextMenuContribution).inSingletonScope();
|
|
43
|
+
bind(BrowserMenuNodeFactory).toSelf().inSingletonScope();
|
|
44
|
+
bind(MenuNodeFactory).toService(BrowserMenuNodeFactory);
|
|
40
45
|
});
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
import { injectable } from 'inversify';
|
|
18
18
|
import { DefaultSecondaryWindowService } from '../../browser/window/default-secondary-window-service';
|
|
19
19
|
import { ApplicationShell, ExtractableWidget } from '../../browser';
|
|
20
|
+
import { ElectronWindowService } from './electron-window-service';
|
|
21
|
+
import { Deferred, timeout } from '../../common/promise-util';
|
|
20
22
|
|
|
21
23
|
@injectable()
|
|
22
24
|
export class ElectronSecondaryWindowService extends DefaultSecondaryWindowService {
|
|
@@ -24,6 +26,26 @@ export class ElectronSecondaryWindowService extends DefaultSecondaryWindowServic
|
|
|
24
26
|
window.electronTheiaCore.focusWindow(win.name);
|
|
25
27
|
}
|
|
26
28
|
|
|
29
|
+
override registerShutdownListeners(): void {
|
|
30
|
+
// Close all open windows when the main window is closed.
|
|
31
|
+
(this.windowService as ElectronWindowService).onWillShutDown(() => {
|
|
32
|
+
const promises = [];
|
|
33
|
+
// Iterate backwards because calling window.close might remove the window from the array
|
|
34
|
+
for (let i = this.secondaryWindows.length - 1; i >= 0; i--) {
|
|
35
|
+
const windowClosed = new Deferred<void>();
|
|
36
|
+
const win = this.secondaryWindows[i];
|
|
37
|
+
win.addEventListener('unload', () => {
|
|
38
|
+
windowClosed.resolve();
|
|
39
|
+
});
|
|
40
|
+
promises.push(windowClosed.promise);
|
|
41
|
+
}
|
|
42
|
+
for (let i = this.secondaryWindows.length - 1; i >= 0; i--) {
|
|
43
|
+
this.secondaryWindows[i].close();
|
|
44
|
+
}
|
|
45
|
+
return Promise.race([timeout(2000), Promise.all(promises).then(() => { })]);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
27
49
|
protected override windowCreated(newWindow: Window, widget: ExtractableWidget, shell: ApplicationShell): void {
|
|
28
50
|
window.electronTheiaCore.setMenuBarVisible(false, newWindow.name);
|
|
29
51
|
window.electronTheiaCore.setSecondaryWindowCloseRequestHandler(newWindow.name, () => this.canClose(widget, shell));
|
|
@@ -22,6 +22,7 @@ import { ElectronWindowPreferences } from './electron-window-preferences';
|
|
|
22
22
|
import { ConnectionCloseService } from '../../common/messaging/connection-management';
|
|
23
23
|
import { FrontendIdProvider } from '../../browser/messaging/frontend-id-provider';
|
|
24
24
|
import { WindowReloadOptions } from '../../browser/window/window-service';
|
|
25
|
+
import { Listener, ListenerList } from '../../common/listener';
|
|
25
26
|
|
|
26
27
|
@injectable()
|
|
27
28
|
export class ElectronWindowService extends DefaultWindowService {
|
|
@@ -48,6 +49,9 @@ export class ElectronWindowService extends DefaultWindowService {
|
|
|
48
49
|
@inject(ConnectionCloseService)
|
|
49
50
|
protected readonly connectionCloseService: ConnectionCloseService;
|
|
50
51
|
|
|
52
|
+
protected readonly onWillShutDownListeners = new ListenerList<void, Promise<void>>();
|
|
53
|
+
readonly onWillShutDown: Listener.Registration<void, Promise<void>> = this.onWillShutDownListeners.registration;
|
|
54
|
+
|
|
51
55
|
override openNewWindow(url: string, { external }: NewWindowOptions = {}): undefined {
|
|
52
56
|
this.delegate.openNewWindow(url, { external });
|
|
53
57
|
return undefined;
|
|
@@ -74,7 +78,13 @@ export class ElectronWindowService extends DefaultWindowService {
|
|
|
74
78
|
}
|
|
75
79
|
|
|
76
80
|
protected override registerUnloadListeners(): void {
|
|
77
|
-
window.electronTheiaCore.setCloseRequestHandler(reason =>
|
|
81
|
+
window.electronTheiaCore.setCloseRequestHandler(async reason => {
|
|
82
|
+
const willShutDown = await this.isSafeToShutDown(reason);
|
|
83
|
+
if (willShutDown) {
|
|
84
|
+
await Listener.await(undefined, this.onWillShutDownListeners);
|
|
85
|
+
}
|
|
86
|
+
return willShutDown;
|
|
87
|
+
});
|
|
78
88
|
window.addEventListener('unload', () => {
|
|
79
89
|
this.onUnloadEmitter.fire();
|
|
80
90
|
});
|
|
@@ -208,6 +208,8 @@ export class TheiaElectronWindow {
|
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
protected attachReloadListener(): void {
|
|
211
|
+
this.window.webContents.removeAllListeners('devtools-reload-page');
|
|
212
|
+
this.window.webContents.on('devtools-reload-page', () => this.reload());
|
|
211
213
|
this.toDispose.push(TheiaRendererAPI.onRequestReload(this.window.webContents, (newUrl?: string) => this.reload(newUrl)));
|
|
212
214
|
}
|
|
213
215
|
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { CommandRegistry } from '../command';
|
|
2
|
-
import { AlternativeHandlerMenuNode, CommandMenuNode, MenuAction, MenuNode } from './menu-types';
|
|
3
|
-
/**
|
|
4
|
-
* Node representing an action in the menu tree structure.
|
|
5
|
-
* It's based on {@link MenuAction} for which it tries to determine the
|
|
6
|
-
* best label, icon and sortString with the given data.
|
|
7
|
-
*/
|
|
8
|
-
export declare class ActionMenuNode implements MenuNode, CommandMenuNode, Partial<AlternativeHandlerMenuNode> {
|
|
9
|
-
protected readonly action: MenuAction;
|
|
10
|
-
protected readonly commands: CommandRegistry;
|
|
11
|
-
readonly altNode: ActionMenuNode | undefined;
|
|
12
|
-
constructor(action: MenuAction, commands: CommandRegistry);
|
|
13
|
-
get command(): string;
|
|
14
|
-
get when(): string | undefined;
|
|
15
|
-
get id(): string;
|
|
16
|
-
get label(): string;
|
|
17
|
-
get icon(): string | undefined;
|
|
18
|
-
get sortString(): string;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=action-menu-node.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action-menu-node.d.ts","sourceRoot":"","sources":["../../../src/common/menu/action-menu-node.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEjG;;;;GAIG;AACH,qBAAa,cAAe,YAAW,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,0BAA0B,CAAC;IAK7F,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU;IACrC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAJhD,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CAAC;gBAGtB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,eAAe;IAOhD,IAAI,OAAO,IAAI,MAAM,CAAkC;IAEvD,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAA6B;IAE3D,IAAI,EAAE,IAAI,MAAM,CAAkC;IAElD,IAAI,KAAK,IAAI,MAAM,CAUlB;IAED,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAM7B;IAED,IAAI,UAAU,IAAI,MAAM,CAA4C;CACvE"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// *****************************************************************************
|
|
3
|
-
// Copyright (C) 2022 Ericsson and others.
|
|
4
|
-
//
|
|
5
|
-
// This program and the accompanying materials are made available under the
|
|
6
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
-
//
|
|
9
|
-
// This Source Code may also be made available under the following Secondary
|
|
10
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
-
// with the GNU Classpath Exception which is available at
|
|
13
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
-
//
|
|
15
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
-
// *****************************************************************************
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.ActionMenuNode = void 0;
|
|
19
|
-
/**
|
|
20
|
-
* Node representing an action in the menu tree structure.
|
|
21
|
-
* It's based on {@link MenuAction} for which it tries to determine the
|
|
22
|
-
* best label, icon and sortString with the given data.
|
|
23
|
-
*/
|
|
24
|
-
class ActionMenuNode {
|
|
25
|
-
constructor(action, commands) {
|
|
26
|
-
this.action = action;
|
|
27
|
-
this.commands = commands;
|
|
28
|
-
if (action.alt) {
|
|
29
|
-
this.altNode = new ActionMenuNode({ commandId: action.alt }, commands);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
get command() { return this.action.commandId; }
|
|
33
|
-
;
|
|
34
|
-
get when() { return this.action.when; }
|
|
35
|
-
get id() { return this.action.commandId; }
|
|
36
|
-
get label() {
|
|
37
|
-
if (this.action.label) {
|
|
38
|
-
return this.action.label;
|
|
39
|
-
}
|
|
40
|
-
const cmd = this.commands.getCommand(this.action.commandId);
|
|
41
|
-
if (!cmd) {
|
|
42
|
-
console.debug(`No label for action menu node: No command "${this.action.commandId}" exists.`);
|
|
43
|
-
return '';
|
|
44
|
-
}
|
|
45
|
-
return cmd.label || cmd.id;
|
|
46
|
-
}
|
|
47
|
-
get icon() {
|
|
48
|
-
if (this.action.icon) {
|
|
49
|
-
return this.action.icon;
|
|
50
|
-
}
|
|
51
|
-
const command = this.commands.getCommand(this.action.commandId);
|
|
52
|
-
return command && command.iconClass;
|
|
53
|
-
}
|
|
54
|
-
get sortString() { return this.action.order || this.label; }
|
|
55
|
-
}
|
|
56
|
-
exports.ActionMenuNode = ActionMenuNode;
|
|
57
|
-
//# sourceMappingURL=action-menu-node.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action-menu-node.js","sourceRoot":"","sources":["../../../src/common/menu/action-menu-node.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAKhF;;;;GAIG;AACH,MAAa,cAAc;IAIvB,YACuB,MAAkB,EAClB,QAAyB;QADzB,WAAM,GAAN,MAAM,CAAY;QAClB,aAAQ,GAAR,QAAQ,CAAiB;QAE5C,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAED,IAAI,OAAO,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAAA,CAAC;IAExD,IAAI,IAAI,KAAyB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3D,IAAI,EAAE,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAElD,IAAI,KAAK;QACL,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,8CAA8C,IAAI,CAAC,MAAM,CAAC,SAAS,WAAW,CAAC,CAAC;YAC9F,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,IAAI;QACJ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChE,OAAO,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;IACxC,CAAC;IAED,IAAI,UAAU,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;CACvE;AAxCD,wCAwCC"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Disposable } from '../disposable';
|
|
2
|
-
import { CompoundMenuNode, CompoundMenuNodeRole, MenuNode, MutableCompoundMenuNode, SubMenuOptions } from './menu-types';
|
|
3
|
-
/**
|
|
4
|
-
* Node representing a (sub)menu in the menu tree structure.
|
|
5
|
-
*/
|
|
6
|
-
export declare class CompositeMenuNode implements MutableCompoundMenuNode {
|
|
7
|
-
readonly id: string;
|
|
8
|
-
label?: string | undefined;
|
|
9
|
-
readonly parent?: (import("./menu-types").MenuNodeMetadata & import("./menu-types").MenuNodeRenderingData & Partial<CompoundMenuNode> & Partial<import("./menu-types").CommandMenuNode> & Partial<import("./menu-types").AlternativeHandlerMenuNode> & CompoundMenuNode) | undefined;
|
|
10
|
-
protected readonly _children: MenuNode[];
|
|
11
|
-
iconClass?: string;
|
|
12
|
-
order?: string;
|
|
13
|
-
protected _when?: string;
|
|
14
|
-
protected _role?: CompoundMenuNodeRole;
|
|
15
|
-
constructor(id: string, label?: string | undefined, options?: SubMenuOptions, parent?: (import("./menu-types").MenuNodeMetadata & import("./menu-types").MenuNodeRenderingData & Partial<CompoundMenuNode> & Partial<import("./menu-types").CommandMenuNode> & Partial<import("./menu-types").AlternativeHandlerMenuNode> & CompoundMenuNode) | undefined);
|
|
16
|
-
get when(): string | undefined;
|
|
17
|
-
get icon(): string | undefined;
|
|
18
|
-
get children(): ReadonlyArray<MenuNode>;
|
|
19
|
-
get role(): CompoundMenuNodeRole;
|
|
20
|
-
addNode(node: MenuNode): Disposable;
|
|
21
|
-
removeNode(id: string): boolean;
|
|
22
|
-
updateOptions(options?: SubMenuOptions): void;
|
|
23
|
-
get sortString(): string;
|
|
24
|
-
get isSubmenu(): boolean;
|
|
25
|
-
/** @deprecated @since 1.28 use CompoundMenuNode.isNavigationGroup instead */
|
|
26
|
-
static isNavigationGroup: typeof CompoundMenuNode.isNavigationGroup;
|
|
27
|
-
}
|
|
28
|
-
export declare class CompositeMenuNodeWrapper implements MutableCompoundMenuNode {
|
|
29
|
-
protected readonly wrapped: Readonly<MutableCompoundMenuNode>;
|
|
30
|
-
readonly parent: CompoundMenuNode;
|
|
31
|
-
protected readonly options?: SubMenuOptions | undefined;
|
|
32
|
-
constructor(wrapped: Readonly<MutableCompoundMenuNode>, parent: CompoundMenuNode, options?: SubMenuOptions | undefined);
|
|
33
|
-
get id(): string;
|
|
34
|
-
get label(): string | undefined;
|
|
35
|
-
get sortString(): string;
|
|
36
|
-
get isSubmenu(): boolean;
|
|
37
|
-
get role(): CompoundMenuNodeRole;
|
|
38
|
-
get icon(): string | undefined;
|
|
39
|
-
get iconClass(): string | undefined;
|
|
40
|
-
get order(): string | undefined;
|
|
41
|
-
get when(): string | undefined;
|
|
42
|
-
get children(): ReadonlyArray<MenuNode>;
|
|
43
|
-
addNode(node: MenuNode): Disposable;
|
|
44
|
-
removeNode(id: string): boolean;
|
|
45
|
-
updateOptions(options: SubMenuOptions): void;
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=composite-menu-node.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"composite-menu-node.d.ts","sourceRoot":"","sources":["../../../src/common/menu/composite-menu-node.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEzH;;GAEG;AACH,qBAAa,iBAAkB,YAAW,uBAAuB;aAQzC,EAAE,EAAE,MAAM;IACnB,KAAK,CAAC;IAEb,QAAQ,CAAC,MAAM,CAAC;IAVpB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAM;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,KAAK,CAAC,EAAE,oBAAoB,CAAC;gBAGnB,EAAE,EAAE,MAAM,EACnB,KAAK,CAAC,oBAAQ,EACrB,OAAO,CAAC,EAAE,cAAc,EACf,MAAM,CAAC,oQAA6B;IAKjD,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAAuB;IACrD,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAA2B;IACzD,IAAI,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,CAA2B;IAClE,IAAI,IAAI,IAAI,oBAAoB,CAAmG;IAEnI,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU;IAanC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAS/B,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAU7C,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,6EAA6E;IAC7E,MAAM,CAAC,iBAAiB,4CAAsC;CACjE;AAED,qBAAa,wBAAyB,YAAW,uBAAuB;IACxD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,gBAAgB;IAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAA1G,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EAAW,MAAM,EAAE,gBAAgB,EAAqB,OAAO,CAAC,4BAAgB;IAEzJ,IAAI,EAAE,IAAI,MAAM,CAA4B;IAE5C,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAA+B;IAE9D,IAAI,UAAU,IAAI,MAAM,CAA2D;IAEnF,IAAI,SAAS,IAAI,OAAO,CAAgC;IAExD,IAAI,IAAI,IAAI,oBAAoB,CAAoD;IAEpF,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAA2B;IAEzD,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAAyD;IAE5F,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAA4B;IAE3D,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAAoD;IAElF,IAAI,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAkC;IAEzE,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU;IAEnC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAE/B,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;CAC/C"}
|