Add clear video control in metadata panel

This commit is contained in:
Stu 2025-11-21 16:15:31 -05:00
parent 4c78314676
commit f7a7246301

31
main.go
View File

@ -564,7 +564,7 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
} }
videoPanel := buildVideoPane(state, fyne.NewSize(520, 300), src, updateCover) videoPanel := buildVideoPane(state, fyne.NewSize(520, 300), src, updateCover)
metaPanel := buildMetadataPanel(src, fyne.NewSize(520, 160)) metaPanel := buildMetadataPanel(state, src, fyne.NewSize(520, 160))
modeToggle := widget.NewRadioGroup([]string{"Simple", "Advanced"}, func(value string) { modeToggle := widget.NewRadioGroup([]string{"Simple", "Advanced"}, func(value string) {
debugLog(logCatUI, "convert mode selected: %s", value) debugLog(logCatUI, "convert mode selected: %s", value)
@ -793,7 +793,7 @@ func tintedBar(col color.Color, body fyne.CanvasObject) fyne.CanvasObject {
return container.NewMax(rect, padded) return container.NewMax(rect, padded)
} }
func buildMetadataPanel(src *videoSource, min fyne.Size) fyne.CanvasObject { func buildMetadataPanel(state *appState, src *videoSource, min fyne.Size) fyne.CanvasObject {
outer := canvas.NewRectangle(mustHex("#191F35")) outer := canvas.NewRectangle(mustHex("#191F35"))
outer.CornerRadius = 8 outer.CornerRadius = 8
outer.StrokeColor = gridColor outer.StrokeColor = gridColor
@ -801,10 +801,11 @@ func buildMetadataPanel(src *videoSource, min fyne.Size) fyne.CanvasObject {
outer.SetMinSize(min) outer.SetMinSize(min)
header := widget.NewLabelWithStyle("Metadata", fyne.TextAlignLeading, fyne.TextStyle{Bold: true}) header := widget.NewLabelWithStyle("Metadata", fyne.TextAlignLeading, fyne.TextStyle{Bold: true})
var top fyne.CanvasObject = header
if src == nil { if src == nil {
body := container.NewVBox( body := container.NewVBox(
header, top,
widget.NewSeparator(), widget.NewSeparator(),
widget.NewLabel("Load a clip to inspect its technical details."), widget.NewLabel("Load a clip to inspect its technical details."),
layout.NewSpacer(), layout.NewSpacer(),
@ -837,8 +838,17 @@ func buildMetadataPanel(src *videoSource, min fyne.Size) fyne.CanvasObject {
} }
} }
// Clear button to remove the loaded video and reset UI.
clearBtn := widget.NewButton("Clear Video", func() {
if state != nil {
state.clearVideo()
}
})
clearBtn.Importance = widget.LowImportance
top = container.NewBorder(nil, nil, nil, clearBtn, header)
body := container.NewVBox( body := container.NewVBox(
header, top,
widget.NewSeparator(), widget.NewSeparator(),
info, info,
) )
@ -1638,6 +1648,19 @@ func (s *appState) loadVideo(path string) {
s.showConvertView(src) s.showConvertView(src)
}, false) }, false)
} }
func (s *appState) clearVideo() {
debugLog(logCatModule, "clearing loaded video")
s.stopPlayer()
s.source = nil
s.currentFrame = ""
s.convert.OutputBase = "converted"
s.convert.CoverArtPath = ""
s.convert.AspectHandling = "Auto"
fyne.CurrentApp().Driver().DoFromGoroutine(func() {
s.showConvertView(nil)
}, false)
}
func (s *appState) generateSnippet() { func (s *appState) generateSnippet() {
if s.source == nil { if s.source == nil {
return return