11import {
2- app ,
32 Menu ,
43 shell ,
54 BrowserWindow ,
@@ -11,6 +10,9 @@ interface DarwinMenuItemConstructorOptions extends MenuItemConstructorOptions {
1110 submenu ?: DarwinMenuItemConstructorOptions [ ] | Menu ;
1211}
1312
13+ const isDev =
14+ process . env . NODE_ENV === 'development' || process . env . DEBUG_PROD === 'true' ;
15+
1416export default class MenuBuilder {
1517 mainWindow : BrowserWindow ;
1618
@@ -27,10 +29,8 @@ export default class MenuBuilder {
2729 }
2830
2931 const template =
30- process . platform === 'darwin'
31- ? this . buildDarwinTemplate ( )
32- : [ ] ;
33- // : this.buildDefaultTemplate(); // Disable menu for Win and Linux
32+ process . platform === 'darwin' ? this . buildDarwinTemplate ( ) : [ ] ;
33+ // : this.buildDefaultTemplate(); // Disable menu for Win and Linux
3434
3535 const menu = Menu . buildFromTemplate ( template ) ;
3636 Menu . setApplicationMenu ( menu ) ;
@@ -54,143 +54,45 @@ export default class MenuBuilder {
5454 }
5555
5656 buildDarwinTemplate ( ) : MenuItemConstructorOptions [ ] {
57- const subMenuAbout : DarwinMenuItemConstructorOptions = {
58- label : 'Electron' ,
57+ const none = [ ] as any ;
58+ const subMenuApp : DarwinMenuItemConstructorOptions = {
59+ label : 'TimeTracker' ,
5960 submenu : [
60- {
61- label : 'About ElectronReact' ,
62- selector : 'orderFrontStandardAboutPanel:' ,
63- } ,
64- { type : 'separator' } ,
65- { label : 'Services' , submenu : [ ] } ,
66- { type : 'separator' } ,
67- {
68- label : 'Hide ElectronReact' ,
69- accelerator : 'Command+H' ,
70- selector : 'hide:' ,
71- } ,
72- {
73- label : 'Hide Others' ,
74- accelerator : 'Command+Shift+H' ,
75- selector : 'hideOtherApplications:' ,
76- } ,
77- { label : 'Show All' , selector : 'unhideAllApplications:' } ,
61+ { role : 'about' } ,
62+ ...( isDev ? [ { type : 'separator' } , { role : 'services' } ] : none ) ,
7863 { type : 'separator' } ,
79- {
80- label : 'Quit' ,
81- accelerator : 'Command+Q' ,
82- click : ( ) => {
83- app . quit ( ) ;
84- } ,
85- } ,
86- ] ,
87- } ;
88- const subMenuEdit : DarwinMenuItemConstructorOptions = {
89- label : 'Edit' ,
90- submenu : [
91- { label : 'Undo' , accelerator : 'Command+Z' , selector : 'undo:' } ,
92- { label : 'Redo' , accelerator : 'Shift+Command+Z' , selector : 'redo:' } ,
64+ { role : 'hide' } ,
65+ { role : 'hideOthers' } ,
66+ { role : 'unhide' } ,
9367 { type : 'separator' } ,
94- { label : 'Cut' , accelerator : 'Command+X' , selector : 'cut:' } ,
95- { label : 'Copy' , accelerator : 'Command+C' , selector : 'copy:' } ,
96- { label : 'Paste' , accelerator : 'Command+V' , selector : 'paste:' } ,
97- {
98- label : 'Select All' ,
99- accelerator : 'Command+A' ,
100- selector : 'selectAll:' ,
101- } ,
102- ] ,
103- } ;
104- const subMenuViewDev : MenuItemConstructorOptions = {
105- label : 'View' ,
106- submenu : [
107- {
108- label : 'Reload' ,
109- accelerator : 'Command+R' ,
110- click : ( ) => {
111- this . mainWindow . webContents . reload ( ) ;
112- } ,
113- } ,
114- {
115- label : 'Toggle Full Screen' ,
116- accelerator : 'Ctrl+Command+F' ,
117- click : ( ) => {
118- this . mainWindow . setFullScreen ( ! this . mainWindow . isFullScreen ( ) ) ;
119- } ,
120- } ,
121- {
122- label : 'Toggle Developer Tools' ,
123- accelerator : 'Alt+Command+I' ,
124- click : ( ) => {
125- this . mainWindow . webContents . toggleDevTools ( ) ;
126- } ,
127- } ,
68+ { role : 'quit' } ,
12869 ] ,
12970 } ;
130- const subMenuViewProd : MenuItemConstructorOptions = {
71+ const subMenuView : DarwinMenuItemConstructorOptions = {
13172 label : 'View' ,
13273 submenu : [
133- {
134- label : 'Toggle Full Screen' ,
135- accelerator : 'Ctrl+Command+F' ,
136- click : ( ) => {
137- this . mainWindow . setFullScreen ( ! this . mainWindow . isFullScreen ( ) ) ;
138- } ,
139- } ,
140- ] ,
141- } ;
142- const subMenuWindow : DarwinMenuItemConstructorOptions = {
143- label : 'Window' ,
144- submenu : [
145- {
146- label : 'Minimize' ,
147- accelerator : 'Command+M' ,
148- selector : 'performMiniaturize:' ,
149- } ,
150- { label : 'Close' , accelerator : 'Command+W' , selector : 'performClose:' } ,
74+ ...( isDev
75+ ? [
76+ { role : 'reload' } ,
77+ { role : 'forceReload' } ,
78+ { role : 'toggleDevTools' } ,
79+ { type : 'separator' } ,
80+ ]
81+ : none ) ,
82+ { role : 'resetZoom' } ,
83+ { role : 'zoomIn' } ,
84+ { role : 'zoomOut' } ,
15185 { type : 'separator' } ,
152- { label : 'Bring All to Front' , selector : 'arrangeInFront:' } ,
153- ] ,
154- } ;
155- const subMenuHelp : MenuItemConstructorOptions = {
156- label : 'Help' ,
157- submenu : [
158- {
159- label : 'Learn More' ,
160- click ( ) {
161- shell . openExternal ( 'https://electronjs.org' ) ;
162- } ,
163- } ,
164- {
165- label : 'Documentation' ,
166- click ( ) {
167- shell . openExternal (
168- 'https://github.com/electron/electron/tree/master/docs#readme'
169- ) ;
170- } ,
171- } ,
172- {
173- label : 'Community Discussions' ,
174- click ( ) {
175- shell . openExternal ( 'https://www.electronjs.org/community' ) ;
176- } ,
177- } ,
178- {
179- label : 'Search Issues' ,
180- click ( ) {
181- shell . openExternal ( 'https://github.com/electron/electron/issues' ) ;
182- } ,
183- } ,
86+ { role : 'togglefullscreen' } ,
18487 ] ,
18588 } ;
18689
187- const subMenuView =
188- process . env . NODE_ENV === 'development' ||
189- process . env . DEBUG_PROD === 'true'
190- ? subMenuViewDev
191- : subMenuViewProd ;
192-
193- return [ subMenuAbout , subMenuEdit , subMenuView , subMenuWindow , subMenuHelp ] ;
90+ return [
91+ subMenuApp ,
92+ { role : 'editMenu' } ,
93+ subMenuView ,
94+ { role : 'windowMenu' } ,
95+ ] ;
19496 }
19597
19698 buildDefaultTemplate ( ) {
0 commit comments