UI: Disallow exiting settings with no track in simple mode

This commit is contained in:
gxalpha 2023-05-12 18:01:00 +02:00 committed by Ryan Foster
parent 63e0bff5e6
commit 2bc368349f
3 changed files with 31 additions and 8 deletions

View file

@ -1323,6 +1323,8 @@ SceneItemHide="Hide '%1'"
# Output warnings # Output warnings
OutputWarnings.NoTracksSelected="You must select at least one track" OutputWarnings.NoTracksSelected="You must select at least one track"
OutputWarnings.NoTracksSelectedOnExit.Title="Output Settings Error"
OutputWarnings.NoTracksSelectedOnExit.Text="All outputs must have at least one audio track selected."
OutputWarnings.MP4Recording="Warning: Recordings saved to MP4/MOV will be unrecoverable if the file cannot be finalized (e.g. as a result of BSODs, power losses, etc.). If you want to record multiple audio tracks consider using MKV and remux the recording to MP4/MOV after it is finished (File → Remux Recordings)" OutputWarnings.MP4Recording="Warning: Recordings saved to MP4/MOV will be unrecoverable if the file cannot be finalized (e.g. as a result of BSODs, power losses, etc.). If you want to record multiple audio tracks consider using MKV and remux the recording to MP4/MOV after it is finished (File → Remux Recordings)"
OutputWarnings.CannotPause="Warning: Recordings cannot be paused if the recording encoder is set to \"(Use stream encoder)\"" OutputWarnings.CannotPause="Warning: Recordings cannot be paused if the recording encoder is set to \"(Use stream encoder)\""
OutputWarnings.CodecIncompatible="The audio or video encoder selection was reset due to incompatibility. Please select a compatible encoder from the list." OutputWarnings.CodecIncompatible="The audio or video encoder selection was reset due to incompatibility. Please select a compatible encoder from the list."

View file

@ -3853,14 +3853,8 @@ void OBSBasicSettings::SaveOutputSettings()
SaveCheckBox(ui->simpleReplayBuf, "SimpleOutput", "RecRB"); SaveCheckBox(ui->simpleReplayBuf, "SimpleOutput", "RecRB");
SaveSpinBox(ui->simpleRBSecMax, "SimpleOutput", "RecRBTime"); SaveSpinBox(ui->simpleRBSecMax, "SimpleOutput", "RecRBTime");
SaveSpinBox(ui->simpleRBMegsMax, "SimpleOutput", "RecRBSize"); SaveSpinBox(ui->simpleRBMegsMax, "SimpleOutput", "RecRBSize");
config_set_int( config_set_int(main->Config(), "SimpleOutput", "RecTracks",
main->Config(), "SimpleOutput", "RecTracks", SimpleOutGetSelectedAudioTracks());
(ui->simpleOutRecTrack1->isChecked() ? (1 << 0) : 0) |
(ui->simpleOutRecTrack2->isChecked() ? (1 << 1) : 0) |
(ui->simpleOutRecTrack3->isChecked() ? (1 << 2) : 0) |
(ui->simpleOutRecTrack4->isChecked() ? (1 << 3) : 0) |
(ui->simpleOutRecTrack5->isChecked() ? (1 << 4) : 0) |
(ui->simpleOutRecTrack6->isChecked() ? (1 << 5) : 0));
curAdvStreamEncoder = GetComboData(ui->advOutEncoder); curAdvStreamEncoder = GetComboData(ui->advOutEncoder);
@ -4219,6 +4213,7 @@ bool OBSBasicSettings::QueryAllowedToClose()
bool invalidEncoder = false; bool invalidEncoder = false;
bool invalidFormat = false; bool invalidFormat = false;
bool invalidTracks = false;
if (simple) { if (simple) {
if (ui->simpleOutRecEncoder->currentIndex() == -1 || if (ui->simpleOutRecEncoder->currentIndex() == -1 ||
ui->simpleOutStrEncoder->currentIndex() == -1 || ui->simpleOutStrEncoder->currentIndex() == -1 ||
@ -4228,6 +4223,14 @@ bool OBSBasicSettings::QueryAllowedToClose()
if (ui->simpleOutRecFormat->currentIndex() == -1) if (ui->simpleOutRecFormat->currentIndex() == -1)
invalidFormat = true; invalidFormat = true;
QString qual =
ui->simpleOutRecQuality->currentData().toString();
QString format =
ui->simpleOutRecFormat->currentData().toString();
if (SimpleOutGetSelectedAudioTracks() == 0 &&
qual != "Stream" && format != "flv")
invalidTracks = true;
} else { } else {
if (ui->advOutRecEncoder->currentIndex() == -1 || if (ui->advOutRecEncoder->currentIndex() == -1 ||
ui->advOutEncoder->currentIndex() == -1 || ui->advOutEncoder->currentIndex() == -1 ||
@ -4246,6 +4249,12 @@ bool OBSBasicSettings::QueryAllowedToClose()
this, QTStr("CodecCompat.ContainerMissingOnExit.Title"), this, QTStr("CodecCompat.ContainerMissingOnExit.Title"),
QTStr("CodecCompat.ContainerMissingOnExit.Text")); QTStr("CodecCompat.ContainerMissingOnExit.Text"));
return false; return false;
} else if (invalidTracks) {
OBSMessageBox::warning(
this,
QTStr("OutputWarnings.NoTracksSelectedOnExit.Title"),
QTStr("OutputWarnings.NoTracksSelectedOnExit.Text"));
return false;
} }
return true; return true;
@ -6157,6 +6166,17 @@ int OBSBasicSettings::CurrentFLVTrack()
return 0; return 0;
} }
int OBSBasicSettings::SimpleOutGetSelectedAudioTracks()
{
int tracks = (ui->simpleOutRecTrack1->isChecked() ? (1 << 0) : 0) |
(ui->simpleOutRecTrack2->isChecked() ? (1 << 1) : 0) |
(ui->simpleOutRecTrack3->isChecked() ? (1 << 2) : 0) |
(ui->simpleOutRecTrack4->isChecked() ? (1 << 3) : 0) |
(ui->simpleOutRecTrack5->isChecked() ? (1 << 4) : 0) |
(ui->simpleOutRecTrack6->isChecked() ? (1 << 5) : 0);
return tracks;
}
/* Using setEditable(true) on a QComboBox when there's a custom style in use /* Using setEditable(true) on a QComboBox when there's a custom style in use
* does not work properly, so instead completely recreate the widget, which * does not work properly, so instead completely recreate the widget, which
* seems to work fine. */ * seems to work fine. */

View file

@ -375,6 +375,7 @@ private:
QIcon GetAdvancedIcon() const; QIcon GetAdvancedIcon() const;
int CurrentFLVTrack(); int CurrentFLVTrack();
int SimpleOutGetSelectedAudioTracks();
OBSService GetStream1Service(); OBSService GetStream1Service();