This commit is contained in:
David Marsh 2024-07-23 15:31:32 +01:00
parent 3de41632d4
commit 28fe8da771
2 changed files with 54 additions and 19 deletions

View File

@ -20,6 +20,7 @@
#include <QDesktopServices> #include <QDesktopServices>
#include <QUrl> #include <QUrl>
#include <QIcon> #include <QIcon>
#include <QTabWidget>
#include "obs-module.h" #include "obs-module.h"
#include "version.h" #include "version.h"
@ -451,15 +452,39 @@ void OBSBasicSettings::AddServer(QFormLayout *outputsLayout, obs_data_t *setting
// Advanced settings // Advanced settings
const bool advanced = obs_data_get_bool(settings, "advanced"); const bool advanced = obs_data_get_bool(settings, "advanced");
auto advancedGroup = new QGroupBox(QString::fromUtf8(obs_frontend_get_locale_string("Advanced"))); auto advancedGroup = new QGroupBox(QString::fromUtf8(obs_module_text("AdvancedGroupHeader")));
advancedGroup->setAlignment(Qt::AlignRight);
advancedGroup->setContentsMargins(0, 4, 0, 0);
advancedGroup->setStyleSheet("QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top right; padding: 12px 18px 0 0; }"
"QGroupBox { padding-top: 4px; padding-bottom: 0 }");
advancedGroup->setVisible(advanced); advancedGroup->setVisible(advanced);
auto advancedGroupLayout = new QFormLayout;
auto advancedGroupLayout = new QVBoxLayout;
advancedGroup->setLayout(advancedGroupLayout); advancedGroup->setLayout(advancedGroupLayout);
// Tab widget
auto advancedTabWidget = new QTabWidget;
advancedTabWidget->setContentsMargins(0, 0, 0, 0);
advancedTabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
auto videoPage = new QWidget;
videoPage->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
videoPage->setStyleSheet("background: pink");
auto videoPageLayout = new QFormLayout;
videoPage->setLayout(videoPageLayout);
auto audioPage = new QWidget;
audioPage->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
audioPage->setStyleSheet("background: pink");
auto audioPageLayout = new QFormLayout;
audioPage->setLayout(audioPageLayout);
// VIDEO ENCODER
auto videoEncoder = new QComboBox; auto videoEncoder = new QComboBox;
videoEncoder->addItem(QString::fromUtf8(obs_module_text("MainEncoder")), QVariant(QString::fromUtf8(""))); videoEncoder->addItem(QString::fromUtf8(obs_module_text("MainEncoder")), QVariant(QString::fromUtf8("")));
videoEncoder->setCurrentIndex(0); videoEncoder->setCurrentIndex(0);
advancedGroupLayout->addRow(QString::fromUtf8(obs_module_text("VideoEncoder")), videoEncoder); videoPageLayout->addRow(QString::fromUtf8(obs_module_text("VideoEncoder")), videoEncoder);
auto videoEncoderIndex = new QComboBox; auto videoEncoderIndex = new QComboBox;
for (int i = 0; i < MAX_OUTPUT_VIDEO_ENCODERS; i++) { for (int i = 0; i < MAX_OUTPUT_VIDEO_ENCODERS; i++) {
@ -470,25 +495,25 @@ void OBSBasicSettings::AddServer(QFormLayout *outputsLayout, obs_data_t *setting
if (videoEncoderIndex->currentIndex() >= 0) if (videoEncoderIndex->currentIndex() >= 0)
obs_data_set_int(settings, "video_encoder_index", videoEncoderIndex->currentIndex()); obs_data_set_int(settings, "video_encoder_index", videoEncoderIndex->currentIndex());
}); });
advancedGroupLayout->addRow(QString::fromUtf8(obs_module_text("VideoEncoderIndex")), videoEncoderIndex); videoPageLayout->addRow(QString::fromUtf8(obs_module_text("VideoEncoderIndex")), videoEncoderIndex);
auto videoEncoderGroup = new QGroupBox(QString::fromUtf8(obs_module_text("VideoEncoder"))); auto videoEncoderGroup = new QGroupBox(QString::fromUtf8(obs_module_text("VideoEncoder")));
videoEncoderGroup->setProperty("altColor", QVariant(true)); videoEncoderGroup->setProperty("altColor", QVariant(true));
auto videoEncoderGroupLayout = new QFormLayout(); auto videoEncoderGroupLayout = new QFormLayout();
videoEncoderGroup->setLayout(videoEncoderGroupLayout); videoEncoderGroup->setLayout(videoEncoderGroupLayout);
advancedGroupLayout->addRow(videoEncoderGroup); videoPageLayout->addRow(videoEncoderGroup);
connect(videoEncoder, &QComboBox::currentIndexChanged, connect(videoEncoder, &QComboBox::currentIndexChanged,
[this, serverGroup, advancedGroupLayout, videoEncoder, videoEncoderIndex, videoEncoderGroup, [this, serverGroup, advancedGroupLayout, videoPageLayout, videoEncoder, videoEncoderIndex, videoEncoderGroup,
videoEncoderGroupLayout, settings] { videoEncoderGroupLayout, settings] {
auto encoder_string = videoEncoder->currentData().toString().toUtf8(); auto encoder_string = videoEncoder->currentData().toString().toUtf8();
auto encoder = encoder_string.constData(); auto encoder = encoder_string.constData();
obs_data_set_string(settings, "video_encoder", encoder); obs_data_set_string(settings, "video_encoder", encoder);
if (!encoder || encoder[0] == '\0') { if (!encoder || encoder[0] == '\0') {
advancedGroupLayout->setRowVisible(videoEncoderIndex, true); videoPageLayout->setRowVisible(videoEncoderIndex, true);
videoEncoderGroup->setVisible(false); videoEncoderGroup->setVisible(false);
} else { } else {
advancedGroupLayout->setRowVisible(videoEncoderIndex, false); videoPageLayout->setRowVisible(videoEncoderIndex, false);
videoEncoderGroup->setVisible(true); videoEncoderGroup->setVisible(true);
auto t = encoder_properties.find(serverGroup); auto t = encoder_properties.find(serverGroup);
if (t != encoder_properties.end()) { if (t != encoder_properties.end()) {
@ -538,7 +563,7 @@ void OBSBasicSettings::AddServer(QFormLayout *outputsLayout, obs_data_t *setting
auto audioEncoder = new QComboBox; auto audioEncoder = new QComboBox;
audioEncoder->addItem(QString::fromUtf8(obs_module_text("MainEncoder")), QVariant(QString::fromUtf8(""))); audioEncoder->addItem(QString::fromUtf8(obs_module_text("MainEncoder")), QVariant(QString::fromUtf8("")));
audioEncoder->setCurrentIndex(0); audioEncoder->setCurrentIndex(0);
advancedGroupLayout->addRow(QString::fromUtf8(obs_module_text("AudioEncoder")), audioEncoder); audioPageLayout->addRow(QString::fromUtf8(obs_module_text("AudioEncoder")), audioEncoder);
//"audio_track" //"audio_track"
@ -551,7 +576,7 @@ void OBSBasicSettings::AddServer(QFormLayout *outputsLayout, obs_data_t *setting
if (audioTrack->currentIndex() >= 0) if (audioTrack->currentIndex() >= 0)
obs_data_set_int(settings, "audio_track", audioTrack->currentIndex()); obs_data_set_int(settings, "audio_track", audioTrack->currentIndex());
}); });
advancedGroupLayout->addRow(QString::fromUtf8(obs_module_text("AudioTrack")), audioTrack); audioPageLayout->addRow(QString::fromUtf8(obs_module_text("AudioTrack")), audioTrack);
auto audioEncoderIndex = new QComboBox; auto audioEncoderIndex = new QComboBox;
for (int i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { for (int i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) {
@ -562,27 +587,27 @@ void OBSBasicSettings::AddServer(QFormLayout *outputsLayout, obs_data_t *setting
if (audioEncoderIndex->currentIndex() >= 0) if (audioEncoderIndex->currentIndex() >= 0)
obs_data_set_int(settings, "audio_encoder_index", audioEncoderIndex->currentIndex()); obs_data_set_int(settings, "audio_encoder_index", audioEncoderIndex->currentIndex());
}); });
advancedGroupLayout->addRow(QString::fromUtf8(obs_module_text("AudioEncoderIndex")), audioEncoderIndex); audioPageLayout->addRow(QString::fromUtf8(obs_module_text("AudioEncoderIndex")), audioEncoderIndex);
auto audioEncoderGroup = new QGroupBox(QString::fromUtf8(obs_module_text("AudioEncoder"))); auto audioEncoderGroup = new QGroupBox(QString::fromUtf8(obs_module_text("AudioEncoder")));
audioEncoderGroup->setProperty("altColor", QVariant(true)); audioEncoderGroup->setProperty("altColor", QVariant(true));
auto audioEncoderGroupLayout = new QFormLayout(); auto audioEncoderGroupLayout = new QFormLayout();
audioEncoderGroup->setLayout(audioEncoderGroupLayout); audioEncoderGroup->setLayout(audioEncoderGroupLayout);
advancedGroupLayout->addRow(audioEncoderGroup); audioPageLayout->addRow(audioEncoderGroup);
connect(audioEncoder, &QComboBox::currentIndexChanged, connect(audioEncoder, &QComboBox::currentIndexChanged,
[this, serverGroup, advancedGroupLayout, audioEncoder, audioEncoderIndex, audioEncoderGroup, [this, serverGroup, advancedGroupLayout, audioPageLayout, audioEncoder, audioEncoderIndex, audioEncoderGroup,
audioEncoderGroupLayout, audioTrack, settings] { audioEncoderGroupLayout, audioTrack, settings] {
auto encoder_string = audioEncoder->currentData().toString().toUtf8(); auto encoder_string = audioEncoder->currentData().toString().toUtf8();
auto encoder = encoder_string.constData(); auto encoder = encoder_string.constData();
obs_data_set_string(settings, "audio_encoder", encoder); obs_data_set_string(settings, "audio_encoder", encoder);
if (!encoder || encoder[0] == '\0') { if (!encoder || encoder[0] == '\0') {
advancedGroupLayout->setRowVisible(audioEncoderIndex, true); audioPageLayout->setRowVisible(audioEncoderIndex, true);
advancedGroupLayout->setRowVisible(audioTrack, false); audioPageLayout->setRowVisible(audioTrack, false);
audioEncoderGroup->setVisible(false); audioEncoderGroup->setVisible(false);
} else { } else {
advancedGroupLayout->setRowVisible(audioEncoderIndex, false); audioPageLayout->setRowVisible(audioEncoderIndex, false);
advancedGroupLayout->setRowVisible(audioTrack, true); audioPageLayout->setRowVisible(audioTrack, true);
audioEncoderGroup->setVisible(true); audioEncoderGroup->setVisible(true);
auto t = encoder_properties.find(serverGroup); auto t = encoder_properties.find(serverGroup);
if (t != encoder_properties.end()) { if (t != encoder_properties.end()) {
@ -627,7 +652,7 @@ void OBSBasicSettings::AddServer(QFormLayout *outputsLayout, obs_data_t *setting
audioEncoder->setCurrentIndex(audioEncoder->count() - 1); audioEncoder->setCurrentIndex(audioEncoder->count() - 1);
} }
audioEncoderGroup->setVisible(audioEncoder->currentIndex() > 0); audioEncoderGroup->setVisible(audioEncoder->currentIndex() > 0);
advancedGroupLayout->setRowVisible(audioTrack, audioEncoder->currentIndex() > 0); audioPageLayout->setRowVisible(audioTrack, audioEncoder->currentIndex() > 0);
auto advancedButton = new QPushButton(QString::fromUtf8(obs_module_text("EditEncoderSettings"))); auto advancedButton = new QPushButton(QString::fromUtf8(obs_module_text("EditEncoderSettings")));
advancedButton->setProperty("themeID", "configIconSmall"); advancedButton->setProperty("themeID", "configIconSmall");
@ -639,6 +664,15 @@ void OBSBasicSettings::AddServer(QFormLayout *outputsLayout, obs_data_t *setting
obs_data_set_bool(settings, "advanced", advanced); obs_data_set_bool(settings, "advanced", advanced);
}); });
// Hook up
advancedTabWidget->addTab(videoPage, QString::fromUtf8("video"));
advancedTabWidget->addTab(audioPage, QString::fromUtf8("audio"));
advancedGroupLayout->addWidget(advancedTabWidget, 1);
// Remove button // Remove button
auto removeButton = auto removeButton =
new QPushButton(QIcon(":/res/images/minus.svg"), QString::fromUtf8(obs_frontend_get_locale_string("Remove"))); new QPushButton(QIcon(":/res/images/minus.svg"), QString::fromUtf8(obs_frontend_get_locale_string("Remove")));

View File

@ -28,6 +28,7 @@ EditEncoderSettings="Encoder Settings"
BackButton="< Back" BackButton="< Back"
SaveOutput="Save Output" SaveOutput="Save Output"
CreateOutput="Create Output" CreateOutput="Create Output"
AdvancedGroupHeader="Advanced Encoding Settings"
# Errors and warnings # Errors and warnings
MainOutputNotActive="Unable to start output. \nThis output is configured to use your main encoder's output (Built-in stream), which is not currently active.\nPlease start your main encoder first." MainOutputNotActive="Unable to start output. \nThis output is configured to use your main encoder's output (Built-in stream), which is not currently active.\nPlease start your main encoder first."