Reset DVD locks when returning to non-DVD

This commit is contained in:
Stu Leak 2026-01-04 15:43:55 -05:00
parent 630b220963
commit 943d3433ea

96
main.go
View File

@ -8519,22 +8519,13 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
} }
encodingHint.SetText(hint) encodingHint.SetText(hint)
if qualitySectionSimple != nil {
if showCRF && !strings.Contains(strings.ToLower(state.convert.SelectedFormat.Label), "h.265") && // Let updateQualityVisibility() handle showing/hiding quality sections
!strings.EqualFold(state.convert.VideoCodec, "H.265") { // to avoid duplicate logic and conflicts
qualitySectionSimple.Show() if updateQualityVisibility != nil {
} else { updateQualityVisibility()
qualitySectionSimple.Hide()
}
}
if qualitySectionAdv != nil {
if showCRF && !strings.Contains(strings.ToLower(state.convert.SelectedFormat.Label), "h.265") &&
!strings.EqualFold(state.convert.VideoCodec, "H.265") {
qualitySectionAdv.Show()
} else {
qualitySectionAdv.Hide()
}
} }
if buildCommandPreview != nil { if buildCommandPreview != nil {
buildCommandPreview() buildCommandPreview()
} }
@ -8703,6 +8694,7 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
audioChannelsSelect.SetSelected(state.convert.AudioChannels) audioChannelsSelect.SetSelected(state.convert.AudioChannels)
// Now define updateDVDOptions with access to resolution and framerate selects // Now define updateDVDOptions with access to resolution and framerate selects
wasDVD := false
updateDVDOptions = func() { updateDVDOptions = func() {
// Clear locks by default so non-DVD formats remain flexible // Clear locks by default so non-DVD formats remain flexible
resolutionSelectSimple.Enable() resolutionSelectSimple.Enable()
@ -8728,6 +8720,20 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
isDVD := state.convert.SelectedFormat.Ext == ".mpg" isDVD := state.convert.SelectedFormat.Ext == ".mpg"
if isDVD { if isDVD {
if !strings.EqualFold(state.convert.TargetResolution, "NTSC (720×480)") &&
!strings.EqualFold(state.convert.TargetResolution, "PAL (720×540)") &&
!strings.EqualFold(state.convert.TargetResolution, "PAL (720×576)") {
state.convert.TargetResolution = "Source"
}
if !strings.EqualFold(state.convert.FrameRate, "29.97") &&
!strings.EqualFold(state.convert.FrameRate, "25") {
state.convert.FrameRate = "Source"
}
if !strings.EqualFold(state.convert.OutputAspect, "4:3") &&
!strings.EqualFold(state.convert.OutputAspect, "16:9") {
state.convert.OutputAspect = "Source"
state.convert.AspectUserSet = false
}
dvdAspectBox.Show() dvdAspectBox.Show()
var ( var (
@ -8838,6 +8844,21 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
dvdInfoLabel.SetText(fmt.Sprintf("%s\nLocked: resolution, frame rate, aspect, codec, pixel format, bitrate, and GPU toggles for DVD compliance.", dvdNotes)) dvdInfoLabel.SetText(fmt.Sprintf("%s\nLocked: resolution, frame rate, aspect, codec, pixel format, bitrate, and GPU toggles for DVD compliance.", dvdNotes))
} else { } else {
dvdAspectBox.Hide() dvdAspectBox.Hide()
// Reset DVD-locked values back to Source defaults when leaving DVD formats.
if wasDVD {
state.convert.TargetResolution = "Source"
state.convert.FrameRate = "Source"
state.convert.OutputAspect = "Source"
state.convert.AspectUserSet = false
resolutionSelectSimple.SetSelected("Source")
resolutionSelect.SetSelected("Source")
frameRateSelect.SetSelected("Source")
targetAspectSelectSimple.SetSelected("Source")
targetAspectSelect.SetSelected("Source")
if src != nil {
updateAspectBoxVisibility()
}
}
// Re-enable normal visibility control through updateEncodingControls // Re-enable normal visibility control through updateEncodingControls
bitratePresetSelect.Show() bitratePresetSelect.Show()
simpleBitrateSelect.Show() simpleBitrateSelect.Show()
@ -8845,6 +8866,7 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
updateEncodingControls() updateEncodingControls()
} }
} }
wasDVD = isDVD
} }
updateDVDOptions() updateDVDOptions()
@ -8856,29 +8878,32 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
widget.NewLabelWithStyle("Quality Preset", fyne.TextAlignLeading, fyne.TextStyle{Bold: true}), widget.NewLabelWithStyle("Quality Preset", fyne.TextAlignLeading, fyne.TextStyle{Bold: true}),
qualitySelectAdv, qualitySelectAdv,
) )
qualitySectionAdv.Hide()
updateQualityVisibility = func() { updateQualityVisibility = func() {
hide := strings.Contains(strings.ToLower(state.convert.SelectedFormat.Label), "h.265") || hide := strings.Contains(strings.ToLower(state.convert.SelectedFormat.Label), "h.265") ||
strings.EqualFold(state.convert.VideoCodec, "H.265") strings.EqualFold(state.convert.VideoCodec, "H.265")
mode := normalizeBitrateMode(state.convert.BitrateMode) mode := normalizeBitrateMode(state.convert.BitrateMode)
hideQuality := mode != "" && mode != "CRF" hideQuality := mode != "" && mode != "CRF"
remux := strings.EqualFold(state.convert.SelectedFormat.VideoCodec, "copy") ||
strings.EqualFold(state.convert.VideoCodec, "Copy")
if qualitySectionSimple != nil { if qualitySectionSimple != nil {
if hide || hideQuality { if hide || hideQuality || remux {
qualitySectionSimple.Hide() qualitySectionSimple.Hide()
} else { } else {
qualitySectionSimple.Show() qualitySectionSimple.Show()
} }
} }
if qualitySectionAdv != nil { if qualitySectionAdv != nil {
if hide || hideQuality { if hide || hideQuality || remux {
qualitySectionAdv.Hide() qualitySectionAdv.Hide()
} else { } else {
qualitySectionAdv.Show() qualitySectionAdv.Show()
} }
} }
} }
// Call updateQualityVisibility now that the sections are created
updateQualityVisibility()
updateRemuxVisibility = func() { updateRemuxVisibility = func() {
remux := strings.EqualFold(state.convert.SelectedFormat.VideoCodec, "copy") || remux := strings.EqualFold(state.convert.SelectedFormat.VideoCodec, "copy") ||
@ -8907,12 +8932,11 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
audioCodecSelect.Enable() audioCodecSelect.Enable()
} }
} }
if qualitySectionAdv != nil {
if remux { // Don't directly show/hide quality sections here - let updateQualityVisibility handle it
qualitySectionAdv.Hide() // based on both remux state AND bitrate mode
} else { if updateQualityVisibility != nil {
qualitySectionAdv.Show() updateQualityVisibility()
}
} }
if encoderPresetSelect != nil { if encoderPresetSelect != nil {
if remux { if remux {
@ -8928,26 +8952,10 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
bitrateModeSelect.Enable() bitrateModeSelect.Enable()
} }
} }
if crfContainer != nil { // Don't show/hide encoding containers here - let updateEncodingControls handle it
if remux { // based on the selected bitrate mode (CRF/CBR/VBR/Target Size)
crfContainer.Hide() if updateEncodingControls != nil {
} else { updateEncodingControls()
crfContainer.Show()
}
}
if bitrateContainer != nil {
if remux {
bitrateContainer.Hide()
} else {
bitrateContainer.Show()
}
}
if targetSizeContainer != nil {
if remux {
targetSizeContainer.Hide()
} else {
targetSizeContainer.Show()
}
} }
if encodingHintContainer != nil { if encodingHintContainer != nil {
if remux { if remux {