diff --git a/Makefile b/Makefile index 52660c6..3a5ac8b 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ INCLUDES := inc EXEFS_SRC := exefs_src APP_TITLE := JKSV APP_AUTHOR := JK -APP_VERSION := 03.22.2020 +APP_VERSION := 03.24.2020 ROMFS := romfs #--------------------------------------------------------------------------------- diff --git a/inc/data.h b/inc/data.h index bad4592..7d7733a 100644 --- a/inc/data.h +++ b/inc/data.h @@ -112,6 +112,7 @@ namespace data //Stores current data we're using so I don't have to type so much. extern titledata curData; extern user curUser; + extern int selUser, selData; extern bool isSpcd; } diff --git a/inc/miscui.h b/inc/miscui.h index ebf7619..293bcf5 100644 --- a/inc/miscui.h +++ b/inc/miscui.h @@ -17,6 +17,8 @@ enum trackEvents TRACK_SWIPE_RIGHT }; +#define POP_FRAME_DEFAULT 130 + //For smaller classes that aren't easy to get lost in and general functions namespace ui { @@ -86,6 +88,10 @@ namespace ui bool confirmDelete(const std::string& p); void drawTextbox(int x, int y, int w, int h); void drawTextboxInvert(int x, int y, int w, int h); + + //Popup from freebird + void showPopup(const std::string& mess, unsigned frames); + void drawPopup(); } #endif // MISCUI_H diff --git a/src/data.cpp b/src/data.cpp index 17d28ab..933c642 100644 --- a/src/data.cpp +++ b/src/data.cpp @@ -75,6 +75,7 @@ namespace data { titledata curData; user curUser; + int selUser = 0, selData = 0; std::vector icons; std::vector users; bool forceMount = true; diff --git a/src/ui.cpp b/src/ui.cpp index b90ecf6..f5b1245 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -11,7 +11,7 @@ #include "util.h" #include "file.h" -#define VER_STRING "v. 03.22.2020" +#define VER_STRING "v. 03.24.2020" //Nav buttons std::vector usrNav, ttlNav, fldNav; @@ -21,7 +21,7 @@ static tex *top, *bot; //Help text static const std::string userHelp = "\ue0e0 Select \ue0e3 Dump All \ue0e2 UI Mode \ue0f0 Extras"; -static const std::string titleHelp = "\ue0e0 Select \ue0e3 Dump All \ue0e2 BlackList \ue0e1 Back"; +static const std::string titleHelp = "\ue0e0 Select \ue0e4\ue0e5 Change User \ue0e3 Dump All \ue0e2 BlackList \ue0e1 Back"; static const std::string folderHelp = "\ue0f0 File Mode \ue0e4\ue0e5 AutoName \ue0e0 Backup \ue0e3 Restore \ue0e2 Delete \ue0e1 Back"; //X position of help texts. Calculated to make editing quicker/easier @@ -340,5 +340,7 @@ namespace ui updateExMenu(down, held, p); break; } + + drawPopup(); } } diff --git a/src/ui/miscui.cpp b/src/ui/miscui.cpp index 42b293a..f271ef4 100644 --- a/src/ui/miscui.cpp +++ b/src/ui/miscui.cpp @@ -6,6 +6,17 @@ #include "miscui.h" #include "util.h" +static bool popDraw = false; +static std::string popText; +static unsigned popY, popTextX, popState, frameCount, frameHold; + +enum popStates +{ + popRise, + popShow, + popFall +}; + namespace ui { progBar::progBar(const uint64_t& _max) @@ -272,4 +283,47 @@ namespace ui drawRect(frameBuffer, x + 32, (y + h) - 32, w - 64, 32, temp); texDrawInvert(ui::cornerBottomRight, frameBuffer, (x + w) - 32, (y + h) - 32); } + + void showPopup(const std::string& mess, unsigned frames) + { + frameCount = 0; + frameHold = frames; + popTextX = 640 - (textGetWidth(mess.c_str(), ui::shared, 24) / 2); + + popText = mess; + popY = 721; + popState = popRise; + popDraw = true; + } + + void drawPopup() + { + if(!popDraw) + return; + + switch(popState) + { + case popRise: + if(popY > 559) + popY -= 24; + else + popState = popShow; + break; + + case popShow: + if(frameCount++ >= frameHold) + popState = popFall; + break; + + case popFall: + if(popY < 721) + popY += 24; + else + popDraw = false; + break; + } + + drawTextbox(60, popY, 1160, 64); + drawText(popText.c_str(), frameBuffer, ui::shared, popTextX, popY + 20, 24, ui::txtClr); + } } diff --git a/src/ui/ttlsel.cpp b/src/ui/ttlsel.cpp index 21a811e..275a34e 100644 --- a/src/ui/ttlsel.cpp +++ b/src/ui/ttlsel.cpp @@ -17,7 +17,7 @@ namespace ui { //Static vars so they don't change on every loop //Where to start in titles, selected title - static int start = 0, selected = 0; + static int start = 0; //Color shift for rect static uint8_t clrShft = 0; @@ -59,12 +59,12 @@ namespace ui if(i == endTitle) break; - if((int)i == selected) + if((int)i == data::selData) { selRectX = tX - 6; selRectY = y - 6; - std::string title = data::curUser.titles[selected].getTitle(); + std::string title = data::curUser.titles[data::selData].getTitle(); unsigned titleWidth = textGetWidth(title.c_str(), ui::shared, 16); int rectWidth = titleWidth + 32, rectX = (tX + 64) - (rectWidth / 2); if(rectX < 16) @@ -84,9 +84,9 @@ namespace ui for(int i = 0; i < 32; i++) { selButtons[i].update(p); - if(i == selected - start && selButtons[i].getEvent() == BUTTON_RELEASED) + if(i == data::selData - start && selButtons[i].getEvent() == BUTTON_RELEASED) { - data::curData = data::curUser.titles[selected]; + data::curData = data::curUser.titles[data::selData]; if(fs::mountSave(data::curUser, data::curData)) { util::makeTitleDir(data::curUser, data::curData); @@ -99,7 +99,7 @@ namespace ui else if(selButtons[i].getEvent() == BUTTON_RELEASED) { if(start + i < (int)data::curUser.titles.size()) - selected = start + i; + data::selData = start + i; } } @@ -117,9 +117,9 @@ namespace ui if(start + 32 < (int)data::curUser.titles.size()) { start += 8; - selected += 8; - if(selected > (int)data::curUser.titles.size() - 1) - selected = data::curUser.titles.size() - 1; + data::selData += 8; + if(data::selData > (int)data::curUser.titles.size() - 1) + data::selData = data::curUser.titles.size() - 1; } } break; @@ -129,7 +129,7 @@ namespace ui if(start - 8 >= 0) { start -= 8; - selected -= 8; + data::selData -= 8; } } break; @@ -137,41 +137,41 @@ namespace ui if(down & KEY_RIGHT) { - if(selected < (int)data::curUser.titles.size() - 1) - selected++; + if(data::selData < (int)data::curUser.titles.size() - 1) + data::selData++; - if(selected >= (int)start + 32) + if(data::selData >= (int)start + 32) start += 8; } else if(down & KEY_LEFT) { - if(selected > 0) - selected--; + if(data::selData > 0) + data::selData--; - if(selected < (int)start) + if(data::selData < (int)start) start -= 8; } else if(down & KEY_UP) { - selected -= 8; - if(selected < 0) - selected = 0; + data::selData -= 8; + if(data::selData < 0) + data::selData = 0; - if(selected < start) + if(data::selData < start) start -= 8; } else if(down & KEY_DOWN) { - selected += 8; - if(selected > (int)data::curUser.titles.size() - 1) - selected = data::curUser.titles.size() - 1; + data::selData += 8; + if(data::selData > (int)data::curUser.titles.size() - 1) + data::selData = data::curUser.titles.size() - 1; - if(selected - start >= 32) + if(data::selData - start >= 32) start += 8; } else if(down & KEY_A || ttlNav[0].getEvent() == BUTTON_RELEASED) { - data::curData = data::curUser.titles[selected]; + data::curData = data::curUser.titles[data::selData]; if(fs::mountSave(data::curUser, data::curData)) { util::makeTitleDir(data::curUser, data::curData); @@ -187,19 +187,45 @@ namespace ui } else if(down & KEY_X || ttlNav[2].getEvent() == BUTTON_RELEASED) { - std::string confStr = "Are you 100% sure you want to add \"" + data::curUser.titles[selected].getTitle() + \ + std::string confStr = "Are you 100% sure you want to add \"" + data::curUser.titles[data::selData].getTitle() + \ "\" to your blacklist?"; if(ui::confirm(confStr)) - data::blacklistAdd(data::curUser, data::curUser.titles[selected]); + data::blacklistAdd(data::curUser, data::curUser.titles[data::selData]); } else if(down & KEY_B || ttlNav[3].getEvent() == BUTTON_RELEASED) { start = 0; - selected = 0; + data::selData = 0; selRectX = 64; selRectY = 90; mstate = USR_SEL; return; } + else if(down & KEY_L) + { + data::selUser--; + if(data::selUser < 0) + data::selUser = data::users.size() -1; + + start = 0; + data::selData = 0; + selRectX = 64, selRectY = 90; + data::curUser = data::users[data::selUser]; + + ui::showPopup(data::curUser.getUsername(), POP_FRAME_DEFAULT); + } + else if(down & KEY_R) + { + data::selUser++; + if(data::selUser > (int)data::users.size() - 1) + data::selUser = 0; + + start = 0; + data::selData = 0; + selRectX = 64, selRectY = 90; + data::curUser = data::users[data::selUser]; + + ui::showPopup(data::curUser.getUsername(), POP_FRAME_DEFAULT); + } } } diff --git a/src/ui/usrsel.cpp b/src/ui/usrsel.cpp index 8a7e579..06d0bf9 100644 --- a/src/ui/usrsel.cpp +++ b/src/ui/usrsel.cpp @@ -3,6 +3,7 @@ #include #include +#include "data.h" #include "ui.h" #include "uiupdate.h" #include "file.h" @@ -14,7 +15,7 @@ namespace ui void updateUserMenu(const uint64_t& down, const uint64_t& held, const touchPosition& p) { //Static so they don't get reset every loop - static int start = 0, selected = 0; + static int start = 0; static uint8_t clrShft = 0; static bool clrAdd = true; @@ -51,12 +52,12 @@ namespace ui if(i == endUser) break; - if((int)i == selected) + if((int)i == data::selUser) { selRectX = tX - 6; selRectY = y - 6; - std::string username = data::users[selected].getUsername(); + std::string username = data::users[data::selUser].getUsername(); unsigned userWidth = textGetWidth(username.c_str(), ui::shared, 16); int userRectWidth = userWidth + 32, userRectX = (tX + 64) - (userRectWidth / 2); if(userRectX < 16) @@ -77,15 +78,15 @@ namespace ui for(int i = 0; i < 32; i++) { selButtons[i].update(p); - if(selected == i && selButtons[i].getEvent() == BUTTON_RELEASED) + if(data::selUser == i && selButtons[i].getEvent() == BUTTON_RELEASED) { - data::curUser = data::users[selected]; + data::curUser = data::users[data::selUser]; mstate = TTL_SEL; } else if(selButtons[i].getEvent() == BUTTON_RELEASED) { if(start + i < (int)data::users.size()) - selected = start + i; + data::selUser = start + i; } } @@ -98,45 +99,41 @@ namespace ui if(down & KEY_RIGHT) { - if(selected < (int)data::users.size() - 1) - selected++; + if(data::selUser < (int)data::users.size() - 1) + data::selUser++; - if(selected >= (int)start + 32) + if(data::selUser >= (int)start + 32) start += 8; } else if(down & KEY_LEFT) { - if(selected > 0) - selected--; + if(data::selUser > 0) + data::selUser--; - if(selected < start) + if(data::selUser < start) start -= 8; } else if(down & KEY_UP) { - selected -= 8; - if(selected < 0) - selected = 0; + data::selUser -= 8; + if(data::selUser < 0) + data::selUser = 0; - if(selected - start >= 32) + if(data::selUser - start >= 32) start -= 8; } else if(down & KEY_DOWN) { - selected += 8; - if(selected > (int)data::users.size() - 1) - selected = data::users.size() - 1; + data::selUser += 8; + if(data::selUser > (int)data::users.size() - 1) + data::selUser = data::users.size() - 1; - if(selected - start >= 32) + if(data::selUser - start >= 32) start += 8; } else if(down & KEY_A || usrNav[0].getEvent() == BUTTON_RELEASED) { - data::curUser = data::users[selected]; - //Reset this - start = 0; - selected = 0; - selRectX = 64, selRectY = 90; + data::curUser = data::users[data::selUser]; mstate = TTL_SEL; } else if(down & KEY_Y || usrNav[1].getEvent() == BUTTON_RELEASED)