lsnes/ui/tools/cheat-database.cpp
2013-05-03 17:47:34 +03:00

81 lines
2.4 KiB
C++
Executable file

CheatDatabase *cheatDatabase = 0;
CheatDatabase::CheatDatabase() {
setGeometry({ 128, 128, 640, 400 });
windowManager->append(this, "CheatDatabase");
layout.setMargin(5);
cheatList.setCheckable();
selectAllButton.setText("Select All");
unselectAllButton.setText("Unselect All");
acceptButton.setText("Add Codes");
append(layout);
layout.append(cheatList, { ~0, ~0 }, 5);
layout.append(controlLayout, { ~0, 0 }, 0);
controlLayout.append(selectAllButton, { 100, 0 }, 5);
controlLayout.append(unselectAllButton, { 100, 0 }, 0);
controlLayout.append(spacer, { ~0, 0 }, 0);
controlLayout.append(acceptButton, { 80, 0 }, 0);
selectAllButton.onActivate = [&] {
for(unsigned n = 0; n < cheatCode.size(); n++) cheatList.setChecked(n, true);
};
unselectAllButton.onActivate = [&] {
for(unsigned n = 0; n < cheatCode.size(); n++) cheatList.setChecked(n, false);
};
acceptButton.onActivate = { &CheatDatabase::addCodes, this };
}
void CheatDatabase::findCodes() {
cheatList.reset();
cheatCode.reset();
string data;
data.readfile(application->path("cheats.xml"));
XML::Document document(data);
for(auto &node : document["database"]) {
if(node.name != "cartridge") continue;
if(node["sha256"].data != interface->sha256()) continue;
setTitle(node["title"].data);
for(auto &cheat : node) {
if(cheat.name != "cheat") continue;
cheatList.append(cheat["description"].data);
string codeList;
for(auto &code : cheat) {
if(code.name != "code") continue;
codeList.append(code.data, "+");
}
codeList.rtrim<1>("+");
cheatCode.append({ codeList, "\t", cheat["description"].data });
}
setVisible();
return;
}
MessageWindow::information(*cheatEditor, "Sorry, no cheat codes were found for this cartridge.");
}
void CheatDatabase::addCodes() {
for(unsigned n = 0; n < cheatCode.size(); n++) {
if(cheatList.checked(n)) {
lstring part;
part.split<1>("\t", cheatCode[n]);
if(cheatEditor->addCode(part[0], part[1]) == false) {
MessageWindow::warning(*this, "Ran out of empty slots for cheat codes.\nNot all cheat codes were added.");
break;
}
}
}
setVisible(false);
cheatEditor->updateUI();
cheatEditor->updateInterface();
cheatEditor->synchronize();
}