@@ -2,6 +2,7 @@ import 'reflect-metadata';
2
2
import { container , singleton } from 'tsyringe' ;
3
3
import { IActivityBarItem , IMenuBarItem } from 'mo/model' ;
4
4
import { MenuBarEvent } from 'mo/model/workbench/menuBar' ;
5
+ import { MenuBarMode } from 'mo/model/workbench/layout' ;
5
6
import { Controller } from 'mo/react/controller' ;
6
7
import {
7
8
IMenuBarService ,
@@ -25,6 +26,11 @@ export interface IMenuBarController extends Partial<Controller> {
25
26
updateMenuBar ?: ( ) => void ;
26
27
updateActivityBar ?: ( ) => void ;
27
28
updateSideBar ?: ( ) => void ;
29
+ updateMenuBarMode ?: ( mode : keyof typeof MenuBarMode ) => void ;
30
+ getMenuBarDataByMode ?: (
31
+ mode : keyof typeof MenuBarMode ,
32
+ menuData : IMenuBarItem [ ]
33
+ ) => IMenuBarItem [ ] ;
28
34
}
29
35
30
36
@singleton ( )
@@ -60,9 +66,16 @@ export class MenuBarController
60
66
MENU_VIEW_STATUSBAR ,
61
67
MENU_QUICK_COMMAND ,
62
68
MENU_VIEW_PANEL ,
69
+ MENUBAR_MODE_HORIZONTAL ,
70
+ MENUBAR_MODE_VERTICAL ,
63
71
} = this . builtinService . getConstants ( ) ;
64
72
if ( builtInMenuBarData ) {
65
- this . menuBarService . setMenus ( builtInMenuBarData ) ;
73
+ const mode = this . layoutService . getMenuBarMode ( ) ;
74
+ const menuBarData = this . getMenuBarDataByMode (
75
+ mode ,
76
+ builtInMenuBarData
77
+ ) ;
78
+ this . menuBarService . setMenus ( menuBarData ) ;
66
79
}
67
80
( [
68
81
[ ACTION_QUICK_CREATE_FILE , ( ) => this . createFile ( ) ] ,
@@ -76,6 +89,14 @@ export class MenuBarController
76
89
[ MENU_QUICK_COMMAND , ( ) => this . gotoQuickCommand ( ) ] ,
77
90
[ ID_SIDE_BAR , ( ) => this . updateSideBar ( ) ] ,
78
91
[ MENU_VIEW_PANEL , ( ) => this . updatePanel ( ) ] ,
92
+ [
93
+ MENUBAR_MODE_HORIZONTAL ,
94
+ ( ) => this . updateMenuBarMode ( MenuBarMode . horizontal ) ,
95
+ ] ,
96
+ [
97
+ MENUBAR_MODE_VERTICAL ,
98
+ ( ) => this . updateMenuBarMode ( MenuBarMode . vertical ) ,
99
+ ] ,
79
100
] as [ string , ( ) => void ] [ ] ) . forEach ( ( [ key , value ] ) => {
80
101
if ( key ) {
81
102
this . automation [ key ] = value ;
@@ -179,6 +200,13 @@ export class MenuBarController
179
200
}
180
201
} ;
181
202
203
+ public updateMenuBarMode = ( mode : keyof typeof MenuBarMode ) => {
204
+ this . layoutService . setMenuBarMode ( mode ) ;
205
+ const { builtInMenuBarData } = this . builtinService . getModules ( ) ;
206
+ const menuBarData = this . getMenuBarDataByMode ( mode , builtInMenuBarData ) ;
207
+ this . menuBarService . setMenus ( menuBarData ) ;
208
+ } ;
209
+
182
210
public updateStatusBar = ( ) => {
183
211
const hidden = this . layoutService . toggleStatusBarVisibility ( ) ;
184
212
const { MENU_VIEW_STATUSBAR } = this . builtinService . getConstants ( ) ;
@@ -200,4 +228,47 @@ export class MenuBarController
200
228
QuickTogglePanelAction . ID
201
229
) ;
202
230
} ;
231
+
232
+ /**
233
+ * Get the menu bar data after filtering out the menu contained in ids
234
+ * @param menuData
235
+ * @param ids
236
+ * @returns Filtered menu bar data
237
+ */
238
+ private getFilteredMenuBarData (
239
+ menuData : IMenuBarItem [ ] ,
240
+ ids : ( UniqueId | undefined ) [ ]
241
+ ) : IMenuBarItem [ ] {
242
+ const newData : IMenuBarItem [ ] = [ ] ;
243
+ if ( Array . isArray ( menuData ) ) {
244
+ menuData . forEach ( ( item : IMenuBarItem ) => {
245
+ if ( ids . includes ( item . id ) ) return ;
246
+ const newItem = { ...item } ;
247
+ if ( Array . isArray ( item . data ) && item . data . length > 0 ) {
248
+ newItem . data = this . getFilteredMenuBarData ( item . data , ids ) ;
249
+ }
250
+ newData . push ( newItem ) ;
251
+ } ) ;
252
+ }
253
+ return newData ;
254
+ }
255
+
256
+ public getMenuBarDataByMode (
257
+ mode : keyof typeof MenuBarMode ,
258
+ menuData : IMenuBarItem [ ]
259
+ ) : IMenuBarItem [ ] {
260
+ const {
261
+ MENUBAR_MODE_VERTICAL ,
262
+ MENUBAR_MODE_HORIZONTAL ,
263
+ } = this . builtinService . getConstants ( ) ;
264
+ const ids : ( string | undefined ) [ ] = [ ] ;
265
+ if ( mode === MenuBarMode . horizontal ) {
266
+ ids . push ( MENUBAR_MODE_HORIZONTAL ) ;
267
+ } else if ( mode === MenuBarMode . vertical ) {
268
+ ids . push ( MENUBAR_MODE_VERTICAL ) ;
269
+ }
270
+
271
+ const menuBarData = this . getFilteredMenuBarData ( menuData , ids ) ;
272
+ return menuBarData ;
273
+ }
203
274
}
0 commit comments