mGUI: Add way of viewing entered code in cheat view

This commit is contained in:
Vicki Pfau 2022-01-09 15:06:24 -08:00
parent 27d59e5ed6
commit 0d34386e7a
1 changed files with 40 additions and 4 deletions

View File

@ -11,6 +11,7 @@
#include <mgba-util/gui/menu.h>
enum mGUICheatAction {
CHEAT_BACK = 0,
CHEAT_ADD_LINE = 1,
CHEAT_RENAME,
CHEAT_DELETE,
@ -18,15 +19,37 @@ enum mGUICheatAction {
static const char* const offOn[] = { "Off", "On" };
static void _rebuildCheatView(struct GUIMenuItemList* items, const struct mCheatSet* set) {
GUIMenuItemListClear(items);
size_t i;
for (i = 0; i < StringListSize(&set->lines); ++i) {
*GUIMenuItemListAppend(items) = (struct GUIMenuItem) {
.title = *StringListGetConstPointer(&set->lines, i),
.readonly = true
};
}
*GUIMenuItemListAppend(items) = (struct GUIMenuItem) {
.title = "Back",
.data = GUI_V_U(CHEAT_BACK),
};
}
static void mGUIShowCheatSet(struct mGUIRunner* runner, struct mCheatDevice* device, struct mCheatSet* set) {
char cheatName[64];
snprintf(cheatName, sizeof(cheatName), "Edit cheat: %s", set->name);
struct GUIMenu menu = {
.title = cheatName,
.title = "Edit cheat",
.subtitle = set->name,
.index = 0,
.background = &runner->background.d
};
GUIMenuItemListInit(&menu.items, 0);
struct GUIMenu view = {
.title = "View cheat",
.subtitle = set->name,
.index = 0,
.background = &runner->background.d
};
*GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) {
.title = "Enable",
.state = set->enabled,
@ -37,6 +60,10 @@ static void mGUIShowCheatSet(struct mGUIRunner* runner, struct mCheatDevice* dev
.title = "Add line",
.data = GUI_V_U(CHEAT_ADD_LINE),
};
*GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) {
.title = "View lines",
.submenu = &view,
};
*GUIMenuItemListAppend(&menu.items) = (struct GUIMenuItem) {
.title = "Rename",
.data = GUI_V_U(CHEAT_RENAME),
@ -50,6 +77,9 @@ static void mGUIShowCheatSet(struct mGUIRunner* runner, struct mCheatDevice* dev
.data = GUI_V_V,
};
GUIMenuItemListInit(&view.items, 0);
_rebuildCheatView(&view.items, set);
while (true) {
struct GUIKeyboardParams keyboard;
GUIKeyboardParamsInit(&keyboard);
@ -67,6 +97,7 @@ static void mGUIShowCheatSet(struct mGUIRunner* runner, struct mCheatDevice* dev
keyboard.maxLen = 12;
if (runner->params.getText(&keyboard) == GUI_KEYBOARD_DONE) {
mCheatAddLine(set, keyboard.result, 0);
_rebuildCheatView(&view.items, set);
}
break;
case CHEAT_RENAME:
@ -75,12 +106,16 @@ static void mGUIShowCheatSet(struct mGUIRunner* runner, struct mCheatDevice* dev
keyboard.maxLen = 50;
if (runner->params.getText(&keyboard) == GUI_KEYBOARD_DONE) {
mCheatSetRename(set, keyboard.result);
snprintf(cheatName, sizeof(cheatName), "Edit cheat: %s", set->name);
menu.subtitle = set->name;
view.subtitle = set->name;
}
break;
case CHEAT_DELETE:
mCheatRemoveSet(device, set);
break;
case CHEAT_BACK:
// Used by submenus to return to the top menu
break;
}
if (action == CHEAT_DELETE) {
@ -88,6 +123,7 @@ static void mGUIShowCheatSet(struct mGUIRunner* runner, struct mCheatDevice* dev
}
}
GUIMenuItemListDeinit(&menu.items);
GUIMenuItemListDeinit(&view.items);
}
void mGUIShowCheats(struct mGUIRunner* runner) {