DolphinQt/Config/ARCodeWidget: Avoid unnecessary disk operations

If a user indicates that they want to clone and edit an AR code, then
click cancel on the following dialog, we shouldn't actually clone the
code.

We also shouldn't resave the codes if the edit dialog is opened and then
closed again via cancel, as there's nothing that actually changed. This
way we don't perform disk accesses unless they're actually necessary.
This commit is contained in:
Lioncash 2019-07-31 09:01:35 -04:00
parent 0d406f2bdc
commit 4d8d2acae7
1 changed files with 22 additions and 19 deletions

View File

@ -191,40 +191,43 @@ void ARCodeWidget::OnCodeAddClicked()
ar.active = true;
CheatCodeEditor ed(this);
ed.SetARCode(&ar);
if (ed.exec() == QDialog::Rejected)
return;
if (ed.exec())
{
m_ar_codes.push_back(std::move(ar));
m_ar_codes.push_back(std::move(ar));
UpdateList();
SaveCodes();
}
UpdateList();
SaveCodes();
}
void ARCodeWidget::OnCodeEditClicked()
{
auto items = m_code_list->selectedItems();
const auto items = m_code_list->selectedItems();
if (items.empty())
return;
const auto* selected = items[0];
const auto* const selected = items[0];
auto& current_ar = m_ar_codes[m_code_list->row(selected)];
bool user_defined = current_ar.user_defined;
ActionReplay::ARCode ar = current_ar;
CheatCodeEditor ed(this);
if (current_ar.user_defined)
{
ed.SetARCode(&current_ar);
ed.SetARCode(user_defined ? &current_ar : &ar);
ed.exec();
if (ed.exec() == QDialog::Rejected)
return;
}
else
{
ActionReplay::ARCode ar = current_ar;
ed.SetARCode(&ar);
if (!user_defined)
m_ar_codes.push_back(ar);
if (ed.exec() == QDialog::Rejected)
return;
m_ar_codes.push_back(std::move(ar));
}
SaveCodes();
UpdateList();