From 0d34386e7a9c2371c78bdbc4bd6fad31a9e66884 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sun, 9 Jan 2022 15:06:24 -0800 Subject: [PATCH] mGUI: Add way of viewing entered code in cheat view --- src/feature/gui/cheats.c | 44 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/src/feature/gui/cheats.c b/src/feature/gui/cheats.c index 1b06afa0a..821aede5f 100644 --- a/src/feature/gui/cheats.c +++ b/src/feature/gui/cheats.c @@ -11,6 +11,7 @@ #include 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) {