1
1
import { inject , injectable , postConstruct } from 'inversify' ;
2
2
import { Emitter } from '@theia/core/lib/common/event' ;
3
3
import { BoardUserField , CoreService } from '../../common/protocol' ;
4
- import { ArduinoMenus } from '../menu/arduino-menus' ;
4
+ import { ArduinoMenus , PlaceholderMenuNode } from '../menu/arduino-menus' ;
5
5
import { ArduinoToolbar } from '../toolbar/arduino-toolbar' ;
6
6
import { BoardsDataStore } from '../boards/boards-data-store' ;
7
7
import { SerialConnectionManager } from '../serial/serial-connection-manager' ;
@@ -16,6 +16,7 @@ import {
16
16
} from './contribution' ;
17
17
import { UserFieldsDialog } from '../dialogs/user-fields/user-fields-dialog' ;
18
18
import { nls } from '@theia/core/lib/browser/nls' ;
19
+ import { DisposableCollection } from '@theia/core' ;
19
20
20
21
@injectable ( )
21
22
export class UploadSketch extends SketchContribution {
@@ -25,6 +26,9 @@ export class UploadSketch extends SketchContribution {
25
26
@inject ( SerialConnectionManager )
26
27
protected readonly serialConnection : SerialConnectionManager ;
27
28
29
+ @inject ( MenuModelRegistry )
30
+ protected readonly menuRegistry : MenuModelRegistry ;
31
+
28
32
@inject ( BoardsDataStore )
29
33
protected readonly boardsDataStore : BoardsDataStore ;
30
34
@@ -42,25 +46,29 @@ export class UploadSketch extends SketchContribution {
42
46
protected uploadInProgress = false ;
43
47
protected boardRequiresUserFields = false ;
44
48
49
+ protected readonly menuActionsDisposables = new DisposableCollection ( ) ;
50
+
45
51
@postConstruct ( )
46
52
protected init ( ) : void {
47
53
this . boardsServiceClientImpl . onBoardsConfigChanged ( async ( ) => {
48
- const userFields = await this . boardsServiceClientImpl . selectedBoardUserFields ( ) ;
54
+ const userFields =
55
+ await this . boardsServiceClientImpl . selectedBoardUserFields ( ) ;
49
56
this . boardRequiresUserFields = userFields . length > 0 ;
50
- } )
57
+ this . registerMenus ( this . menuRegistry ) ;
58
+ } ) ;
51
59
}
52
60
53
61
private selectedFqbnAddress ( ) : string {
54
62
const { boardsConfig } = this . boardsServiceClientImpl ;
55
63
const fqbn = boardsConfig . selectedBoard ?. fqbn ;
56
64
if ( ! fqbn ) {
57
- return "" ;
65
+ return '' ;
58
66
}
59
- const address = boardsConfig . selectedBoard ?. port ?. address
67
+ const address = boardsConfig . selectedBoard ?. port ?. address ;
60
68
if ( ! address ) {
61
- return "" ;
69
+ return '' ;
62
70
}
63
- return fqbn + "|" + address ;
71
+ return fqbn + '|' + address ;
64
72
}
65
73
66
74
registerCommands ( registry : CommandRegistry ) : void {
@@ -72,7 +80,9 @@ export class UploadSketch extends SketchContribution {
72
80
}
73
81
if ( this . boardRequiresUserFields && ! this . cachedUserFields . has ( key ) ) {
74
82
// Deep clone the array of board fields to avoid editing the cached ones
75
- this . userFieldsDialog . value = ( await this . boardsServiceClientImpl . selectedBoardUserFields ( ) ) . map ( f => ( { ...f } ) ) ;
83
+ this . userFieldsDialog . value = (
84
+ await this . boardsServiceClientImpl . selectedBoardUserFields ( )
85
+ ) . map ( ( f ) => ( { ...f } ) ) ;
76
86
const result = await this . userFieldsDialog . open ( ) ;
77
87
if ( ! result ) {
78
88
return ;
@@ -83,29 +93,29 @@ export class UploadSketch extends SketchContribution {
83
93
} ,
84
94
isEnabled : ( ) => ! this . uploadInProgress ,
85
95
} ) ;
86
- registry . registerCommand (
87
- UploadSketch . Commands . UPLOAD_WITH_CONFIGURATION ,
88
- {
89
- execute : async ( ) => {
90
- const key = this . selectedFqbnAddress ( ) ;
91
- if ( ! key ) {
92
- return ;
93
- }
96
+ registry . registerCommand ( UploadSketch . Commands . UPLOAD_WITH_CONFIGURATION , {
97
+ execute : async ( ) => {
98
+ const key = this . selectedFqbnAddress ( ) ;
99
+ if ( ! key ) {
100
+ return ;
101
+ }
94
102
95
- const cached = this . cachedUserFields . get ( key ) ;
96
- // Deep clone the array of board fields to avoid editing the cached ones
97
- this . userFieldsDialog . value = ( cached ?? await this . boardsServiceClientImpl . selectedBoardUserFields ( ) ) . map ( f => ( { ...f } ) ) ;
103
+ const cached = this . cachedUserFields . get ( key ) ;
104
+ // Deep clone the array of board fields to avoid editing the cached ones
105
+ this . userFieldsDialog . value = (
106
+ cached ??
107
+ ( await this . boardsServiceClientImpl . selectedBoardUserFields ( ) )
108
+ ) . map ( ( f ) => ( { ...f } ) ) ;
98
109
99
- const result = await this . userFieldsDialog . open ( )
100
- if ( ! result ) {
101
- return ;
102
- }
103
- this . cachedUserFields . set ( key , result ) ;
104
- this . uploadSketch ( ) ;
105
- } ,
106
- isEnabled : ( ) => ! this . uploadInProgress && this . boardRequiresUserFields ,
107
- }
108
- ) ;
110
+ const result = await this . userFieldsDialog . open ( ) ;
111
+ if ( ! result ) {
112
+ return ;
113
+ }
114
+ this . cachedUserFields . set ( key , result ) ;
115
+ this . uploadSketch ( ) ;
116
+ } ,
117
+ isEnabled : ( ) => ! this . uploadInProgress && this . boardRequiresUserFields ,
118
+ } ) ;
109
119
registry . registerCommand (
110
120
UploadSketch . Commands . UPLOAD_SKETCH_USING_PROGRAMMER ,
111
121
{
@@ -124,24 +134,46 @@ export class UploadSketch extends SketchContribution {
124
134
}
125
135
126
136
registerMenus ( registry : MenuModelRegistry ) : void {
127
- registry . registerMenuAction ( ArduinoMenus . SKETCH__MAIN_GROUP , {
128
- commandId : UploadSketch . Commands . UPLOAD_SKETCH . id ,
129
- label : nls . localize ( 'arduino/sketch/upload' , 'Upload' ) ,
130
- order : '1' ,
131
- } ) ;
132
- registry . registerMenuAction ( ArduinoMenus . SKETCH__MAIN_GROUP , {
133
- commandId : UploadSketch . Commands . UPLOAD_WITH_CONFIGURATION . id ,
134
- label : UploadSketch . Commands . UPLOAD_WITH_CONFIGURATION . label ,
135
- order : '2' ,
136
- } ) ;
137
- registry . registerMenuAction ( ArduinoMenus . SKETCH__MAIN_GROUP , {
138
- commandId : UploadSketch . Commands . UPLOAD_SKETCH_USING_PROGRAMMER . id ,
139
- label : nls . localize (
140
- 'arduino/sketch/uploadUsingProgrammer' ,
141
- 'Upload Using Programmer'
142
- ) ,
143
- order : '3' ,
144
- } ) ;
137
+ this . menuActionsDisposables . dispose ( ) ;
138
+
139
+ this . menuActionsDisposables . push (
140
+ registry . registerMenuAction ( ArduinoMenus . SKETCH__MAIN_GROUP , {
141
+ commandId : UploadSketch . Commands . UPLOAD_SKETCH . id ,
142
+ label : nls . localize ( 'arduino/sketch/upload' , 'Upload' ) ,
143
+ order : '1' ,
144
+ } )
145
+ ) ;
146
+ if ( this . boardRequiresUserFields ) {
147
+ this . menuActionsDisposables . push (
148
+ registry . registerMenuAction ( ArduinoMenus . SKETCH__MAIN_GROUP , {
149
+ commandId : UploadSketch . Commands . UPLOAD_WITH_CONFIGURATION . id ,
150
+ label : UploadSketch . Commands . UPLOAD_WITH_CONFIGURATION . label ,
151
+ order : '2' ,
152
+ } )
153
+ ) ;
154
+ } else {
155
+ this . menuActionsDisposables . push (
156
+ registry . registerMenuNode (
157
+ ArduinoMenus . SKETCH__MAIN_GROUP ,
158
+ new PlaceholderMenuNode (
159
+ ArduinoMenus . SKETCH__MAIN_GROUP ,
160
+ // commandId: UploadSketch.Commands.UPLOAD_WITH_CONFIGURATION.id,
161
+ UploadSketch . Commands . UPLOAD_WITH_CONFIGURATION . label ! ,
162
+ { order : '2' }
163
+ )
164
+ )
165
+ ) ;
166
+ }
167
+ this . menuActionsDisposables . push (
168
+ registry . registerMenuAction ( ArduinoMenus . SKETCH__MAIN_GROUP , {
169
+ commandId : UploadSketch . Commands . UPLOAD_SKETCH_USING_PROGRAMMER . id ,
170
+ label : nls . localize (
171
+ 'arduino/sketch/uploadUsingProgrammer' ,
172
+ 'Upload Using Programmer'
173
+ ) ,
174
+ order : '3' ,
175
+ } )
176
+ ) ;
145
177
}
146
178
147
179
registerKeybindings ( registry : KeybindingRegistry ) : void {
@@ -200,7 +232,12 @@ export class UploadSketch extends SketchContribution {
200
232
const port = selectedPort ;
201
233
const userFields = this . cachedUserFields . get ( this . selectedFqbnAddress ( ) ) ;
202
234
if ( ! userFields ) {
203
- this . messageService . error ( nls . localize ( 'arduino/sketch/userFieldsNotFoundError' , "Can't find user fields for connected board" ) ) ;
235
+ this . messageService . error (
236
+ nls . localize (
237
+ 'arduino/sketch/userFieldsNotFoundError' ,
238
+ "Can't find user fields for connected board"
239
+ )
240
+ ) ;
204
241
return ;
205
242
}
206
243
@@ -277,9 +314,12 @@ export namespace UploadSketch {
277
314
} ;
278
315
export const UPLOAD_WITH_CONFIGURATION : Command = {
279
316
id : 'arduino-upload-with-configuration-sketch' ,
280
- label : nls . localize ( 'arduino/sketch/configureAndUpload' , 'Configure And Upload' ) ,
317
+ label : nls . localize (
318
+ 'arduino/sketch/configureAndUpload' ,
319
+ 'Configure And Upload'
320
+ ) ,
281
321
category : 'Arduino' ,
282
- }
322
+ } ;
283
323
export const UPLOAD_SKETCH_USING_PROGRAMMER : Command = {
284
324
id : 'arduino-upload-sketch-using-programmer' ,
285
325
} ;
0 commit comments