Skip to content

Commit ca0acbb

Browse files
committed
Added Clear/Remove buttons for audio of messages
1 parent 70468f8 commit ca0acbb

File tree

1 file changed

+44
-17
lines changed

1 file changed

+44
-17
lines changed

editor/messages/View.go

+44-17
Original file line numberDiff line numberDiff line change
@@ -128,35 +128,47 @@ func (view *View) renderContent() {
128128
imgui.EndCombo()
129129
}
130130

131-
message, readOnly := view.currentMessage()
131+
message, msgReadOnly := view.currentMessage()
132132
availableDisplays := view.availableDisplays()
133133

134-
if imgui.ButtonV("Clear", imgui.Vec2{}) {
135-
view.requestClear()
134+
if imgui.ButtonV("Clear All", imgui.Vec2{}) {
135+
view.requestClearAll()
136136
}
137137
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()
141141
}
142142
} else {
143143
imgui.Text("(read-only)")
144144
}
145145
if view.hasAudio() {
146+
imgui.PushID("audio")
146147
imgui.Separator()
147-
sound := view.currentSound()
148+
sound, soundReadOnly := view.currentSound()
148149
if !sound.Empty() {
149150
imgui.LabelText("Audio", fmt.Sprintf("%.2f sec", sound.Duration()))
150151
if imgui.Button("Export") {
151152
view.requestExportAudio(sound)
152153
}
154+
if !soundReadOnly {
155+
imgui.SameLine()
156+
if imgui.Button("Remove") {
157+
view.requestRemoveAudio()
158+
}
159+
}
153160
imgui.SameLine()
154161
} else {
155162
imgui.LabelText("Audio", "(no sound)")
156163
}
157164
if imgui.Button("Import") {
158165
view.requestImportAudio()
159166
}
167+
imgui.SameLine()
168+
if imgui.Button("Clear") {
169+
view.requestClearAudio()
170+
}
171+
imgui.PopID()
160172
}
161173
imgui.Separator()
162174

@@ -214,7 +226,7 @@ func (view *View) renderContent() {
214226
if mailType < len(knownMailTypes) {
215227
selectedType = knownMailTypes[mailType]
216228
}
217-
if readOnly {
229+
if msgReadOnly {
218230
imgui.LabelText("Mail Type", selectedType)
219231
} else if imgui.BeginCombo("Mail Type", selectedType) {
220232
for typeIndex, typeString := range knownMailTypes {
@@ -292,13 +304,15 @@ func (view View) hasAudio() bool {
292304
return (view.model.currentKey.ID == ids.MailsStart) || (view.model.currentKey.ID == ids.LogsStart)
293305
}
294306

295-
func (view *View) currentSound() (sound audio.L8) {
307+
func (view *View) currentSound() (audio.L8, bool) {
296308
if view.hasAudio() {
297309
key := view.model.currentKey
298310
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
300314
}
301-
return
315+
return audio.L8{}, true
302316
}
303317

304318
func (view View) messageOf(key resource.Key) text.ElectronicMessage {
@@ -377,22 +391,35 @@ func (view *View) requestExportAudio(sound audio.L8) {
377391
external.ExportAudio(view.modalStateMachine, filename, sound)
378392
}
379393

394+
func (view *View) requestRemoveAudio() {
395+
view.requestAudioChange(nil)
396+
}
397+
380398
func (view *View) requestImportAudio() {
381399
external.ImportAudio(view.modalStateMachine, func(sound audio.L8) {
382400
movieData := movie.ContainSoundData(sound)
383401
view.requestAudioChange(movieData)
384402
})
385403
}
386404

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())
389416
}
390417

391-
func (view *View) requestRemove() {
392-
view.requestWipe(nil)
418+
func (view *View) requestRemoveAll() {
419+
view.requestWipe(nil, nil)
393420
}
394421

395-
func (view *View) requestWipe(newTextData [][]byte) {
422+
func (view *View) requestWipe(newTextData [][]byte, newAudioData []byte) {
396423
textEntries := make(map[resource.Language]messageDataEntry)
397424
audioEntries := make(map[resource.Language]messageDataEntry)
398425
textID := view.model.currentKey.ID.Plus(view.model.currentKey.Index)
@@ -404,7 +431,7 @@ func (view *View) requestWipe(newTextData [][]byte) {
404431
if view.hasAudio() {
405432
audioEntries[lang] = messageDataEntry{
406433
oldData: view.mod.ModifiedBlocks(lang, textID.Plus(300)),
407-
newData: nil,
434+
newData: [][]byte{newAudioData},
408435
}
409436
}
410437
}

0 commit comments

Comments
 (0)