@theia/core 1.62.0-next.3 → 1.62.1

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.
Files changed (244) hide show
  1. package/README.md +7 -7
  2. package/i18n/nls.cs.json +158 -13
  3. package/i18n/nls.de.json +158 -13
  4. package/i18n/nls.es.json +158 -13
  5. package/i18n/nls.fr.json +158 -13
  6. package/i18n/nls.hu.json +158 -13
  7. package/i18n/nls.it.json +158 -13
  8. package/i18n/nls.ja.json +158 -13
  9. package/i18n/nls.json +159 -14
  10. package/i18n/nls.ko.json +158 -13
  11. package/i18n/nls.pl.json +158 -13
  12. package/i18n/nls.pt-br.json +158 -13
  13. package/i18n/nls.ru.json +158 -13
  14. package/i18n/nls.tr.json +158 -13
  15. package/i18n/nls.zh-cn.json +158 -13
  16. package/i18n/nls.zh-tw.json +158 -13
  17. package/lib/browser/catalog.json +206 -33
  18. package/lib/browser/common-frontend-contribution.d.ts +1 -1
  19. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  20. package/lib/browser/common-frontend-contribution.js +13 -11
  21. package/lib/browser/common-frontend-contribution.js.map +1 -1
  22. package/lib/browser/context-menu-renderer.d.ts +14 -3
  23. package/lib/browser/context-menu-renderer.d.ts.map +1 -1
  24. package/lib/browser/context-menu-renderer.js +23 -1
  25. package/lib/browser/context-menu-renderer.js.map +1 -1
  26. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  27. package/lib/browser/frontend-application-module.js +1 -3
  28. package/lib/browser/frontend-application-module.js.map +1 -1
  29. package/lib/browser/hover-service.d.ts.map +1 -1
  30. package/lib/browser/hover-service.js +7 -0
  31. package/lib/browser/hover-service.js.map +1 -1
  32. package/lib/browser/menu/action-menu-node.d.ts +36 -0
  33. package/lib/browser/menu/action-menu-node.d.ts.map +1 -0
  34. package/lib/browser/menu/action-menu-node.js +113 -0
  35. package/lib/browser/menu/action-menu-node.js.map +1 -0
  36. package/lib/browser/menu/browser-context-menu-renderer.d.ts +12 -4
  37. package/lib/browser/menu/browser-context-menu-renderer.d.ts.map +1 -1
  38. package/lib/browser/menu/browser-context-menu-renderer.js +12 -13
  39. package/lib/browser/menu/browser-context-menu-renderer.js.map +1 -1
  40. package/lib/browser/menu/browser-menu-module.d.ts.map +1 -1
  41. package/lib/browser/menu/browser-menu-module.js +4 -0
  42. package/lib/browser/menu/browser-menu-module.js.map +1 -1
  43. package/lib/browser/menu/browser-menu-node-factory.d.ts +13 -0
  44. package/lib/browser/menu/browser-menu-node-factory.d.ts.map +1 -0
  45. package/lib/browser/menu/browser-menu-node-factory.js +54 -0
  46. package/lib/browser/menu/browser-menu-node-factory.js.map +1 -0
  47. package/lib/browser/menu/browser-menu-plugin.d.ts +12 -30
  48. package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
  49. package/lib/browser/menu/browser-menu-plugin.js +78 -159
  50. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  51. package/lib/browser/menu/composite-menu-node.d.ts +49 -0
  52. package/lib/browser/menu/composite-menu-node.d.ts.map +1 -0
  53. package/lib/browser/menu/composite-menu-node.js +127 -0
  54. package/lib/browser/menu/composite-menu-node.js.map +1 -0
  55. package/lib/browser/menu/menu.spec.d.ts.map +1 -0
  56. package/lib/{common → browser}/menu/menu.spec.js +38 -13
  57. package/lib/browser/menu/menu.spec.js.map +1 -0
  58. package/lib/browser/open-with-service.d.ts +1 -1
  59. package/lib/browser/saveable-service.d.ts.map +1 -1
  60. package/lib/browser/saveable-service.js +6 -1
  61. package/lib/browser/saveable-service.js.map +1 -1
  62. package/lib/browser/shell/application-shell.d.ts +7 -5
  63. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  64. package/lib/browser/shell/application-shell.js +82 -28
  65. package/lib/browser/shell/application-shell.js.map +1 -1
  66. package/lib/browser/shell/index.d.ts +1 -0
  67. package/lib/browser/shell/index.d.ts.map +1 -1
  68. package/lib/browser/shell/index.js +1 -0
  69. package/lib/browser/shell/index.js.map +1 -1
  70. package/lib/browser/shell/sidebar-bottom-menu-widget.d.ts.map +1 -1
  71. package/lib/browser/shell/sidebar-bottom-menu-widget.js +2 -1
  72. package/lib/browser/shell/sidebar-bottom-menu-widget.js.map +1 -1
  73. package/lib/browser/shell/sidebar-menu-widget.d.ts +4 -1
  74. package/lib/browser/shell/sidebar-menu-widget.d.ts.map +1 -1
  75. package/lib/browser/shell/sidebar-menu-widget.js +14 -1
  76. package/lib/browser/shell/sidebar-menu-widget.js.map +1 -1
  77. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +66 -8
  78. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
  79. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +161 -8
  80. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
  81. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +18 -32
  82. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
  83. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +52 -88
  84. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
  85. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts +17 -21
  86. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts.map +1 -1
  87. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js +9 -9
  88. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js.map +1 -1
  89. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +7 -39
  90. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
  91. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +30 -238
  92. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
  93. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.js +13 -13
  94. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.js.map +1 -1
  95. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts +56 -0
  96. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts.map +1 -0
  97. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js +208 -0
  98. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js.map +1 -0
  99. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  100. package/lib/browser/shell/tab-bars.js +2 -1
  101. package/lib/browser/shell/tab-bars.js.map +1 -1
  102. package/lib/browser/shell/theia-dock-panel.d.ts +4 -10
  103. package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
  104. package/lib/browser/shell/theia-dock-panel.js +7 -84
  105. package/lib/browser/shell/theia-dock-panel.js.map +1 -1
  106. package/lib/browser/shell/theia-split-panel.d.ts +6 -0
  107. package/lib/browser/shell/theia-split-panel.d.ts.map +1 -0
  108. package/lib/browser/shell/theia-split-panel.js +56 -0
  109. package/lib/browser/shell/theia-split-panel.js.map +1 -0
  110. package/lib/browser/tree/tree-widget.d.ts +1 -0
  111. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  112. package/lib/browser/tree/tree-widget.js +6 -0
  113. package/lib/browser/tree/tree-widget.js.map +1 -1
  114. package/lib/browser/view-container.d.ts +6 -3
  115. package/lib/browser/view-container.d.ts.map +1 -1
  116. package/lib/browser/view-container.js +36 -26
  117. package/lib/browser/view-container.js.map +1 -1
  118. package/lib/browser/window/default-secondary-window-service.d.ts +1 -0
  119. package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
  120. package/lib/browser/window/default-secondary-window-service.js +3 -0
  121. package/lib/browser/window/default-secondary-window-service.js.map +1 -1
  122. package/lib/common/listener.d.ts +21 -0
  123. package/lib/common/listener.d.ts.map +1 -0
  124. package/lib/common/listener.js +81 -0
  125. package/lib/common/listener.js.map +1 -0
  126. package/lib/common/listener.spec.d.ts +2 -0
  127. package/lib/common/listener.spec.d.ts.map +1 -0
  128. package/lib/common/listener.spec.js +255 -0
  129. package/lib/common/listener.spec.js.map +1 -0
  130. package/lib/common/menu/index.d.ts +2 -3
  131. package/lib/common/menu/index.d.ts.map +1 -1
  132. package/lib/common/menu/index.js +2 -3
  133. package/lib/common/menu/index.js.map +1 -1
  134. package/lib/common/menu/menu-model-registry.d.ts +37 -50
  135. package/lib/common/menu/menu-model-registry.d.ts.map +1 -1
  136. package/lib/common/menu/menu-model-registry.js +176 -225
  137. package/lib/common/menu/menu-model-registry.js.map +1 -1
  138. package/lib/common/menu/menu-types.d.ts +58 -96
  139. package/lib/common/menu/menu-types.d.ts.map +1 -1
  140. package/lib/common/menu/menu-types.js +43 -39
  141. package/lib/common/menu/menu-types.js.map +1 -1
  142. package/lib/common/messaging/proxy-factory.d.ts.map +1 -1
  143. package/lib/common/messaging/proxy-factory.js +4 -0
  144. package/lib/common/messaging/proxy-factory.js.map +1 -1
  145. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts +15 -5
  146. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
  147. package/lib/electron-browser/menu/electron-context-menu-renderer.js +21 -14
  148. package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
  149. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +4 -16
  150. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  151. package/lib/electron-browser/menu/electron-main-menu-factory.js +84 -104
  152. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  153. package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
  154. package/lib/electron-browser/menu/electron-menu-contribution.js +1 -4
  155. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  156. package/lib/electron-browser/menu/electron-menu-module.d.ts.map +1 -1
  157. package/lib/electron-browser/menu/electron-menu-module.js +5 -0
  158. package/lib/electron-browser/menu/electron-menu-module.js.map +1 -1
  159. package/lib/electron-browser/window/electron-secondary-window-service.d.ts +1 -0
  160. package/lib/electron-browser/window/electron-secondary-window-service.d.ts.map +1 -1
  161. package/lib/electron-browser/window/electron-secondary-window-service.js +20 -0
  162. package/lib/electron-browser/window/electron-secondary-window-service.js.map +1 -1
  163. package/lib/electron-browser/window/electron-window-service.d.ts +3 -0
  164. package/lib/electron-browser/window/electron-window-service.d.ts.map +1 -1
  165. package/lib/electron-browser/window/electron-window-service.js +10 -1
  166. package/lib/electron-browser/window/electron-window-service.js.map +1 -1
  167. package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
  168. package/lib/electron-main/theia-electron-window.js +2 -0
  169. package/lib/electron-main/theia-electron-window.js.map +1 -1
  170. package/package.json +7 -8
  171. package/src/browser/common-frontend-contribution.ts +14 -14
  172. package/src/browser/context-menu-renderer.ts +33 -5
  173. package/src/browser/frontend-application-module.ts +1 -7
  174. package/src/browser/hover-service.ts +7 -0
  175. package/src/browser/menu/action-menu-node.ts +128 -0
  176. package/src/browser/menu/browser-context-menu-renderer.ts +18 -11
  177. package/src/browser/menu/browser-menu-module.ts +4 -0
  178. package/src/browser/menu/browser-menu-node-factory.ts +48 -0
  179. package/src/browser/menu/browser-menu-plugin.ts +80 -168
  180. package/src/browser/menu/composite-menu-node.ts +140 -0
  181. package/src/{common → browser}/menu/menu.spec.ts +47 -15
  182. package/src/browser/open-with-service.ts +1 -1
  183. package/src/browser/saveable-service.ts +6 -1
  184. package/src/browser/shell/application-shell.ts +91 -29
  185. package/src/browser/shell/index.ts +1 -0
  186. package/src/browser/shell/sidebar-bottom-menu-widget.tsx +2 -1
  187. package/src/browser/shell/sidebar-menu-widget.tsx +12 -2
  188. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.tsx +239 -0
  189. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +59 -102
  190. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.ts +14 -23
  191. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +14 -14
  192. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +34 -261
  193. package/src/browser/shell/tab-bar-toolbar/tab-toolbar-item.tsx +251 -0
  194. package/src/browser/shell/tab-bars.ts +2 -1
  195. package/src/browser/shell/theia-dock-panel.ts +10 -91
  196. package/src/browser/shell/theia-split-panel.ts +56 -0
  197. package/src/browser/style/hover-service.css +6 -1
  198. package/src/browser/style/index.css +3 -11
  199. package/src/browser/style/view-container.css +17 -31
  200. package/src/browser/tree/tree-widget.tsx +7 -0
  201. package/src/browser/view-container.ts +51 -30
  202. package/src/browser/window/default-secondary-window-service.ts +4 -0
  203. package/src/common/listener.spec.ts +315 -0
  204. package/src/common/listener.ts +88 -0
  205. package/src/common/menu/index.ts +2 -3
  206. package/src/common/menu/menu-model-registry.ts +187 -230
  207. package/src/common/menu/menu-types.ts +82 -128
  208. package/src/common/messaging/proxy-factory.ts +4 -1
  209. package/src/electron-browser/menu/electron-context-menu-renderer.ts +29 -13
  210. package/src/electron-browser/menu/electron-main-menu-factory.ts +92 -116
  211. package/src/electron-browser/menu/electron-menu-contribution.ts +1 -4
  212. package/src/electron-browser/menu/electron-menu-module.ts +6 -1
  213. package/src/electron-browser/window/electron-secondary-window-service.ts +22 -0
  214. package/src/electron-browser/window/electron-window-service.ts +11 -1
  215. package/src/electron-main/theia-electron-window.ts +2 -0
  216. package/lib/common/menu/action-menu-node.d.ts +0 -20
  217. package/lib/common/menu/action-menu-node.d.ts.map +0 -1
  218. package/lib/common/menu/action-menu-node.js +0 -57
  219. package/lib/common/menu/action-menu-node.js.map +0 -1
  220. package/lib/common/menu/composite-menu-node.d.ts +0 -47
  221. package/lib/common/menu/composite-menu-node.d.ts.map +0 -1
  222. package/lib/common/menu/composite-menu-node.js +0 -96
  223. package/lib/common/menu/composite-menu-node.js.map +0 -1
  224. package/lib/common/menu/composite-menu-node.spec.d.ts +0 -2
  225. package/lib/common/menu/composite-menu-node.spec.d.ts.map +0 -1
  226. package/lib/common/menu/composite-menu-node.spec.js +0 -68
  227. package/lib/common/menu/composite-menu-node.spec.js.map +0 -1
  228. package/lib/common/menu/menu-adapter.d.ts +0 -36
  229. package/lib/common/menu/menu-adapter.d.ts.map +0 -1
  230. package/lib/common/menu/menu-adapter.js +0 -93
  231. package/lib/common/menu/menu-adapter.js.map +0 -1
  232. package/lib/common/menu/menu.spec.d.ts.map +0 -1
  233. package/lib/common/menu/menu.spec.js.map +0 -1
  234. package/lib/common/test/mock-menu.d.ts +0 -8
  235. package/lib/common/test/mock-menu.d.ts.map +0 -1
  236. package/lib/common/test/mock-menu.js +0 -35
  237. package/lib/common/test/mock-menu.js.map +0 -1
  238. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.ts +0 -31
  239. package/src/common/menu/action-menu-node.ts +0 -65
  240. package/src/common/menu/composite-menu-node.spec.ts +0 -67
  241. package/src/common/menu/composite-menu-node.ts +0 -116
  242. package/src/common/menu/menu-adapter.ts +0 -103
  243. package/src/common/test/mock-menu.ts +0 -35
  244. /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, MenuPath, MenuNode, CommandMenuNode, CompoundMenuNode, CompoundMenuNodeRole } from '../../common';
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.doSetMenuBar();
108
+ this.setMenuBar();
98
109
  }
99
110
  if (this.menu) {
100
- for (const cmd of this.toggledCommands) {
101
- const menuItem = this.findMenuById(this.menu, cmd);
102
- if (menuItem && (!!menuItem.checked !== this.commandRegistry.isToggled(cmd))) {
103
- menuItem.checked = !menuItem.checked;
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
- this.menu = this.createElectronMenuBar();
115
- window.electronTheiaCore.setMenu(this.menu);
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[] | undefined {
119
- const preference = this.preferencesService.get<string>('window.menuBarVisibility') || 'classic';
120
- const maxWidget = document.getElementsByClassName(MAXIMIZED_CLASS);
121
- if (preference === 'visible' || (preference === 'classic' && maxWidget.length === 0)) {
122
- const menuModel = this.menuProvider.getMenu(MAIN_MENU_BAR);
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 undefined;
159
+ return menu;
130
160
  }
131
161
 
132
- createElectronContextMenu(menuPath: MenuPath, args?: any[], context?: HTMLElement, contextKeyService?: ContextMatcher, skipSingleRootNode?: boolean): MenuDto[] {
133
- const menuModel = skipSingleRootNode ? this.menuProvider.removeSingleRootNode(this.menuProvider.getMenu(menuPath), menuPath) : this.menuProvider.getMenu(menuPath);
134
- return this.fillMenuTemplate([], menuModel, args, { showDisabled: true, context, rootMenuPath: menuPath, contextKeyService }, true);
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 && this.undefinedOrMatch(options.contextKeyService ?? this.contextKeyService, menu.when, options.context)) {
147
- const role = CompoundMenuNode.getRole(menu);
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
- const children = CompoundMenuNode.getFlatChildren(menu.children);
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 && role === CompoundMenuNodeRole.Submenu) {
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.command) {
167
- const node = menu.altNode && this.context.altPressed ? menu.altNode : (menu as MenuNode & CommandMenuNode);
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 && !this.menuCommandExecutor.isEnabled(options.rootMenuPath, commandId, ...args)) {
208
+ if (!showDisabled && !menu.isEnabled(menuPath, ...args)) {
184
209
  return parentItems;
185
210
  }
186
211
 
187
- const bindings = this.keybindingRegistry.getKeybindingsForCommand(commandId);
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: node.id,
193
- label: node.label,
194
- type: this.commandRegistry.getToggledHandler(commandId, ...args) ? 'checkbox' : 'normal',
195
- checked: this.commandRegistry.isToggled(commandId, ...args),
196
- enabled: !honorDisabled || this.commandRegistry.isEnabled(commandId, ...args), // see https://github.com/eclipse-theia/theia/issues/446
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: () => this.execute(commandId, args, options.rootMenuPath)
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(node.id);
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.mainPanel.onDidToggleMaximized(() => {
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 => this.isSafeToShutDown(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"}