mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-05-19 05:51:16 -04:00
UI: Make service settings use OK/Apply/Cancel
Currently service settings are updated in real time via the properties view, which means that OK/Cancel/Apply have no effect. This fixes that by using the new type of properties view that operates only on settings data, not an object.
This commit is contained in:
@@ -114,6 +114,7 @@ void OBSBasicSettings::HookWidget(QWidget *widget, const char *signal,
|
||||
#define SCROLL_CHANGED SIGNAL(valueChanged(int))
|
||||
|
||||
#define GENERAL_CHANGED SLOT(GeneralChanged())
|
||||
#define STREAM1_CHANGED SLOT(Stream1Changed())
|
||||
#define OUTPUTS_CHANGED SLOT(OutputsChanged())
|
||||
#define AUDIO_RESTART SLOT(AudioChangedRestart())
|
||||
#define AUDIO_CHANGED SLOT(AudioChanged())
|
||||
@@ -132,6 +133,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
|
||||
|
||||
HookWidget(ui->language, COMBO_CHANGED, GENERAL_CHANGED);
|
||||
HookWidget(ui->outputMode, COMBO_CHANGED, OUTPUTS_CHANGED);
|
||||
HookWidget(ui->streamType, COMBO_CHANGED, STREAM1_CHANGED);
|
||||
HookWidget(ui->simpleOutputPath, EDIT_CHANGED, OUTPUTS_CHANGED);
|
||||
HookWidget(ui->simpleOutputVBitrate, SCROLL_CHANGED, OUTPUTS_CHANGED);
|
||||
HookWidget(ui->simpleOutputABitrate, COMBO_CHANGED, OUTPUTS_CHANGED);
|
||||
@@ -207,7 +209,6 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
|
||||
EnableApplyButton(false);
|
||||
|
||||
LoadServiceTypes();
|
||||
LoadServiceInfo();
|
||||
LoadEncoderTypes();
|
||||
LoadSettings(false);
|
||||
}
|
||||
@@ -273,23 +274,6 @@ void OBSBasicSettings::LoadServiceTypes()
|
||||
SetComboByValue(ui->streamType, type);
|
||||
}
|
||||
|
||||
void OBSBasicSettings::LoadServiceInfo()
|
||||
{
|
||||
QLayout *layout = ui->streamContainer->layout();
|
||||
obs_service_t *service = main->GetService();
|
||||
obs_data_t *settings = obs_service_get_settings(service);
|
||||
|
||||
delete streamProperties;
|
||||
streamProperties = new OBSPropertiesView(settings, service,
|
||||
(PropertiesReloadCallback)obs_service_properties,
|
||||
(PropertiesUpdateCallback)obs_service_update,
|
||||
170);
|
||||
|
||||
layout->addWidget(streamProperties);
|
||||
|
||||
obs_data_release(settings);
|
||||
}
|
||||
|
||||
#define TEXT_USE_STREAM_ENC \
|
||||
QTStr("Basic.Settings.Output.Adv.Recording.UseStreamEncoder")
|
||||
|
||||
@@ -343,6 +327,37 @@ void OBSBasicSettings::LoadGeneralSettings()
|
||||
loading = false;
|
||||
}
|
||||
|
||||
void OBSBasicSettings::LoadStream1Settings()
|
||||
{
|
||||
QLayout *layout = ui->streamContainer->layout();
|
||||
obs_service_t *service = main->GetService();
|
||||
const char *type = obs_service_gettype(service);
|
||||
|
||||
loading = true;
|
||||
|
||||
obs_data_t *settings = obs_service_get_settings(service);
|
||||
|
||||
delete streamProperties;
|
||||
streamProperties = new OBSPropertiesView(settings, type,
|
||||
(PropertiesReloadCallback)obs_get_service_properties,
|
||||
170);
|
||||
|
||||
streamProperties->setProperty("changed", QVariant(false));
|
||||
layout->addWidget(streamProperties);
|
||||
|
||||
QObject::connect(streamProperties, SIGNAL(Changed()),
|
||||
this, STREAM1_CHANGED);
|
||||
|
||||
obs_data_release(settings);
|
||||
|
||||
loading = false;
|
||||
|
||||
if (main->StreamingActive()) {
|
||||
ui->streamType->setEnabled(false);
|
||||
ui->streamContainer->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void OBSBasicSettings::LoadRendererList()
|
||||
{
|
||||
const char *renderer = config_get_string(GetGlobalConfig(), "Video",
|
||||
@@ -893,6 +908,8 @@ void OBSBasicSettings::LoadSettings(bool changedOnly)
|
||||
{
|
||||
if (!changedOnly || generalChanged)
|
||||
LoadGeneralSettings();
|
||||
if (!changedOnly || stream1Changed)
|
||||
LoadStream1Settings();
|
||||
if (!changedOnly || outputsChanged)
|
||||
LoadOutputSettings();
|
||||
if (!changedOnly || audioChanged)
|
||||
@@ -912,6 +929,19 @@ void OBSBasicSettings::SaveGeneralSettings()
|
||||
language.c_str());
|
||||
}
|
||||
|
||||
void OBSBasicSettings::SaveStream1Settings()
|
||||
{
|
||||
QString streamType = GetComboData(ui->streamType);
|
||||
|
||||
obs_service_t *newService = obs_service_create(QT_TO_UTF8(streamType),
|
||||
"default_service", streamProperties->GetSettings());
|
||||
if (!newService)
|
||||
return;
|
||||
|
||||
main->SetService(newService);
|
||||
main->SaveService();
|
||||
}
|
||||
|
||||
void OBSBasicSettings::SaveVideoSettings()
|
||||
{
|
||||
QString baseResolution = ui->baseResolution->currentText();
|
||||
@@ -1102,6 +1132,8 @@ void OBSBasicSettings::SaveSettings()
|
||||
{
|
||||
if (generalChanged)
|
||||
SaveGeneralSettings();
|
||||
if (stream1Changed)
|
||||
SaveStream1Settings();
|
||||
if (outputsChanged)
|
||||
SaveOutputSettings();
|
||||
if (audioChanged)
|
||||
@@ -1182,20 +1214,26 @@ void OBSBasicSettings::on_buttonBox_clicked(QAbstractButton *button)
|
||||
|
||||
void OBSBasicSettings::on_streamType_currentIndexChanged(int idx)
|
||||
{
|
||||
QString val = ui->streamType->itemData(idx).toString();
|
||||
obs_service_t *newService;
|
||||
|
||||
if (loading)
|
||||
return;
|
||||
|
||||
QLayout *layout = ui->streamContainer->layout();
|
||||
QString streamType = ui->streamType->itemData(idx).toString();
|
||||
obs_data_t *settings = obs_service_defaults(QT_TO_UTF8(streamType));
|
||||
|
||||
delete streamProperties;
|
||||
streamProperties = nullptr;
|
||||
streamProperties = new OBSPropertiesView(settings,
|
||||
QT_TO_UTF8(streamType),
|
||||
(PropertiesReloadCallback)obs_get_service_properties,
|
||||
170);
|
||||
|
||||
newService = obs_service_create(QT_TO_UTF8(val), nullptr, nullptr);
|
||||
if (newService)
|
||||
main->SetService(newService);
|
||||
streamProperties->setProperty("changed", QVariant(true));
|
||||
layout->addWidget(streamProperties);
|
||||
|
||||
LoadServiceInfo();
|
||||
QObject::connect(streamProperties, SIGNAL(Changed()),
|
||||
this, STREAM1_CHANGED);
|
||||
|
||||
obs_data_release(settings);
|
||||
}
|
||||
|
||||
void OBSBasicSettings::on_simpleOutputBrowse_clicked()
|
||||
@@ -1266,11 +1304,6 @@ void OBSBasicSettings::on_advOutRecEncoder_currentIndexChanged(int idx)
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool StreamExists(const char *name)
|
||||
{
|
||||
return obs_get_service_by_name(name) != nullptr;
|
||||
}
|
||||
|
||||
#define INVALID_RES_STR "Basic.Settings.Video.InvalidResolution"
|
||||
|
||||
static bool ValidResolutions(Ui::OBSBasicSettings *ui)
|
||||
@@ -1310,6 +1343,15 @@ void OBSBasicSettings::GeneralChanged()
|
||||
}
|
||||
}
|
||||
|
||||
void OBSBasicSettings::Stream1Changed()
|
||||
{
|
||||
if (!loading) {
|
||||
stream1Changed = true;
|
||||
sender()->setProperty("changed", QVariant(true));
|
||||
EnableApplyButton(true);
|
||||
}
|
||||
}
|
||||
|
||||
void OBSBasicSettings::OutputsChanged()
|
||||
{
|
||||
if (!loading) {
|
||||
|
||||
Reference in New Issue
Block a user