Add thumbnail generation and Clear All button to Compare
Fixed thumbnails not displaying: - Added preview frame generation to Compare module - Thumbnails now load asynchronously when videos are loaded - Uses capturePreviewFrames() just like Convert module - Thumbnails appear after brief generation delay Added Clear All button: - Positioned to the right of instructions text - Clears both File 1 and File 2 slots - Refreshes view to show empty state - Low importance styling (not highlighted) Layout improvements: - Instructions row now uses Border layout - Clear All button aligned to the right - Clean, accessible button placement Both videos now show thumbnails (240x135) automatically when loaded, providing visual confirmation of loaded content.
This commit is contained in:
parent
653e6721da
commit
815319b3f5
31
main.go
31
main.go
|
|
@ -5374,6 +5374,16 @@ func buildCompareView(state *appState) fyne.CanvasObject {
|
||||||
instructions.Wrapping = fyne.TextWrapWord
|
instructions.Wrapping = fyne.TextWrapWord
|
||||||
instructions.Alignment = fyne.TextAlignCenter
|
instructions.Alignment = fyne.TextAlignCenter
|
||||||
|
|
||||||
|
// Clear All button
|
||||||
|
clearAllBtn := widget.NewButton("Clear All", func() {
|
||||||
|
state.compareFile1 = nil
|
||||||
|
state.compareFile2 = nil
|
||||||
|
state.showCompareView()
|
||||||
|
})
|
||||||
|
clearAllBtn.Importance = widget.LowImportance
|
||||||
|
|
||||||
|
instructionsRow := container.NewBorder(nil, nil, nil, clearAllBtn, instructions)
|
||||||
|
|
||||||
// File labels
|
// File labels
|
||||||
file1Label := widget.NewLabel("File 1: Not loaded")
|
file1Label := widget.NewLabel("File 1: Not loaded")
|
||||||
file1Label.TextStyle = fyne.TextStyle{Bold: true}
|
file1Label.TextStyle = fyne.TextStyle{Bold: true}
|
||||||
|
|
@ -5468,7 +5478,24 @@ func buildCompareView(state *appState) fyne.CanvasObject {
|
||||||
|
|
||||||
// Helper to load thumbnail for a video
|
// Helper to load thumbnail for a video
|
||||||
loadThumbnail := func(src *videoSource, img *canvas.Image) {
|
loadThumbnail := func(src *videoSource, img *canvas.Image) {
|
||||||
if src == nil || len(src.PreviewFrames) == 0 {
|
if src == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Generate preview frames if not already present
|
||||||
|
if len(src.PreviewFrames) == 0 {
|
||||||
|
go func() {
|
||||||
|
if thumb, err := capturePreviewFrames(src.Path, src.Duration); err == nil && len(thumb) > 0 {
|
||||||
|
src.PreviewFrames = thumb
|
||||||
|
// Update thumbnail on UI thread
|
||||||
|
fyne.CurrentApp().Driver().DoFromGoroutine(func() {
|
||||||
|
thumbImg := canvas.NewImageFromFile(src.PreviewFrames[0])
|
||||||
|
if thumbImg.Image != nil {
|
||||||
|
img.Image = thumbImg.Image
|
||||||
|
img.Refresh()
|
||||||
|
}
|
||||||
|
}, false)
|
||||||
|
}
|
||||||
|
}()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Load the first preview frame as thumbnail
|
// Load the first preview frame as thumbnail
|
||||||
|
|
@ -5659,7 +5686,7 @@ func buildCompareView(state *appState) fyne.CanvasObject {
|
||||||
|
|
||||||
// Main content: instructions at top, then two columns side by side
|
// Main content: instructions at top, then two columns side by side
|
||||||
content := container.NewBorder(
|
content := container.NewBorder(
|
||||||
container.NewVBox(instructions, widget.NewSeparator()),
|
container.NewVBox(instructionsRow, widget.NewSeparator()),
|
||||||
nil, nil, nil,
|
nil, nil, nil,
|
||||||
container.NewGridWithColumns(2, file1Column, file2Column),
|
container.NewGridWithColumns(2, file1Column, file2Column),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user