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.master
parent
2ba5782fff
commit
69c6714090
|
@ -326,6 +326,11 @@ bool OBSBasic::LoadService()
|
|||
{
|
||||
const char *type;
|
||||
|
||||
if (service) {
|
||||
obs_service_destroy(service);
|
||||
service = nullptr;
|
||||
}
|
||||
|
||||
char serviceJsonPath[512];
|
||||
int ret = os_get_config_path(serviceJsonPath, sizeof(serviceJsonPath),
|
||||
SERVICE_PATH);
|
||||
|
@ -658,7 +663,6 @@ void OBSBasic::SaveProject()
|
|||
if (ret <= 0)
|
||||
return;
|
||||
|
||||
SaveService();
|
||||
Save(savePath);
|
||||
}
|
||||
|
||||
|
@ -1330,6 +1334,13 @@ void OBSBasic::SetService(obs_service_t *newService)
|
|||
}
|
||||
}
|
||||
|
||||
bool OBSBasic::StreamingActive()
|
||||
{
|
||||
if (!outputHandler)
|
||||
return false;
|
||||
return outputHandler->StreamingActive();
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
#define IS_WIN32 1
|
||||
#else
|
||||
|
@ -2237,8 +2248,6 @@ void OBSBasic::on_streamButton_clicked()
|
|||
if (outputHandler->StreamingActive()) {
|
||||
outputHandler->StopStreaming();
|
||||
} else {
|
||||
SaveService();
|
||||
|
||||
if (outputHandler->StartStreaming(service)) {
|
||||
ui->streamButton->setEnabled(false);
|
||||
ui->streamButton->setText(
|
||||
|
|
|
@ -99,9 +99,6 @@ private:
|
|||
void Save(const char *file);
|
||||
void Load(const char *file);
|
||||
|
||||
void SaveService();
|
||||
bool LoadService();
|
||||
|
||||
bool InitService();
|
||||
|
||||
bool InitBasicConfigDefaults();
|
||||
|
@ -192,6 +189,8 @@ public:
|
|||
obs_service_t *GetService();
|
||||
void SetService(obs_service_t *service);
|
||||
|
||||
bool StreamingActive();
|
||||
|
||||
int ResetVideo();
|
||||
bool ResetAudio();
|
||||
|
||||
|
@ -217,6 +216,9 @@ public:
|
|||
return os_cpu_usage_info_query(cpuUsageInfo);
|
||||
}
|
||||
|
||||
void SaveService();
|
||||
bool LoadService();
|
||||
|
||||
protected:
|
||||
virtual void closeEvent(QCloseEvent *event) override;
|
||||
virtual void changeEvent(QEvent *event) override;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -38,6 +38,7 @@ private:
|
|||
|
||||
std::unique_ptr<Ui::OBSBasicSettings> ui;
|
||||
bool generalChanged = false;
|
||||
bool stream1Changed = false;
|
||||
bool outputsChanged = false;
|
||||
bool audioChanged = false;
|
||||
bool videoChanged = false;
|
||||
|
@ -61,7 +62,7 @@ private:
|
|||
|
||||
inline bool Changed() const
|
||||
{
|
||||
return generalChanged || outputsChanged ||
|
||||
return generalChanged || outputsChanged || stream1Changed ||
|
||||
audioChanged || videoChanged;
|
||||
}
|
||||
|
||||
|
@ -73,6 +74,7 @@ private:
|
|||
inline void ClearChanged()
|
||||
{
|
||||
generalChanged = false;
|
||||
stream1Changed = false;
|
||||
outputsChanged = false;
|
||||
audioChanged = false;
|
||||
videoChanged = false;
|
||||
|
@ -84,10 +86,10 @@ private:
|
|||
bool QueryChanges();
|
||||
|
||||
void LoadServiceTypes();
|
||||
void LoadServiceInfo();
|
||||
void LoadEncoderTypes();
|
||||
|
||||
void LoadGeneralSettings();
|
||||
void LoadStream1Settings();
|
||||
void LoadOutputSettings();
|
||||
void LoadAudioSettings();
|
||||
void LoadVideoSettings();
|
||||
|
@ -121,6 +123,7 @@ private:
|
|||
void LoadFPSData();
|
||||
|
||||
void SaveGeneralSettings();
|
||||
void SaveStream1Settings();
|
||||
void SaveOutputSettings();
|
||||
void SaveAudioSettings();
|
||||
void SaveVideoSettings();
|
||||
|
@ -146,6 +149,7 @@ private slots:
|
|||
void AudioChanged();
|
||||
void AudioChangedRestart();
|
||||
void OutputsChanged();
|
||||
void Stream1Changed();
|
||||
void VideoChanged();
|
||||
void VideoChangedResolution();
|
||||
void VideoChangedRestart();
|
||||
|
|
Loading…
Reference in New Issue