ConfigControl fix: Add invalid index check to ConfigComplexChoice. Resolve with a default index that can be set.

If more control is needed,  it could be changed to allow multiple states to point to the same index.
This commit is contained in:
TryTwo 2025-03-26 13:15:57 -07:00
parent 896b4bb1fa
commit e5608c6ca5
3 changed files with 15 additions and 4 deletions

View File

@ -153,13 +153,23 @@ void ConfigComplexChoice::UpdateComboIndex()
};
auto it = std::find_if(m_options.begin(), m_options.end(), is_correct_option);
int index = static_cast<int>(std::distance(m_options.begin(), it));
int index;
if (it == m_options.end())
index = m_default_index;
else
index = static_cast<int>(std::distance(m_options.begin(), it));
// Will crash if not blocked
const QSignalBlocker blocker(this);
setCurrentIndex(index);
}
void ConfigComplexChoice::SetDefault(int index)
{
m_default_index = index;
}
const std::pair<Config::Location, Config::Location> ConfigComplexChoice::GetLocation() const
{
auto visit = [](auto& v) { return v.GetLocation(); };

View File

@ -62,6 +62,7 @@ public:
void Add(const QString& name, const OptionVariant option1, const OptionVariant option2);
void Refresh();
void Reset();
void SetDefault(int index);
const std::pair<Config::Location, Config::Location> GetLocation() const;
private:
@ -73,4 +74,5 @@ private:
const InfoVariant m_setting1;
const InfoVariant m_setting2;
std::vector<std::pair<OptionVariant, OptionVariant>> m_options;
int m_default_index = -1;
};

View File

@ -54,10 +54,9 @@ void AudioPane::CreateWidgets()
m_dsp_combo->Add(tr("HLE (recommended)"), true, true);
m_dsp_combo->Add(tr("LLE Recompiler (slow)"), false, true);
m_dsp_combo->Add(tr("LLE Interpreter (very slow)"), false, false);
// The state true/false shouldn't normally happen, but is HLE (index 0) when it does.
m_dsp_combo->SetDefault(0);
m_dsp_combo->Refresh();
// The state true/false shouldn't normally happen and forces no option to be selected.
if (m_dsp_combo->currentIndex() == -1)
m_dsp_combo->setCurrentIndex(0);
dsp_layout->addWidget(dsp_combo_label);
dsp_layout->addWidget(m_dsp_combo, Qt::AlignLeft);