@@ -128,35 +128,47 @@ func (view *View) renderContent() {
128
128
imgui .EndCombo ()
129
129
}
130
130
131
- message , readOnly := view .currentMessage ()
131
+ message , msgReadOnly := view .currentMessage ()
132
132
availableDisplays := view .availableDisplays ()
133
133
134
- if imgui .ButtonV ("Clear" , imgui.Vec2 {}) {
135
- view .requestClear ()
134
+ if imgui .ButtonV ("Clear All " , imgui.Vec2 {}) {
135
+ view .requestClearAll ()
136
136
}
137
137
imgui .SameLine ()
138
- if ! readOnly {
139
- if imgui .ButtonV ("Remove" , imgui.Vec2 {}) {
140
- view .requestRemove ()
138
+ if ! msgReadOnly {
139
+ if imgui .ButtonV ("Remove All " , imgui.Vec2 {}) {
140
+ view .requestRemoveAll ()
141
141
}
142
142
} else {
143
143
imgui .Text ("(read-only)" )
144
144
}
145
145
if view .hasAudio () {
146
+ imgui .PushID ("audio" )
146
147
imgui .Separator ()
147
- sound := view .currentSound ()
148
+ sound , soundReadOnly := view .currentSound ()
148
149
if ! sound .Empty () {
149
150
imgui .LabelText ("Audio" , fmt .Sprintf ("%.2f sec" , sound .Duration ()))
150
151
if imgui .Button ("Export" ) {
151
152
view .requestExportAudio (sound )
152
153
}
154
+ if ! soundReadOnly {
155
+ imgui .SameLine ()
156
+ if imgui .Button ("Remove" ) {
157
+ view .requestRemoveAudio ()
158
+ }
159
+ }
153
160
imgui .SameLine ()
154
161
} else {
155
162
imgui .LabelText ("Audio" , "(no sound)" )
156
163
}
157
164
if imgui .Button ("Import" ) {
158
165
view .requestImportAudio ()
159
166
}
167
+ imgui .SameLine ()
168
+ if imgui .Button ("Clear" ) {
169
+ view .requestClearAudio ()
170
+ }
171
+ imgui .PopID ()
160
172
}
161
173
imgui .Separator ()
162
174
@@ -214,7 +226,7 @@ func (view *View) renderContent() {
214
226
if mailType < len (knownMailTypes ) {
215
227
selectedType = knownMailTypes [mailType ]
216
228
}
217
- if readOnly {
229
+ if msgReadOnly {
218
230
imgui .LabelText ("Mail Type" , selectedType )
219
231
} else if imgui .BeginCombo ("Mail Type" , selectedType ) {
220
232
for typeIndex , typeString := range knownMailTypes {
@@ -292,13 +304,15 @@ func (view View) hasAudio() bool {
292
304
return (view .model .currentKey .ID == ids .MailsStart ) || (view .model .currentKey .ID == ids .LogsStart )
293
305
}
294
306
295
- func (view * View ) currentSound () (sound audio.L8 ) {
307
+ func (view * View ) currentSound () (audio.L8 , bool ) {
296
308
if view .hasAudio () {
297
309
key := view .model .currentKey
298
310
key .ID = key .ID .Plus (300 )
299
- sound , _ = view .movieCache .Audio (key )
311
+ sound , _ := view .movieCache .Audio (key )
312
+ readOnly := len (view .mod .ModifiedBlocks (key .Lang , key .ID .Plus (view .model .currentKey .Index ))) == 0
313
+ return sound , readOnly
300
314
}
301
- return
315
+ return audio. L8 {}, true
302
316
}
303
317
304
318
func (view View ) messageOf (key resource.Key ) text.ElectronicMessage {
@@ -377,22 +391,35 @@ func (view *View) requestExportAudio(sound audio.L8) {
377
391
external .ExportAudio (view .modalStateMachine , filename , sound )
378
392
}
379
393
394
+ func (view * View ) requestRemoveAudio () {
395
+ view .requestAudioChange (nil )
396
+ }
397
+
380
398
func (view * View ) requestImportAudio () {
381
399
external .ImportAudio (view .modalStateMachine , func (sound audio.L8 ) {
382
400
movieData := movie .ContainSoundData (sound )
383
401
view .requestAudioChange (movieData )
384
402
})
385
403
}
386
404
387
- func (view * View ) requestClear () {
388
- view .requestWipe (text .EmptyElectronicMessage ().Encode (view .cp ))
405
+ func (view * View ) requestClearAudio () {
406
+ view .requestAudioChange (view .silence ())
407
+ }
408
+
409
+ func (view View ) silence () []byte {
410
+ silence := audio.L8 {SampleRate : 22050 , Samples : []byte {0x80 }}
411
+ return movie .ContainSoundData (silence )
412
+ }
413
+
414
+ func (view * View ) requestClearAll () {
415
+ view .requestWipe (text .EmptyElectronicMessage ().Encode (view .cp ), view .silence ())
389
416
}
390
417
391
- func (view * View ) requestRemove () {
392
- view .requestWipe (nil )
418
+ func (view * View ) requestRemoveAll () {
419
+ view .requestWipe (nil , nil )
393
420
}
394
421
395
- func (view * View ) requestWipe (newTextData [][]byte ) {
422
+ func (view * View ) requestWipe (newTextData [][]byte , newAudioData [] byte ) {
396
423
textEntries := make (map [resource.Language ]messageDataEntry )
397
424
audioEntries := make (map [resource.Language ]messageDataEntry )
398
425
textID := view .model .currentKey .ID .Plus (view .model .currentKey .Index )
@@ -404,7 +431,7 @@ func (view *View) requestWipe(newTextData [][]byte) {
404
431
if view .hasAudio () {
405
432
audioEntries [lang ] = messageDataEntry {
406
433
oldData : view .mod .ModifiedBlocks (lang , textID .Plus (300 )),
407
- newData : nil ,
434
+ newData : [][] byte { newAudioData } ,
408
435
}
409
436
}
410
437
}
0 commit comments