Rearrange snippet controls with options toggle

This commit is contained in:
Stu Leak 2025-12-20 16:36:45 -05:00
parent e39b6a7f99
commit 66346d8cee
3 changed files with 25 additions and 28 deletions

View File

@ -831,8 +831,7 @@ This file tracks completed features, fixes, and milestones.
- ✅ Default bitrate preset normalized to 2.5 Mbps to avoid "select one" - ✅ Default bitrate preset normalized to 2.5 Mbps to avoid "select one"
- ✅ Linked simple and advanced bitrate presets so they stay in sync - ✅ Linked simple and advanced bitrate presets so they stay in sync
- ✅ Hide quality presets when bitrate mode is not CRF - ✅ Hide quality presets when bitrate mode is not CRF
- ✅ Collapsed snippet tools behind a toggle in the convert footer - ✅ Snippet UI now shows Convert Snippet + batch + options with context-sensitive controls
- ✅ Fixed snippet toggle button scope to avoid build error
- ✅ Stabilized video seeking and embedded rendering - ✅ Stabilized video seeking and embedded rendering
- ✅ Improved player window positioning - ✅ Improved player window positioning
- ✅ Fixed clear video functionality - ✅ Fixed clear video functionality

View File

@ -64,8 +64,7 @@ This file tracks upcoming features, improvements, and known issues.
- Default bitrate preset normalized to 2.5 Mbps to prevent empty select - Default bitrate preset normalized to 2.5 Mbps to prevent empty select
- Simple/advanced bitrate presets synced - Simple/advanced bitrate presets synced
- Quality presets hidden when bitrate mode is not CRF - Quality presets hidden when bitrate mode is not CRF
- Snippet tools collapsed behind a toggle to reduce footer clutter - Snippet UI rearranged into Convert Snippet / Batch / Options with context-sensitive visibility
- Snippet toggle scope fixed to eliminate build error
*Last Updated: 2025-12-20* *Last Updated: 2025-12-20*

47
main.go
View File

@ -7228,30 +7228,29 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
snippetHint := widget.NewLabel("Creates a clip centred on the timeline midpoint.") snippetHint := widget.NewLabel("Creates a clip centred on the timeline midpoint.")
var snippetRow fyne.CanvasObject snippetConfigRow.Hide()
if snippetAllBtn != nil { snippetOptionsVisible := false
snippetRow = container.NewHBox(snippetBtn, snippetAllBtn, layout.NewSpacer(), snippetHint) var snippetOptionsBtn *widget.Button
} else { snippetOptionsBtn = widget.NewButton("Convert Options", func() {
snippetRow = container.NewHBox(snippetBtn, layout.NewSpacer(), snippetHint) if snippetOptionsVisible {
snippetConfigRow.Hide()
snippetOptionsBtn.SetText("Convert Options")
} else {
snippetConfigRow.Show()
snippetOptionsBtn.SetText("Hide Options")
}
snippetOptionsVisible = !snippetOptionsVisible
})
snippetOptionsBtn.Importance = widget.LowImportance
if src == nil {
snippetOptionsBtn.Disable()
} }
snippetTools := container.NewVBox(snippetConfigRow, snippetRow) var snippetRow fyne.CanvasObject
snippetTools.Hide() if snippetAllBtn != nil {
snippetToolsVisible := false snippetRow = container.NewHBox(snippetBtn, snippetAllBtn, snippetOptionsBtn, layout.NewSpacer(), snippetHint)
var snippetToggleBtn *widget.Button } else {
snippetToggleBtn = widget.NewButton("Show Snippet Tools", func() { snippetRow = container.NewHBox(snippetBtn, snippetOptionsBtn, layout.NewSpacer(), snippetHint)
if snippetToolsVisible {
snippetTools.Hide()
snippetToggleBtn.SetText("Show Snippet Tools")
} else {
snippetTools.Show()
snippetToggleBtn.SetText("Hide Snippet Tools")
}
snippetToolsVisible = !snippetToolsVisible
})
snippetToggleBtn.Importance = widget.LowImportance
if src == nil {
snippetToggleBtn.Disable()
} }
// Stack video and metadata directly so metadata sits immediately under the player. // Stack video and metadata directly so metadata sits immediately under the player.
@ -7577,8 +7576,8 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
// Build footer sections // Build footer sections
footerSections := []fyne.CanvasObject{ footerSections := []fyne.CanvasObject{
snippetToggleBtn, snippetRow,
snippetTools, snippetConfigRow,
widget.NewSeparator(), widget.NewSeparator(),
} }
if commandPreviewRow != nil && state.convertCommandPreviewShow { if commandPreviewRow != nil && state.convertCommandPreviewShow {