diff --git a/rpcs3/rpcs3qt/emu_settings.cpp b/rpcs3/rpcs3qt/emu_settings.cpp index ed6e6e6e8c..da79d5bfd0 100644 --- a/rpcs3/rpcs3qt/emu_settings.cpp +++ b/rpcs3/rpcs3qt/emu_settings.cpp @@ -227,10 +227,10 @@ void emu_settings::EnhanceComboBox(QComboBox* combobox, emu_settings_type type, { const QStringList settings = GetSettingOptions(type); - for (const QString& setting : settings) + for (int i = 0; i < settings.count(); i++) { - const QString localized_setting = GetLocalizedSetting(setting, type, combobox->count()); - combobox->addItem(localized_setting, QVariant(setting)); + const QString localized_setting = GetLocalizedSetting(settings[i], type, combobox->count()); + combobox->addItem(localized_setting, QVariant({settings[i], i})); } if (sorted) @@ -240,7 +240,27 @@ void emu_settings::EnhanceComboBox(QComboBox* combobox, emu_settings_type type, } const std::string selected = GetSetting(type); - const int index = combobox->findData(qstr(selected)); + const QString selected_q = qstr(selected); + int index = -1; + + if (is_ranged) + { + index = combobox->findData(selected_q); + } + else + { + for (int i = 0; i < combobox->count(); i++) + { + const QVariantList var_list = combobox->itemData(i).toList(); + ASSERT(var_list.size() == 2 && var_list[0].canConvert()); + + if (selected_q == var_list[0].toString()) + { + index = i; + break; + } + } + } if (index == -1) { @@ -256,7 +276,16 @@ void emu_settings::EnhanceComboBox(QComboBox* combobox, emu_settings_type type, connect(combobox, static_cast(&QComboBox::currentIndexChanged), [=, this](int index) { - SetSetting(type, sstr(combobox->itemData(index))); + if (is_ranged) + { + SetSetting(type, sstr(combobox->itemData(index))); + } + else + { + const QVariantList var_list = combobox->itemData(index).toList(); + ASSERT(var_list.size() == 2 && var_list[0].canConvert()); + SetSetting(type, sstr(var_list[0])); + } }); } diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index f56f2c9c58..a686154ff4 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -631,7 +631,9 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std auto enable_buffering = [this, enable_buffering_options](int index) { - const auto text = ui->audioOutBox->currentData().toString(); + const QVariantList var_list = ui->audioOutBox->itemData(index).toList(); + ASSERT(var_list.size() == 2 && var_list[0].canConvert()); + const QString text = var_list[0].toString(); const bool enabled = text == "XAudio2" || text == "OpenAL" || text == "FAudio"; ui->enableBuffering->setEnabled(enabled); enable_buffering_options(enabled && ui->enableBuffering->isChecked()); @@ -639,54 +641,39 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std const QString mic_none = m_emu_settings->m_microphone_creator.get_none(); - auto change_microphone_type = [=, this](QString text) + auto change_microphone_type = [mic_none, this](int index) { - std::string s_standard, s_singstar, s_realsingstar, s_rocksmith; - - auto enable_mics_combo = [=, this](u32 max) + if (index < 0) { - ui->microphone1Box->setEnabled(true); - - if (max == 1 || ui->microphone1Box->currentText() == mic_none) - return; - - ui->microphone2Box->setEnabled(true); - - if (max > 2 && ui->microphone2Box->currentText() != mic_none) - { - ui->microphone3Box->setEnabled(true); - if (ui->microphone3Box->currentText() != mic_none) - { - ui->microphone4Box->setEnabled(true); - } - } - }; - - ui->microphone1Box->setEnabled(false); - ui->microphone2Box->setEnabled(false); - ui->microphone3Box->setEnabled(false); - ui->microphone4Box->setEnabled(false); - - fmt_class_string::format(s_standard, static_cast(microphone_handler::standard)); - fmt_class_string::format(s_singstar, static_cast(microphone_handler::singstar)); - fmt_class_string::format(s_realsingstar, static_cast(microphone_handler::real_singstar)); - fmt_class_string::format(s_rocksmith, static_cast(microphone_handler::rocksmith)); - - if (text == s_standard.c_str()) - { - enable_mics_combo(4); return; } - if (text == s_singstar.c_str()) + + const QVariantList var_list = ui->microphoneBox->itemData(index).toList(); + ASSERT(var_list.size() == 2 && var_list[1].canConvert()); + const int handler_id = var_list[1].toInt(); + int max = 0; + + switch (static_cast(handler_id)) { - enable_mics_combo(2); - return; - } - if (text == s_realsingstar.c_str() || text == s_rocksmith.c_str()) - { - enable_mics_combo(1); - return; + case microphone_handler::standard: + max = 4; + break; + case microphone_handler::singstar: + max = 2; + break; + case microphone_handler::real_singstar: + case microphone_handler::rocksmith: + max = 1; + break; + case microphone_handler::null: + default: + break; } + + ui->microphone1Box->setEnabled(max > 0); + ui->microphone2Box->setEnabled(max > 1 && ui->microphone1Box->currentText() != mic_none); + ui->microphone3Box->setEnabled(max > 2 && ui->microphone2Box->currentText() != mic_none); + ui->microphone4Box->setEnabled(ui->microphone3Box->isEnabled() && ui->microphone3Box->currentText() != mic_none); }; auto propagate_used_devices = [=, this]() @@ -706,7 +693,7 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std mics_combo[index]->setCurrentText(cur_item); mics_combo[index]->blockSignals(false); } - change_microphone_type(ui->microphoneBox->currentText()); + change_microphone_type(ui->microphoneBox->currentIndex()); }; auto change_microphone_device = [=, this](u32 next_index, QString text) @@ -761,7 +748,7 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std m_emu_settings->EnhanceComboBox(ui->microphoneBox, emu_settings_type::MicrophoneType); SubscribeTooltip(ui->microphoneBox, tooltips.settings.microphone); - connect(ui->microphoneBox, &QComboBox::currentTextChanged, change_microphone_type); + connect(ui->microphoneBox, QOverload::of(&QComboBox::currentIndexChanged), change_microphone_type); propagate_used_devices(); // Enables/Disables comboboxes and checks values from config for sanity // Checkboxes