CheatList: Add merge list function for importing

This commit is contained in:
Connor McLaughlin 2020-11-07 19:58:59 +10:00
parent 576914cd2c
commit 6828082f8b
3 changed files with 37 additions and 4 deletions

View file

@ -529,6 +529,37 @@ void CheatList::ApplyCode(u32 index)
m_codes[index].Apply(); m_codes[index].Apply();
} }
const CheatCode* CheatList::FindCode(const char* name) const
{
for (const CheatCode& cc : m_codes)
{
if (cc.description == name)
return &cc;
}
return nullptr;
}
const CheatCode* CheatList::FindCode(const char* group, const char* name) const
{
for (const CheatCode& cc : m_codes)
{
if (cc.group == group && cc.description == name)
return &cc;
}
return nullptr;
}
void CheatList::MergeList(const CheatList& cl)
{
for (const CheatCode& cc : cl.m_codes)
{
if (!FindCode(cc.group.c_str(), cc.description.c_str()))
AddCode(cc);
}
}
std::string CheatCode::GetInstructionsAsString() const std::string CheatCode::GetInstructionsAsString() const
{ {
std::stringstream ss; std::stringstream ss;

View file

@ -102,6 +102,9 @@ public:
ALWAYS_INLINE u32 GetCodeCount() const { return static_cast<u32>(m_codes.size()); } ALWAYS_INLINE u32 GetCodeCount() const { return static_cast<u32>(m_codes.size()); }
ALWAYS_INLINE bool IsCodeEnabled(u32 index) const { return m_codes[index].enabled; } ALWAYS_INLINE bool IsCodeEnabled(u32 index) const { return m_codes[index].enabled; }
const CheatCode* FindCode(const char* name) const;
const CheatCode* FindCode(const char* group, const char* name) const;
void AddCode(CheatCode cc); void AddCode(CheatCode cc);
void SetCode(u32 index, CheatCode cc); void SetCode(u32 index, CheatCode cc);
void RemoveCode(u32 i); void RemoveCode(u32 i);
@ -125,6 +128,8 @@ public:
void ApplyCode(u32 index); void ApplyCode(u32 index);
void MergeList(const CheatList& cl);
private: private:
std::vector<CheatCode> m_codes; std::vector<CheatCode> m_codes;
}; };

View file

@ -558,10 +558,7 @@ void CheatManagerDialog::importClicked()
QtHostInterface::GetInstance()->executeOnEmulationThread( QtHostInterface::GetInstance()->executeOnEmulationThread(
[&new_cheats]() { [&new_cheats]() {
DebugAssert(System::HasCheatList()); DebugAssert(System::HasCheatList());
CheatList* list = System::GetCheatList(); System::GetCheatList()->MergeList(new_cheats);
for (u32 i = 0; i < new_cheats.GetCodeCount(); i++)
list->AddCode(new_cheats.GetCode(i));
QtHostInterface::GetInstance()->SaveCheatList(); QtHostInterface::GetInstance()->SaveCheatList();
}, },
true); true);