From d70dc9de5d70c66edbe42c93b56b54c7e5a27713 Mon Sep 17 00:00:00 2001 From: sorgelig Date: Sat, 20 Jun 2020 20:29:13 +0800 Subject: [PATCH] OSD: remember last opened settings page. --- input.cpp | 2 +- menu.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 63 insertions(+), 14 deletions(-) diff --git a/input.cpp b/input.cpp index eeb03bc..577c477 100644 --- a/input.cpp +++ b/input.cpp @@ -1578,7 +1578,7 @@ static void joy_digital(int jnum, uint32_t mask, uint32_t code, char press, int break; case JOY_BTN2: - ev.code = KEY_ESC; + ev.code = KEY_BACK; break; case JOY_BTN3: diff --git a/menu.cpp b/menu.cpp index fd4c388..cf19e02 100644 --- a/menu.cpp +++ b/menu.cpp @@ -365,7 +365,6 @@ static void SelectFile(const char* path, const char* pFileExt, unsigned char Opt menustate = MENU_FILE_SELECT1; } - void substrcpy(char *d, char *s, char idx) { char p = 0; @@ -864,7 +863,7 @@ void HandleUI(void) static char ioctl_index; char *p; static char s[256]; - unsigned char m = 0, up, down, select, menu, right, left, plus, minus, recent; + unsigned char m = 0, up, down, select, menu, back, right, left, plus, minus, recent; char enable; static int reboot_req = 0; static long helptext_timer; @@ -885,6 +884,7 @@ void HandleUI(void) static int flat = 0; static int menusub_parent = 0; static char title[32] = {}; + static uint32_t saved_menustate = 0; static char cp_MenuCancel; @@ -896,6 +896,7 @@ void HandleUI(void) // decode and set events menu = false; + back = false; select = false; up = false; down = false; @@ -1014,6 +1015,13 @@ void HandleUI(void) case KEY_ESC | UPSTROKE: if (menustate != MENU_NONE2) menu = true; break; + case KEY_BACK | UPSTROKE: + if (saved_menustate) back = true; + else menu = true; + break; + case KEY_BACKSPACE | UPSTROKE: + if (saved_menustate) back = true; + break; case KEY_ENTER: case KEY_SPACE: select = true; @@ -1116,7 +1124,6 @@ void HandleUI(void) } } - // SHARPMZ Series Menu - This has been located within the sharpmz.cpp code base in order to keep updates to common code // base to a minimum and shrink its size. The UI is called with the basic state data and it handles everything internally, // only updating values in this function as necessary. @@ -1130,6 +1137,19 @@ void HandleUI(void) menu, select, up, down, left, right, plus, minus); + switch (menustate) + { + case MENU_NONE1: + case MENU_NONE2: + case MENU_INFO: + case MENU_ERROR: + break; + + default: + saved_menustate = 0; + break; + } + // Switch to current menu screen switch (menustate) { @@ -1152,12 +1172,16 @@ void HandleUI(void) case MENU_NONE2: if (menu || (is_menu() && !video_fb_state())) { - page = 0; OsdSetSize(16); if(!is_menu() && (get_key_mod() & (LALT | RALT))) //Alt+Menu { SelectFile("", 0, SCANO_CORES, MENU_CORE_FILE_SELECTED1, MENU_NONE1); } + else if (saved_menustate) + { + menustate = saved_menustate; + menusub = 0; + } else if (is_st()) menustate = MENU_ST_MAIN1; else if (is_archie()) menustate = MENU_ARCHIE_MAIN1; else { @@ -1642,8 +1666,14 @@ void HandleUI(void) } break; // end MENU_8BIT_MAIN1 case MENU_8BIT_MAIN2: + saved_menustate = MENU_8BIT_MAIN1; + // menu key closes menu if (menu) + { + menustate = MENU_NONE1; + } + else if(back) { if(!page) menustate = MENU_NONE1; else @@ -3313,7 +3343,13 @@ void HandleUI(void) break; case MENU_ST_SYSTEM2: + saved_menustate = MENU_ST_SYSTEM1; + if (menu) + { + menustate = MENU_NONE1; + } + else if (back) { menustate = MENU_ST_MAIN1; menusub = 4; @@ -3612,15 +3648,14 @@ void HandleUI(void) sprintf(s, " Floppy disk turbo : %s", minimig_config.floppy.speed ? "on" : "off"); OsdWrite(m++, s, menusub == 4, 0); OsdWrite(m++); - - OsdWrite(m++, " Hard disks", menusub == 5, 0); - OsdWrite(m++, " CPU & Chipset", menusub == 6, 0); - OsdWrite(m++, " Memory", menusub == 7, 0); - OsdWrite(m++, " Audio & Video", menusub == 8, 0); + OsdWrite(m++, " Hard disks \x16", menusub == 5, 0); + OsdWrite(m++, " CPU & Chipset \x16", menusub == 6, 0); + OsdWrite(m++, " Memory \x16", menusub == 7, 0); + OsdWrite(m++, " Audio & Video \x16", menusub == 8, 0); OsdWrite(m++); - OsdWrite(m++, " Save configuration", menusub == 9, 0); - OsdWrite(m++, " Load configuration", menusub == 10, 0); + OsdWrite(m++, " Save configuration \x16", menusub == 9, 0); + OsdWrite(m++, " Load configuration \x16", menusub == 10, 0); OsdWrite(m++); OsdWrite(m++, " Reset", menusub == 11, 0); @@ -3632,8 +3667,7 @@ void HandleUI(void) break; case MENU_MAIN2: - if (menu) - menustate = MENU_NONE1; + if (menu) menustate = MENU_NONE1; else if (plus && (minimig_config.floppy.drives<3)) { minimig_config.floppy.drives++; @@ -4298,6 +4332,7 @@ void HandleUI(void) break; case MENU_SETTINGS_CHIPSET2: + saved_menustate = MENU_SETTINGS_CHIPSET1; if (select) { @@ -4365,6 +4400,10 @@ void HandleUI(void) } if (menu) + { + menustate = MENU_NONE1; + } + else if (back) { menustate = MENU_MAIN1; menusub = 6; @@ -4419,6 +4458,7 @@ void HandleUI(void) break; case MENU_SETTINGS_MEMORY2: + saved_menustate = MENU_SETTINGS_MEMORY1; if (select) { if (menusub == 0) @@ -4457,6 +4497,10 @@ void HandleUI(void) } if (menu) + { + menustate = MENU_NONE1; + } + else if (back) { menustate = MENU_MAIN1; menusub = 7; @@ -4695,6 +4739,7 @@ void HandleUI(void) break; case MENU_SETTINGS_VIDEO2: + saved_menustate = MENU_SETTINGS_VIDEO1; if (select) { menustate = MENU_SETTINGS_VIDEO1; @@ -4739,6 +4784,10 @@ void HandleUI(void) } if (menu) + { + menustate = MENU_NONE1; + } + else if (back) { menustate = MENU_MAIN1; menusub = 8;