Qt: Group game-specific and non-game-specific items in the same tabs (#3574)

* Group game-specific and non-game-specific items in the same tabs

* Fix rebase

* Transfer default settings tab to general, rename some items

* Fix experimental tab contents not filling the tab

* prevent saving game specific value if no valid value provided

* Fix console language saving, add error message if trying to save nullopt
This commit is contained in:
rainmakerv2
2025-09-14 14:04:17 +08:00
committed by GitHub
parent 260e0438a7
commit fd9f372a86
3 changed files with 506 additions and 471 deletions

View File

@@ -100,6 +100,12 @@ public:
void setTomlValue(toml::ordered_value& data, const std::string& header, const std::string& key, void setTomlValue(toml::ordered_value& data, const std::string& header, const std::string& key,
bool is_game_specific = false) { bool is_game_specific = false) {
if (is_game_specific) { if (is_game_specific) {
if (game_specific_value == std::nullopt) {
fmt::print("Attempted to save std::nullopt value to {}-{}, matching config entry "
"may not be correctly set-up\n",
header, key);
return;
}
data[header][key] = game_specific_value.value_or(base_value); data[header][key] = game_specific_value.value_or(base_value);
game_specific_value = std::nullopt; game_specific_value = std::nullopt;
} else { } else {
@@ -1110,6 +1116,8 @@ void setDefaultValues(bool is_game_specific) {
// Entries with game-specific settings that are in the game-specific setings GUI but not in // Entries with game-specific settings that are in the game-specific setings GUI but not in
// the global settings GUI // the global settings GUI
if (is_game_specific) { if (is_game_specific) {
readbacksEnabled.set(false, is_game_specific);
readbackLinearImagesEnabled.set(false, is_game_specific);
isNeo.set(false, is_game_specific); isNeo.set(false, is_game_specific);
isDevKit.set(false, is_game_specific); isDevKit.set(false, is_game_specific);
isPSNSignedIn.set(false, is_game_specific); isPSNSignedIn.set(false, is_game_specific);
@@ -1141,8 +1149,6 @@ void setDefaultValues(bool is_game_specific) {
windowHeight.set(720, is_game_specific); windowHeight.set(720, is_game_specific);
isNullGpu.set(false, is_game_specific); isNullGpu.set(false, is_game_specific);
shouldCopyGPUBuffers.set(false, is_game_specific); shouldCopyGPUBuffers.set(false, is_game_specific);
readbacksEnabled.set(false, is_game_specific);
readbackLinearImagesEnabled.set(false, is_game_specific);
shouldDumpShaders.set(false, is_game_specific); shouldDumpShaders.set(false, is_game_specific);
vblankFrequency.set(60, is_game_specific); vblankFrequency.set(60, is_game_specific);
isFullscreen.set(false, is_game_specific); isFullscreen.set(false, is_game_specific);

View File

@@ -94,25 +94,18 @@ SettingsDialog::SettingsDialog(std::shared_ptr<gui_settings> gui_settings,
ui->logFilterLineEdit->setClearButtonEnabled(true); ui->logFilterLineEdit->setClearButtonEnabled(true);
if (game_specific) { if (game_specific) {
// Paths tab
ui->tabWidgetSettings->setTabVisible(5, false); ui->tabWidgetSettings->setTabVisible(5, false);
ui->chooseHomeTabComboBox->removeItem(5); ui->chooseHomeTabComboBox->removeItem(5);
ui->label_Trophy->setVisible(false); // Frontend tab
ui->trophyKeyLineEdit->setVisible(false); ui->tabWidgetSettings->setTabVisible(1, false);
ui->CompatgroupBox->setVisible(false); ui->chooseHomeTabComboBox->removeItem(1);
ui->gameSizeCheckBox->setVisible(false);
ui->GUIBackgroundImageGroupBox->setVisible(false);
ui->GUIMusicGroupBox->setVisible(false);
ui->gameSizeCheckBox->setVisible(false);
ui->updaterGroupBox->setVisible(false);
ui->discordRPCCheckbox->setVisible(false);
ui->emulatorLanguageGroupBox->setVisible(false);
} else { } else {
ui->dmaCheckBox->setVisible(false); // Experimental tab
ui->devkitCheckBox->setVisible(false); ui->tabWidgetSettings->setTabVisible(8, false);
ui->neoCheckBox->setVisible(false); ui->chooseHomeTabComboBox->removeItem(8);
ui->networkConnectedCheckBox->setVisible(false);
ui->psnSignInCheckBox->setVisible(false);
} }
std::filesystem::path config_file = std::filesystem::path config_file =
@@ -130,10 +123,15 @@ SettingsDialog::SettingsDialog(std::shared_ptr<gui_settings> gui_settings,
presentModeMap = {{tr("Mailbox (Vsync)"), "Mailbox"}, presentModeMap = {{tr("Mailbox (Vsync)"), "Mailbox"},
{tr("Fifo (Vsync)"), "Fifo"}, {tr("Fifo (Vsync)"), "Fifo"},
{tr("Immediate (No Vsync)"), "Immediate"}}; {tr("Immediate (No Vsync)"), "Immediate"}};
chooseHomeTabMap = {{tr("General"), "General"}, {tr("GUI"), "GUI"}, chooseHomeTabMap = {{tr("General"), "General"},
{tr("Graphics"), "Graphics"}, {tr("User"), "User"}, {tr("Frontend"), "Frontend"},
{tr("Input"), "Input"}, {tr("Paths"), "Paths"}, {tr("Graphics"), "Graphics"},
{tr("Log"), "Log"}, {tr("Debug"), "Debug"}}; {tr("User"), "User"},
{tr("Input"), "Input"},
{tr("Paths"), "Paths"},
{tr("Log"), "Log"},
{tr("Debug"), "Debug"},
{tr("Experimental"), "Experimental"}};
micMap = {{tr("None"), "None"}, {tr("Default Device"), "Default Device"}}; micMap = {{tr("None"), "None"}, {tr("Default Device"), "Default Device"}};
if (m_physical_devices.empty()) { if (m_physical_devices.empty()) {
@@ -646,6 +644,9 @@ void SettingsDialog::LoadValuesFromConfig() {
ui->micComboBox->setCurrentIndex(0); ui->micComboBox->setCurrentIndex(0);
} }
ui->readbacksCheckBox->setChecked(toml::find_or<bool>(data, "GPU", "readbacks", false));
ui->readbackLinearImagesCheckBox->setChecked(
toml::find_or<bool>(data, "GPU", "readbackLinearImages", false));
ui->dmaCheckBox->setChecked(toml::find_or<bool>(data, "GPU", "directMemoryAccess", false)); ui->dmaCheckBox->setChecked(toml::find_or<bool>(data, "GPU", "directMemoryAccess", false));
ui->neoCheckBox->setChecked(toml::find_or<bool>(data, "General", "isPS4Pro", false)); ui->neoCheckBox->setChecked(toml::find_or<bool>(data, "General", "isPS4Pro", false));
ui->devkitCheckBox->setChecked(toml::find_or<bool>(data, "General", "isDevKit", false)); ui->devkitCheckBox->setChecked(toml::find_or<bool>(data, "General", "isDevKit", false));
@@ -725,10 +726,7 @@ void SettingsDialog::LoadValuesFromConfig() {
toml::find_or<bool>(data, "GPU", "copyGPUBuffers", false)); toml::find_or<bool>(data, "GPU", "copyGPUBuffers", false));
ui->collectShaderCheckBox->setChecked( ui->collectShaderCheckBox->setChecked(
toml::find_or<bool>(data, "Debug", "CollectShader", false)); toml::find_or<bool>(data, "Debug", "CollectShader", false));
ui->readbacksCheckBox->setChecked(toml::find_or<bool>(data, "GPU", "readbacks", false));
ui->enableLoggingCheckBox->setChecked(toml::find_or<bool>(data, "Debug", "logEnabled", true)); ui->enableLoggingCheckBox->setChecked(toml::find_or<bool>(data, "Debug", "logEnabled", true));
ui->readbackLinearImagesCheckBox->setChecked(
toml::find_or<bool>(data, "GPU", "readbackLinearImages", false));
std::string chooseHomeTab = std::string chooseHomeTab =
toml::find_or<std::string>(data, "General", "chooseHomeTab", "General"); toml::find_or<std::string>(data, "General", "chooseHomeTab", "General");
@@ -981,17 +979,15 @@ bool SettingsDialog::eventFilter(QObject* obj, QEvent* event) {
} }
void SettingsDialog::UpdateSettings(bool game_specific) { void SettingsDialog::UpdateSettings(bool game_specific) {
// Entries that are only in the game-specific gui
if (game_specific) {
Config::setDirectMemoryAccess(ui->dmaCheckBox->isChecked(), true);
Config::setDevKitConsole(ui->devkitCheckBox->isChecked(), true);
Config::setNeoMode(ui->neoCheckBox->isChecked(), true);
Config::setConnectedToNetwork(ui->networkConnectedCheckBox->isChecked(), true);
Config::setPSNSignedIn(ui->psnSignInCheckBox->isChecked(), true);
}
// Entries with game-specific settings, needs the game-specific arg // Entries with game-specific settings, needs the game-specific arg
Config::setReadbacks(ui->readbacksCheckBox->isChecked(), game_specific);
Config::setReadbackLinearImages(ui->readbackLinearImagesCheckBox->isChecked(), game_specific);
Config::setDirectMemoryAccess(ui->dmaCheckBox->isChecked(), game_specific);
Config::setDevKitConsole(ui->devkitCheckBox->isChecked(), game_specific);
Config::setNeoMode(ui->neoCheckBox->isChecked(), game_specific);
Config::setConnectedToNetwork(ui->networkConnectedCheckBox->isChecked(), game_specific);
Config::setPSNSignedIn(ui->psnSignInCheckBox->isChecked(), game_specific);
Config::setIsFullscreen( Config::setIsFullscreen(
screenModeMap.value(ui->displayModeComboBox->currentText()) != "Windowed", game_specific); screenModeMap.value(ui->displayModeComboBox->currentText()) != "Windowed", game_specific);
Config::setFullscreenMode( Config::setFullscreenMode(
@@ -1025,7 +1021,8 @@ void SettingsDialog::UpdateSettings(bool game_specific) {
Config::setCursorHideTimeout(ui->hideCursorComboBox->currentIndex(), game_specific); Config::setCursorHideTimeout(ui->hideCursorComboBox->currentIndex(), game_specific);
Config::setGpuId(ui->graphicsAdapterBox->currentIndex() - 1, game_specific); Config::setGpuId(ui->graphicsAdapterBox->currentIndex() - 1, game_specific);
Config::setVolumeSlider(ui->horizontalVolumeSlider->value(), game_specific); Config::setVolumeSlider(ui->horizontalVolumeSlider->value(), game_specific);
Config::setLanguage(languageIndexes[ui->consoleLanguageComboBox->currentIndex()]); Config::setLanguage(languageIndexes[ui->consoleLanguageComboBox->currentIndex()],
game_specific);
Config::setWindowWidth(ui->widthSpinBox->value(), game_specific); Config::setWindowWidth(ui->widthSpinBox->value(), game_specific);
Config::setWindowHeight(ui->heightSpinBox->value(), game_specific); Config::setWindowHeight(ui->heightSpinBox->value(), game_specific);
Config::setVblankFreq(ui->vblankSpinBox->value(), game_specific); Config::setVblankFreq(ui->vblankSpinBox->value(), game_specific);
@@ -1043,8 +1040,6 @@ void SettingsDialog::UpdateSettings(bool game_specific) {
Config::setVkHostMarkersEnabled(ui->hostMarkersCheckBox->isChecked(), game_specific); Config::setVkHostMarkersEnabled(ui->hostMarkersCheckBox->isChecked(), game_specific);
Config::setVkGuestMarkersEnabled(ui->guestMarkersCheckBox->isChecked(), game_specific); Config::setVkGuestMarkersEnabled(ui->guestMarkersCheckBox->isChecked(), game_specific);
Config::setVkCrashDiagnosticEnabled(ui->crashDiagnosticsCheckBox->isChecked(), game_specific); Config::setVkCrashDiagnosticEnabled(ui->crashDiagnosticsCheckBox->isChecked(), game_specific);
Config::setReadbacks(ui->readbacksCheckBox->isChecked(), game_specific);
Config::setReadbackLinearImages(ui->readbackLinearImagesCheckBox->isChecked(), game_specific);
Config::setCollectShaderForDebug(ui->collectShaderCheckBox->isChecked(), game_specific); Config::setCollectShaderForDebug(ui->collectShaderCheckBox->isChecked(), game_specific);
Config::setCopyGPUCmdBuffers(ui->copyGPUBuffersCheckBox->isChecked(), game_specific); Config::setCopyGPUCmdBuffers(ui->copyGPUBuffersCheckBox->isChecked(), game_specific);
Config::setChooseHomeTab( Config::setChooseHomeTab(

View File

@@ -59,7 +59,10 @@
</size> </size>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>7</number> <number>1</number>
</property>
<property name="usesScrollButtons">
<bool>true</bool>
</property> </property>
<widget class="QScrollArea" name="generalTab"> <widget class="QScrollArea" name="generalTab">
<property name="widgetResizable"> <property name="widgetResizable">
@@ -106,7 +109,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="title"> <property name="title">
<string>Emulator</string> <string>Miscellaneous</string>
</property> </property>
<property name="flat"> <property name="flat">
<bool>false</bool> <bool>false</bool>
@@ -114,7 +117,7 @@
<property name="checkable"> <property name="checkable">
<bool>false</bool> <bool>false</bool>
</property> </property>
<layout class="QVBoxLayout" name="additionalSettingsVLayout" stretch="0"> <layout class="QVBoxLayout" name="additionalSettingsVLayout" stretch="0,0,0">
<property name="spacing"> <property name="spacing">
<number>6</number> <number>6</number>
</property> </property>
@@ -131,21 +134,79 @@
<number>9</number> <number>9</number>
</property> </property>
<item> <item>
<layout class="QVBoxLayout" name="emulatorverticalLayout"> <widget class="QGroupBox" name="chooseHomeTabGroupBox">
<property name="spacing"> <property name="sizePolicy">
<number>10</number> <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Default tab when opening settings</string>
</property>
<layout class="QVBoxLayout" name="tabSettingsLayout">
<item>
<widget class="QComboBox" name="chooseHomeTabComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<item> <item>
<widget class="QCheckBox" name="showSplashCheckBox">
<property name="text"> <property name="text">
<string>Show Splash</string> <string>General</string>
</property> </property>
</item>
<item>
<property name="text">
<string>Frontend</string>
</property>
</item>
<item>
<property name="text">
<string>Graphics</string>
</property>
</item>
<item>
<property name="text">
<string>User</string>
</property>
</item>
<item>
<property name="text">
<string>Input</string>
</property>
</item>
<item>
<property name="text">
<string>Paths</string>
</property>
</item>
<item>
<property name="text">
<string>Log</string>
</property>
</item>
<item>
<property name="text">
<string>Debug</string>
</property>
</item>
<item>
<property name="text">
<string>Experimental</string>
</property>
</item>
</widget>
</item>
</layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="discordRPCCheckbox"> <widget class="QCheckBox" name="showSplashCheckBox">
<property name="text"> <property name="text">
<string>Enable Discord Rich Presence</string> <string>Show Splash Screen When Launching Game</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -163,12 +224,23 @@
</spacer> </spacer>
</item> </item>
</layout> </layout>
</item>
</layout>
</widget> </widget>
</item> </item>
</layout> </layout>
</item> </item>
<item row="2" column="0">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="2"> <item row="2" column="2">
<spacer name="verticalSpacer_4"> <spacer name="verticalSpacer_4">
<property name="orientation"> <property name="orientation">
@@ -224,210 +296,6 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QGroupBox" name="emulatorLanguageGroupBox">
<property name="title">
<string>Emulator Language</string>
</property>
<layout class="QVBoxLayout" name="langSettingsLayout">
<item>
<widget class="QComboBox" name="emulatorLanguageComboBox"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="3">
<layout class="QVBoxLayout" name="updaterTabLayoutLeft">
<property name="spacing">
<number>6</number>
</property>
<property name="sizeConstraint">
<enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="updaterGroupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Update</string>
</property>
<layout class="QVBoxLayout" name="UpdateLayout" stretch="0,0,0,0">
<property name="spacing">
<number>6</number>
</property>
<property name="topMargin">
<number>9</number>
</property>
<property name="rightMargin">
<number>9</number>
</property>
<property name="bottomMargin">
<number>80</number>
</property>
<item>
<widget class="QCheckBox" name="updateCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Check for Updates at Startup</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="changelogCheckBox">
<property name="text">
<string>Always Show Changelog</string>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="updaterComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Update Channel</string>
</property>
<layout class="QVBoxLayout" name="UpdateChannelLayout">
<property name="spacing">
<number>7</number>
</property>
<property name="leftMargin">
<number>11</number>
</property>
<property name="topMargin">
<number>11</number>
</property>
<property name="rightMargin">
<number>11</number>
</property>
<property name="bottomMargin">
<number>11</number>
</property>
<item>
<widget class="QComboBox" name="updateComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Release</string>
</property>
</item>
<item>
<property name="text">
<string>Nightly</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QPushButton" name="checkUpdateButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Check for Updates</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QGroupBox" name="volumeSliderElement"> <widget class="QGroupBox" name="volumeSliderElement">
<property name="title"> <property name="title">
<string>Volume</string> <string>Volume</string>
@@ -452,7 +320,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>400</width> <width>408</width>
<height>68</height> <height>68</height>
</rect> </rect>
</property> </property>
@@ -508,18 +376,10 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="2" column="3"> </layout>
<spacer name="verticalSpacer_5"> </widget>
<property name="orientation"> </item>
<enum>Qt::Orientation::Vertical</enum> </layout>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item> </item>
</layout> </layout>
</item> </item>
@@ -531,15 +391,15 @@
<bool>true</bool> <bool>true</bool>
</property> </property>
<attribute name="title"> <attribute name="title">
<string>GUI</string> <string>Frontend</string>
</attribute> </attribute>
<widget class="QWidget" name="guiTabContents"> <widget class="QWidget" name="guiTabContents">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>946</width> <width>932</width>
<height>501</height> <height>507</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@@ -577,7 +437,7 @@
</size> </size>
</property> </property>
<property name="title"> <property name="title">
<string>GUI Settings</string> <string>General Frontend Settings</string>
</property> </property>
<layout class="QVBoxLayout" name="GUILayout"> <layout class="QVBoxLayout" name="GUILayout">
<property name="topMargin"> <property name="topMargin">
@@ -587,62 +447,10 @@
<number>9</number> <number>9</number>
</property> </property>
<item> <item>
<widget class="QGroupBox" name="chooseHomeTabGroupBox"> <widget class="QCheckBox" name="discordRPCCheckbox">
<property name="title">
<string>Default tab when opening settings</string>
</property>
<layout class="QVBoxLayout" name="tabSettingsLayout">
<item>
<widget class="QComboBox" name="chooseHomeTabComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text"> <property name="text">
<string>General</string> <string>Enable Discord Rich Presence</string>
</property> </property>
</item>
<item>
<property name="text">
<string>GUI</string>
</property>
</item>
<item>
<property name="text">
<string>Graphics</string>
</property>
</item>
<item>
<property name="text">
<string>User</string>
</property>
</item>
<item>
<property name="text">
<string>Input</string>
</property>
</item>
<item>
<property name="text">
<string>Paths</string>
</property>
</item>
<item>
<property name="text">
<string>Log</string>
</property>
</item>
<item>
<property name="text">
<string>Debug</string>
</property>
</item>
</widget>
</item>
</layout>
</widget> </widget>
</item> </item>
<item> <item>
@@ -652,6 +460,18 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QGroupBox" name="emulatorLanguageGroupBox">
<property name="title">
<string>Emulator Language</string>
</property>
<layout class="QVBoxLayout" name="langSettingsLayout">
<item>
<widget class="QComboBox" name="emulatorLanguageComboBox"/>
</item>
</layout>
</widget>
</item>
<item> <item>
<widget class="QGroupBox" name="GUIBackgroundImageGroupBox"> <widget class="QGroupBox" name="GUIBackgroundImageGroupBox">
<property name="sizePolicy"> <property name="sizePolicy">
@@ -865,6 +685,45 @@
</widget> </widget>
</widget> </widget>
</item> </item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Trophy Key</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_trophyKey">
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_Trophy">
<property name="text">
<string>Trophy Key</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="trophyKeyLineEdit">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
<bold>false</bold>
</font>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@@ -884,7 +743,7 @@
</layout> </layout>
</item> </item>
<item> <item>
<layout class="QVBoxLayout" name="CompatTabLayoutRight" stretch="0,0"> <layout class="QVBoxLayout" name="CompatTabLayoutRight" stretch="0,0,0">
<property name="spacing"> <property name="spacing">
<number>6</number> <number>6</number>
</property> </property>
@@ -967,7 +826,159 @@
</widget> </widget>
</item> </item>
<item> <item>
<spacer name="verticalSpacer_6"> <widget class="QGroupBox" name="updaterGroupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Update</string>
</property>
<layout class="QVBoxLayout" name="UpdateLayout" stretch="0,0,0,0">
<property name="spacing">
<number>6</number>
</property>
<property name="topMargin">
<number>9</number>
</property>
<property name="rightMargin">
<number>9</number>
</property>
<property name="bottomMargin">
<number>80</number>
</property>
<item>
<widget class="QCheckBox" name="updateCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Check for Updates at Startup</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="changelogCheckBox">
<property name="text">
<string>Always Show Changelog</string>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="updaterComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Update Channel</string>
</property>
<layout class="QVBoxLayout" name="UpdateChannelLayout">
<property name="spacing">
<number>7</number>
</property>
<property name="leftMargin">
<number>11</number>
</property>
<property name="topMargin">
<number>11</number>
</property>
<property name="rightMargin">
<number>11</number>
</property>
<property name="bottomMargin">
<number>11</number>
</property>
<item>
<widget class="QComboBox" name="updateComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Release</string>
</property>
</item>
<item>
<property name="text">
<string>Nightly</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QPushButton" name="checkUpdateButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Check for Updates</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_5">
<property name="orientation"> <property name="orientation">
<enum>Qt::Orientation::Vertical</enum> <enum>Qt::Orientation::Vertical</enum>
</property> </property>
@@ -1559,36 +1570,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_trophyKey">
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_Trophy">
<property name="text">
<string>Trophy Key</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="trophyKeyLineEdit">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
<bold>false</bold>
</font>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<widget class="QPushButton" name="OpenCustomTrophyLocationButton"> <widget class="QPushButton" name="OpenCustomTrophyLocationButton">
<property name="text"> <property name="text">
@@ -1614,6 +1595,9 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5"/>
</item>
</layout> </layout>
</item> </item>
<item> <item>
@@ -1651,7 +1635,7 @@
<height>501</height> <height>501</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="inputTabVLayout" stretch="0,0"> <layout class="QVBoxLayout" name="inputTabVLayout" stretch="0,0,0">
<item> <item>
<layout class="QHBoxLayout" name="inputTabHLayoutTop" stretch="1,1"> <layout class="QHBoxLayout" name="inputTabHLayoutTop" stretch="1,1">
<item> <item>
@@ -1872,30 +1856,31 @@
<layout class="QHBoxLayout" name="micTabLayoutLeft"> <layout class="QHBoxLayout" name="micTabLayoutLeft">
<item> <item>
<widget class="QGroupBox" name="MicGroupBox"> <widget class="QGroupBox" name="MicGroupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title"> <property name="title">
<string>Microphone</string> <string>Microphone</string>
</property> </property>
<widget class="QComboBox" name="micComboBox"> <layout class="QHBoxLayout" name="horizontalLayout_7">
<property name="geometry"> <item>
<rect> <widget class="QComboBox" name="micComboBox"/>
<x>14</x> </item>
<y>33</y> </layout>
<width>431</width>
<height>31</height>
</rect>
</property>
</widget>
</widget> </widget>
</item> </item>
<item> <item>
<spacer name="verticalSpacer_8"> <spacer name="horizontalSpacer_8">
<property name="orientation"> <property name="orientation">
<enum>Qt::Orientation::Vertical</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>0</width> <width>40</width>
<height>40</height> <height>20</height>
</size> </size>
</property> </property>
</spacer> </spacer>
@@ -1904,6 +1889,19 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<spacer name="verticalSpacer_11">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
</widget> </widget>
@@ -2234,8 +2232,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>932</width> <width>946</width>
<height>507</height> <height>234</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@@ -2379,10 +2377,59 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<spacer name="verticalSpacer_10">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>5</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
<widget class="QScrollArea" name="experimentalTab">
<property name="widgetResizable">
<bool>true</bool>
</property>
<attribute name="title">
<string>Experimental</string>
</attribute>
<widget class="QWidget" name="experimentalTabContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>946</width>
<height>287</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="debugTabVLayout2" stretch="0">
<item>
<layout class="QVBoxLayout" name="experimentalVLayout">
<item> <item>
<layout class="QHBoxLayout" name="experimentalHLayout"> <layout class="QHBoxLayout" name="experimentalHLayout">
<item> <item>
<widget class="QGroupBox" name="ExperimentalGroupBox"> <widget class="QGroupBox" name="experimentalGroupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title"> <property name="title">
<string>Experimental Features</string> <string>Experimental Features</string>
</property> </property>
@@ -2496,19 +2543,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<spacer name="verticalSpacer_10">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>5</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</item> </item>
</layout> </layout>