@@ -35,6 +35,7 @@ function store(state, emitter) {
35
35
state . panelHeight = null
36
36
37
37
state . blocking = false
38
+ state . unsavedChanges = false
38
39
39
40
// SERIAL CONNECTION
40
41
emitter . on ( 'load-ports' , async ( ) => {
@@ -145,6 +146,7 @@ function store(state, emitter) {
145
146
state . selectedDevice = dev
146
147
let editor = state . cache ( AceEditor , 'editor' ) . editor
147
148
state . selectedFile = null
149
+ state . unsavedChanges = false
148
150
editor . setValue ( '' )
149
151
emitter . emit ( 'close-new-file-dialog' )
150
152
emitter . emit ( 'render' )
@@ -157,7 +159,6 @@ function store(state, emitter) {
157
159
let filename = state . selectedFile || 'undefined'
158
160
let deviceName = state . selectedDevice === 'serial' ? 'board' : 'disk'
159
161
160
-
161
162
state . blocking = true
162
163
emitter . emit ( 'message' , `Saving ${ filename } on ${ deviceName } ` )
163
164
@@ -167,6 +168,7 @@ function store(state, emitter) {
167
168
contents
168
169
)
169
170
setTimeout ( ( ) => emitter . emit ( 'update-files' ) , 1000 )
171
+ state . unsavedChanges = false
170
172
emitter . emit ( 'message' , `Saved` , 1000 )
171
173
}
172
174
@@ -177,6 +179,7 @@ function store(state, emitter) {
177
179
contents
178
180
)
179
181
setTimeout ( ( ) => emitter . emit ( 'update-files' ) , 100 )
182
+ state . unsavedChanges = false
180
183
emitter . emit ( 'message' , `Saved` , 500 )
181
184
}
182
185
@@ -210,7 +213,10 @@ function store(state, emitter) {
210
213
} )
211
214
emitter . on ( 'select-file' , async ( device , filename ) => {
212
215
log ( 'select-file' )
213
-
216
+ if ( state . unsavedChanges ) {
217
+ let response = confirm ( `Loading a new file will discard any unsaved changes.\nPress OK to accept or Cancel to abort.` )
218
+ if ( ! response ) return
219
+ }
214
220
state . selectedDevice = device
215
221
216
222
/*
@@ -237,10 +243,11 @@ function store(state, emitter) {
237
243
)
238
244
}
239
245
240
- state . selectedFile = filename
241
246
let editor = state . cache ( AceEditor , 'editor' ) . editor
242
247
editor . setValue ( cleanCharacters ( content ) )
243
248
249
+ state . selectedFile = filename
250
+ state . unsavedChanges = false
244
251
state . blocking = false
245
252
emitter . emit ( 'render' )
246
253
} )
@@ -381,6 +388,11 @@ function store(state, emitter) {
381
388
}
382
389
} )
383
390
391
+ emitter . on ( 'code-change' , ( ) => {
392
+ log ( 'code-changed' )
393
+ state . unsavedChanges = true
394
+ } )
395
+
384
396
// PANEL MANAGEMENT
385
397
emitter . on ( 'show-terminal' , ( ) => {
386
398
log ( 'show-terminal' )
@@ -481,6 +493,7 @@ function store(state, emitter) {
481
493
state . selectedFile = oldFilename
482
494
state . isEditingFilename = false
483
495
state . blocking = false
496
+ state . unsavedChanges = false
484
497
emitter . emit ( 'render' )
485
498
}
486
499
}
@@ -530,6 +543,7 @@ function store(state, emitter) {
530
543
}
531
544
if ( state . selectedDevice === device ) {
532
545
state . selectedFile = null
546
+ state . unsavedChanges = false
533
547
}
534
548
emitter . emit ( 'update-files' )
535
549
} )
@@ -553,6 +567,7 @@ function store(state, emitter) {
553
567
}
554
568
if ( state . selectedDevice === device ) {
555
569
state . selectedFile = null
570
+ state . unsavedChanges = false
556
571
}
557
572
emitter . emit ( 'update-files' )
558
573
} )
0 commit comments