UI: Unify output record paths across setting dialogs

It seems more intuitive if the recording paths for the Simple
Output, Advanced Default Output and Advanced FFmpeg Output are
linked together, so that the user does not have to manage three
paths if switching between the different options.

The UI elements are also connected so that a change to one
signals a change to the others with the corresponding config
setting.
master
Charles Ray Shisler III 2016-02-24 04:10:32 -08:00
parent 80fffeb144
commit 911f2df130
2 changed files with 32 additions and 7 deletions

View File

@ -241,6 +241,9 @@ void OBSBasicSettings::HookWidget(QWidget *widget, const char *signal,
#define VIDEO_CHANGED SLOT(VideoChanged())
#define ADV_CHANGED SLOT(AdvancedChanged())
#define ADV_RESTART SLOT(AdvancedChangedRestart())
#define S_PATH_CHANGED SLOT(SimplePathChanged())
#define A_PATH_CHANGED SLOT(AdvancedDefaultPathChanged())
#define FF_PATH_CHANGED SLOT(AdvancedFFPathChanged())
OBSBasicSettings::OBSBasicSettings(QWidget *parent)
: QDialog (parent),
@ -268,6 +271,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->outputMode, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->streamType, COMBO_CHANGED, STREAM1_CHANGED);
HookWidget(ui->simpleOutputPath, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutputPath, EDIT_CHANGED, S_PATH_CHANGED);
HookWidget(ui->simpleNoSpace, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutRecFormat, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutputVBitrate, SCROLL_CHANGED, OUTPUTS_CHANGED);
@ -288,6 +292,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->advOutApplyService, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecType, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecPath, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecPath, EDIT_CHANGED, A_PATH_CHANGED);
HookWidget(ui->advOutNoSpace, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecFormat, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecEncoder, COMBO_CHANGED, OUTPUTS_CHANGED);
@ -300,6 +305,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->advOutRecTrack4, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutFFType, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutFFRecPath, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutFFRecPath, EDIT_CHANGED, FF_PATH_CHANGED);
HookWidget(ui->advOutFFNoSpace, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutFFURL, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutFFFormat, COMBO_CHANGED, OUTPUTS_CHANGED);
@ -1187,8 +1193,8 @@ void OBSBasicSettings::LoadAdvOutputRecordingSettings()
"RecType");
const char *format = config_get_string(main->Config(), "AdvOut",
"RecFormat");
const char *path = config_get_string(main->Config(), "AdvOut",
"RecFilePath");
const char *path = config_get_string(main->Config(), "SimpleOutput",
"FilePath");
bool noSpace = config_get_bool(main->Config(), "AdvOut",
"RecFileNameWithoutSpace");
bool rescale = config_get_bool(main->Config(), "AdvOut",
@ -1262,8 +1268,8 @@ void OBSBasicSettings::LoadAdvOutputFFmpegSettings()
{
bool saveFile = config_get_bool(main->Config(), "AdvOut",
"FFOutputToFile");
const char *path = config_get_string(main->Config(), "AdvOut",
"FFFilePath");
const char *path = config_get_string(main->Config(), "SimpleOutput",
"FilePath");
bool noSpace = config_get_bool(main->Config(), "AdvOut",
"FFFileNameWithoutSpace");
const char *url = config_get_string(main->Config(), "AdvOut", "FFURL");
@ -2236,7 +2242,6 @@ void OBSBasicSettings::SaveOutputSettings()
config_set_string(main->Config(), "AdvOut", "RecType",
RecTypeFromIdx(ui->advOutRecType->currentIndex()));
SaveEdit(ui->advOutRecPath, "AdvOut", "RecFilePath");
SaveCheckBox(ui->advOutNoSpace, "AdvOut", "RecFileNameWithoutSpace");
SaveCombo(ui->advOutRecFormat, "AdvOut", "RecFormat");
SaveComboData(ui->advOutRecEncoder, "AdvOut", "RecEncoder");
@ -2252,7 +2257,6 @@ void OBSBasicSettings::SaveOutputSettings()
config_set_bool(main->Config(), "AdvOut", "FFOutputToFile",
ui->advOutFFType->currentIndex() == 0 ? true : false);
SaveEdit(ui->advOutFFRecPath, "AdvOut", "FFFilePath");
SaveCheckBox(ui->advOutFFNoSpace, "AdvOut", "FFFileNameWithoutSpace");
SaveEdit(ui->advOutFFURL, "AdvOut", "FFURL");
SaveFormat(ui->advOutFFFormat);
@ -2551,7 +2555,7 @@ void OBSBasicSettings::on_advOutFFPathBrowse_clicked()
{
QString dir = QFileDialog::getExistingDirectory(this,
QTStr("Basic.Settings.Output.SelectDirectory"),
ui->advOutRecPath->text(),
ui->advOutFFRecPath->text(),
QFileDialog::ShowDirsOnly |
QFileDialog::DontResolveSymlinks);
if (dir.isEmpty())
@ -2779,6 +2783,24 @@ void OBSBasicSettings::AdvancedChangedRestart()
}
}
void OBSBasicSettings::SimplePathChanged()
{
ui->advOutRecPath->setText(ui->simpleOutputPath->text());
ui->advOutFFRecPath->setText(ui->simpleOutputPath->text());
}
void OBSBasicSettings::AdvancedDefaultPathChanged()
{
ui->simpleOutputPath->setText(ui->advOutRecPath->text());
ui->advOutFFRecPath->setText(ui->advOutRecPath->text());
}
void OBSBasicSettings::AdvancedFFPathChanged()
{
ui->simpleOutputPath->setText(ui->advOutFFRecPath->text());
ui->advOutRecPath->setText(ui->advOutFFRecPath->text());
}
void OBSBasicSettings::VideoChangedResolution()
{
if (!loading && ValidResolutions(ui.get())) {

View File

@ -271,6 +271,9 @@ private slots:
void ReloadHotkeys(obs_hotkey_id ignoreKey=OBS_INVALID_HOTKEY_ID);
void AdvancedChanged();
void AdvancedChangedRestart();
void SimplePathChanged();
void AdvancedDefaultPathChanged();
void AdvancedFFPathChanged();
void UpdateStreamDelayEstimate();