UI: Disallow closing settings without selected codec or format

This commit is contained in:
gxalpha 2023-03-28 03:39:15 +02:00 committed by Jim
parent 60139cbdfe
commit 2f2fc33f91
3 changed files with 49 additions and 0 deletions

View file

@ -1335,6 +1335,10 @@ OutputWarnings.CodecIncompatible="The audio or video encoder selection was reset
CodecCompat.Incompatible="(Incompatible with %1)"
CodecCompat.CodecPlaceholder="Select Encoder..."
CodecCompat.ContainerPlaceholder="Select Format..."
CodecCompat.CodecMissingOnExit.Title="No Encoder Selected"
CodecCompat.CodecMissingOnExit.Text="At least one video or audio encoder is not set. Please make sure to select encoders for both recording and streaming."
CodecCompat.ContainerMissingOnExit.Title="No Format Selected"
CodecCompat.ContainerMissingOnExit.Text="No recording format has been selected. Please select a recording format that is compatible with the selected stream encoder."
# deleting final scene
FinalScene.Title="Delete Scene"

View file

@ -4197,6 +4197,9 @@ bool OBSBasicSettings::QueryChanges()
if (button == QMessageBox::Cancel) {
return false;
} else if (button == QMessageBox::Yes) {
if (!QueryAllowedToClose())
return false;
SaveSettings();
} else {
if (savedTheme != App()->GetTheme())
@ -4210,6 +4213,44 @@ bool OBSBasicSettings::QueryChanges()
return true;
}
bool OBSBasicSettings::QueryAllowedToClose()
{
bool simple = (ui->outputMode->currentIndex() == 0);
bool invalidEncoder = false;
bool invalidFormat = false;
if (simple) {
if (ui->simpleOutRecEncoder->currentIndex() == -1 ||
ui->simpleOutStrEncoder->currentIndex() == -1 ||
ui->simpleOutRecAEncoder->currentIndex() == -1 ||
ui->simpleOutStrAEncoder->currentIndex() == -1)
invalidEncoder = true;
if (ui->simpleOutRecFormat->currentIndex() == -1)
invalidFormat = true;
} else {
if (ui->advOutRecEncoder->currentIndex() == -1 ||
ui->advOutEncoder->currentIndex() == -1 ||
ui->advOutRecAEncoder->currentIndex() == -1 ||
ui->advOutAEncoder->currentIndex() == -1)
invalidEncoder = true;
}
if (invalidEncoder) {
OBSMessageBox::warning(
this, QTStr("CodecCompat.CodecMissingOnExit.Title"),
QTStr("CodecCompat.CodecMissingOnExit.Text"));
return false;
} else if (invalidFormat) {
OBSMessageBox::warning(
this, QTStr("CodecCompat.ContainerMissingOnExit.Title"),
QTStr("CodecCompat.ContainerMissingOnExit.Text"));
return false;
}
return true;
}
void OBSBasicSettings::closeEvent(QCloseEvent *event)
{
if (!AskIfCanCloseSettings())
@ -4259,6 +4300,9 @@ void OBSBasicSettings::on_buttonBox_clicked(QAbstractButton *button)
if (val == QDialogButtonBox::ApplyRole ||
val == QDialogButtonBox::AcceptRole) {
if (!QueryAllowedToClose())
return;
SaveSettings();
ClearChanged();
}

View file

@ -224,6 +224,7 @@ private:
void HookWidget(QWidget *widget, const char *signal, const char *slot);
bool QueryChanges();
bool QueryAllowedToClose();
void ResetEncoders(bool streamOnly = false);
void LoadColorRanges();