mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-24 22:34:54 +00:00
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:
parent
896b4bb1fa
commit
e5608c6ca5
3 changed files with 15 additions and 4 deletions
|
@ -153,13 +153,23 @@ void ConfigComplexChoice::UpdateComboIndex()
|
||||||
};
|
};
|
||||||
|
|
||||||
auto it = std::find_if(m_options.begin(), m_options.end(), is_correct_option);
|
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
|
// Will crash if not blocked
|
||||||
const QSignalBlocker blocker(this);
|
const QSignalBlocker blocker(this);
|
||||||
setCurrentIndex(index);
|
setCurrentIndex(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConfigComplexChoice::SetDefault(int index)
|
||||||
|
{
|
||||||
|
m_default_index = index;
|
||||||
|
}
|
||||||
|
|
||||||
const std::pair<Config::Location, Config::Location> ConfigComplexChoice::GetLocation() const
|
const std::pair<Config::Location, Config::Location> ConfigComplexChoice::GetLocation() const
|
||||||
{
|
{
|
||||||
auto visit = [](auto& v) { return v.GetLocation(); };
|
auto visit = [](auto& v) { return v.GetLocation(); };
|
||||||
|
|
|
@ -62,6 +62,7 @@ public:
|
||||||
void Add(const QString& name, const OptionVariant option1, const OptionVariant option2);
|
void Add(const QString& name, const OptionVariant option1, const OptionVariant option2);
|
||||||
void Refresh();
|
void Refresh();
|
||||||
void Reset();
|
void Reset();
|
||||||
|
void SetDefault(int index);
|
||||||
const std::pair<Config::Location, Config::Location> GetLocation() const;
|
const std::pair<Config::Location, Config::Location> GetLocation() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -73,4 +74,5 @@ private:
|
||||||
const InfoVariant m_setting1;
|
const InfoVariant m_setting1;
|
||||||
const InfoVariant m_setting2;
|
const InfoVariant m_setting2;
|
||||||
std::vector<std::pair<OptionVariant, OptionVariant>> m_options;
|
std::vector<std::pair<OptionVariant, OptionVariant>> m_options;
|
||||||
|
int m_default_index = -1;
|
||||||
};
|
};
|
||||||
|
|
|
@ -54,10 +54,9 @@ void AudioPane::CreateWidgets()
|
||||||
m_dsp_combo->Add(tr("HLE (recommended)"), true, true);
|
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 Recompiler (slow)"), false, true);
|
||||||
m_dsp_combo->Add(tr("LLE Interpreter (very slow)"), false, false);
|
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();
|
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(dsp_combo_label);
|
||||||
dsp_layout->addWidget(m_dsp_combo, Qt::AlignLeft);
|
dsp_layout->addWidget(m_dsp_combo, Qt::AlignLeft);
|
||||||
|
|
Loading…
Add table
Reference in a new issue