mirror of
https://github.com/J-D-K/JKSV.git
synced 2026-07-17 00:22:27 -05:00
Clean up some stuff.
This commit is contained in:
parent
2918aedff9
commit
3969716bb9
6
Makefile
6
Makefile
|
|
@ -38,7 +38,7 @@ INCLUDES := inc
|
|||
EXEFS_SRC := exefs_src
|
||||
APP_TITLE := JKSV
|
||||
APP_AUTHOR := JK
|
||||
APP_VERSION := 06.10.2020
|
||||
APP_VERSION := 06.23.2020
|
||||
ROMFS := romfs
|
||||
ICON := romfs/icon.jpg
|
||||
|
||||
|
|
@ -50,14 +50,14 @@ ARCH := -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE
|
|||
override CFLAGS += -g -Wall -O2 -ffunction-sections \
|
||||
$(ARCH) $(DEFINES)
|
||||
|
||||
override CFLAGS += $(INCLUDE) -D__SWITCH__ `freetype-config --cflags`
|
||||
override CFLAGS += $(INCLUDE) -D__SWITCH__ `freetype-config --cflags` `curl-config --cflags`
|
||||
|
||||
CXXFLAGS:= $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++17
|
||||
|
||||
ASFLAGS := -g $(ARCH)
|
||||
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||
|
||||
LIBS := `freetype-config --libs` -lpng -ljpeg -lz -lminizip -lnx
|
||||
LIBS := `freetype-config --libs` `curl-config --libs` -lpng -ljpeg -lz -lminizip -lnx
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# list of directories containing libraries, this must be the top level containing
|
||||
|
|
|
|||
10
inc/curlfuncs.h
Normal file
10
inc/curlfuncs.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef CURLFUNCS_H
|
||||
#define CURLFUNCS_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
std::string getJSONURL(std::string *headers, const std::string& _url);
|
||||
bool getBinURL(std::vector<uint8_t> *out, const std::string& _url);
|
||||
|
||||
#endif // CURLFUNCS_H
|
||||
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
|
|
@ -119,6 +120,7 @@ namespace data
|
|||
|
||||
//User vector
|
||||
extern std::vector<user> users;
|
||||
extern std::unordered_map<uint64_t, std::pair<tex *, tex *>> icons;
|
||||
|
||||
//Options and info
|
||||
//Restores config to default
|
||||
|
|
|
|||
|
|
@ -9,14 +9,23 @@ namespace ui
|
|||
void textTitlePrep(data::user& u);
|
||||
|
||||
void textUserMenuUpdate(const uint64_t& down, const uint64_t& held);
|
||||
void drawTextUserMenu();
|
||||
|
||||
void textTitleMenuUpdate(const uint64_t& down, const uint64_t& held);
|
||||
void drawTextTitleMenu();
|
||||
|
||||
void textFolderMenuUpdate(const uint64_t& down, const uint64_t& held);
|
||||
void drawTextFolderMenu();
|
||||
|
||||
void updateExMenu(const uint64_t& down, const uint64_t& held);
|
||||
void drawExMenu();
|
||||
|
||||
void exMenuPrep();
|
||||
|
||||
//Options
|
||||
void optMenuInit();
|
||||
void updateOptMenu(const uint64_t& down, const uint64_t& held);
|
||||
void drawOptMenu();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -6,9 +6,16 @@
|
|||
namespace ui
|
||||
{
|
||||
void updateUserMenu(const uint64_t& down, const uint64_t& held);
|
||||
void drawUserMenu();
|
||||
|
||||
void updateTitleMenu(const uint64_t& down, const uint64_t& held);
|
||||
void drawTitleMenu();
|
||||
|
||||
void updateFolderMenu(const uint64_t& down, const uint64_t& held);
|
||||
void drawFolderMenu();
|
||||
|
||||
void updateAdvMode(const uint64_t& down, const uint64_t& held);
|
||||
void drawAdvMode();
|
||||
|
||||
//needed here since it uses static menu
|
||||
void folderMenuPrepare(data::user& usr, data::titledata& dat);
|
||||
|
|
|
|||
55
src/curfuncs.cpp
Normal file
55
src/curfuncs.cpp
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
#include <curl/curl.h>
|
||||
|
||||
size_t writeDataString(void *buff, size_t sz, size_t cnt, void *u)
|
||||
{
|
||||
std::string *json = (std::string *)u;
|
||||
json->append((const char *)buff);
|
||||
return sz * cnt;
|
||||
}
|
||||
|
||||
std::string getJSONURL(std::string *headers, const std::string& _url)
|
||||
{
|
||||
std::string ret;
|
||||
CURL *handle = curl_easy_init();
|
||||
curl_easy_setopt(handle, CURLOPT_URL, _url.c_str());
|
||||
curl_easy_setopt(handle, CURLOPT_HTTPGET, 1);
|
||||
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, writeDataString);
|
||||
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &ret);
|
||||
if(headers)
|
||||
{
|
||||
curl_easy_setopt(handle, CURLOPT_HEADERFUNCTION, writeDataString);
|
||||
curl_easy_setopt(handle, CURLOPT_HEADERDATA, headers);
|
||||
}
|
||||
|
||||
if(curl_easy_perform(handle) != CURLE_OK)
|
||||
ret.clear();//JIC
|
||||
|
||||
curl_easy_cleanup(handle);
|
||||
return ret;
|
||||
}
|
||||
|
||||
size_t writeDataBin(uint8_t *buff, size_t sz, size_t cnt, void *u)
|
||||
{
|
||||
size_t sizeIn = sz * cnt;
|
||||
std::vector<uint8_t> *binData = (std::vector<uint8_t> *)u;
|
||||
binData->reserve(sizeIn);
|
||||
binData->insert(binData->end(), buff, buff + sizeIn);
|
||||
return sizeIn;
|
||||
}
|
||||
|
||||
bool getBinURL(std::vector<uint8_t> *out, const std::string& _url)
|
||||
{
|
||||
bool ret = false;
|
||||
CURL *handle = curl_easy_init();
|
||||
curl_easy_setopt(handle, CURLOPT_URL, _url.c_str());
|
||||
curl_easy_setopt(handle, CURLOPT_HTTPGET, 1);
|
||||
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, writeDataBin);
|
||||
curl_easy_setopt(handle, CURLOPT_WRITEDATA, out);
|
||||
if(curl_easy_perform(handle) == CURLE_OK)
|
||||
ret = true;
|
||||
|
||||
curl_easy_cleanup(handle);
|
||||
return ret;
|
||||
}
|
||||
24
src/data.cpp
24
src/data.cpp
|
|
@ -31,7 +31,7 @@ static bool sysBCATPushed = false, cachePushed = false, tempPushed = false;
|
|||
static std::vector<uint64_t> blacklist;
|
||||
static std::vector<uint64_t> favorites;
|
||||
static std::unordered_map<uint64_t, std::string> pathDefs;
|
||||
static std::unordered_map<uint64_t, std::pair<tex *, tex *>> icons;
|
||||
std::unordered_map<uint64_t, std::pair<tex *, tex *>> data::icons;
|
||||
|
||||
//Sorts titles sort-of alphabetically
|
||||
static struct
|
||||
|
|
@ -117,8 +117,8 @@ static inline void loadCreateIcon(const uint64_t& _id, size_t _sz, const NsAppli
|
|||
fclose(jpegOut);
|
||||
}
|
||||
|
||||
icons[_id].first = texLoadJPEGMem(_d->icon, _sz);
|
||||
icons[_id].second = createFavIcon(icons[_id].first);
|
||||
data::icons[_id].first = texLoadJPEGMem(_d->icon, _sz);
|
||||
data::icons[_id].second = createFavIcon(data::icons[_id].first);
|
||||
}
|
||||
|
||||
static void loadCreateSystemIcon(const uint64_t& _id)
|
||||
|
|
@ -126,8 +126,8 @@ static void loadCreateSystemIcon(const uint64_t& _id)
|
|||
char tmp[16];
|
||||
sprintf(tmp, "%08X", (uint32_t)_id);
|
||||
|
||||
icons[_id].first = util::createIconGeneric(tmp);
|
||||
icons[_id].second = createFavIcon(icons[_id].first);
|
||||
data::icons[_id].first = util::createIconGeneric(tmp);
|
||||
data::icons[_id].second = createFavIcon(data::icons[_id].first);
|
||||
}
|
||||
|
||||
static inline std::string getIDStr(const uint64_t& _id)
|
||||
|
|
@ -174,6 +174,7 @@ static bool testMount(const FsSaveDataInfo& _inf)
|
|||
|
||||
bool data::loadUsersTitles(bool clearUsers)
|
||||
{
|
||||
static unsigned systemUserCount = 3;
|
||||
FsSaveDataInfoReader it;
|
||||
FsSaveDataInfo info;
|
||||
s64 total = 0;
|
||||
|
|
@ -185,6 +186,7 @@ bool data::loadUsersTitles(bool clearUsers)
|
|||
u.titles.clear();
|
||||
if(clearUsers)
|
||||
{
|
||||
systemUserCount = 3;
|
||||
for(data::user& u : data::users)
|
||||
u.delIcon();
|
||||
|
||||
|
|
@ -218,6 +220,7 @@ bool data::loadUsersTitles(bool clearUsers)
|
|||
info.uid = util::u128ToAccountUID(4);
|
||||
if(!sysBCATPushed)
|
||||
{
|
||||
++systemUserCount;
|
||||
sysBCATPushed = true;
|
||||
users.emplace_back(util::u128ToAccountUID(4), "Sys. BCAT");
|
||||
}
|
||||
|
|
@ -227,6 +230,7 @@ bool data::loadUsersTitles(bool clearUsers)
|
|||
info.uid = util::u128ToAccountUID(5);
|
||||
if(!cachePushed)
|
||||
{
|
||||
++systemUserCount;
|
||||
cachePushed = true;
|
||||
users.emplace_back(util::u128ToAccountUID(5), "Cache");
|
||||
}
|
||||
|
|
@ -236,6 +240,7 @@ bool data::loadUsersTitles(bool clearUsers)
|
|||
info.uid = util::u128ToAccountUID(6);
|
||||
if(!tempPushed)
|
||||
{
|
||||
++systemUserCount;
|
||||
tempPushed = true;
|
||||
users.emplace_back(util::u128ToAccountUID(6), "Temp");
|
||||
}
|
||||
|
|
@ -245,7 +250,7 @@ bool data::loadUsersTitles(bool clearUsers)
|
|||
int u = getUserIndex(info.uid);
|
||||
if(u == -1)
|
||||
{
|
||||
users.emplace(data::users.end() - 3, info.uid, "");
|
||||
users.emplace(data::users.end() - systemUserCount, info.uid, "");
|
||||
u = getUserIndex(info.uid);
|
||||
}
|
||||
users[u].titles.emplace_back(info, dat);
|
||||
|
|
@ -293,8 +298,11 @@ void data::exit()
|
|||
for(data::user& u : data::users) u.delIcon();
|
||||
for(auto& icn : icons)
|
||||
{
|
||||
texDestroy(icn.second.first);
|
||||
texDestroy(icn.second.second);
|
||||
if(icn.second.first)
|
||||
texDestroy(icn.second.first);
|
||||
|
||||
if(icn.second.second)
|
||||
texDestroy(icn.second.second);
|
||||
}
|
||||
|
||||
saveFav();
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ extern "C"
|
|||
setInitialize();
|
||||
accountInitialize(AccountServiceType_System);
|
||||
pmshellInitialize();
|
||||
//socketInitializeDefault();
|
||||
}
|
||||
|
||||
void userAppExit(void)
|
||||
|
|
@ -34,6 +35,7 @@ extern "C"
|
|||
setExit();
|
||||
accountExit();
|
||||
pmshellExit();
|
||||
//socketExit();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
15
src/ui.cpp
15
src/ui.cpp
|
|
@ -10,7 +10,7 @@
|
|||
#include "util.h"
|
||||
#include "file.h"
|
||||
|
||||
#define VER_STRING "v. 06.10.2020"
|
||||
#define VER_STRING "v. 06.23.2020"
|
||||
|
||||
//text mode
|
||||
bool ui::textMode = false;
|
||||
|
|
@ -408,43 +408,52 @@ void ui::drawUI()
|
|||
{
|
||||
case USR_SEL:
|
||||
texDrawNoAlpha(usrGuide, frameBuffer, userHelpX, 673);
|
||||
ui::drawUserMenu();
|
||||
break;
|
||||
|
||||
case TTL_SEL:
|
||||
texDrawNoAlpha(ttlGuide, frameBuffer, titleHelpX, 673);
|
||||
ui::drawTitleMenu();
|
||||
break;
|
||||
|
||||
case FLD_SEL:
|
||||
texDrawNoAlpha(sideBar, frameBuffer, 0, 88);
|
||||
texDrawNoAlpha(fldrGuide, frameBuffer, folderHelpX, 673);
|
||||
ui::drawFolderMenu();
|
||||
break;
|
||||
|
||||
case TXT_USR:
|
||||
texDrawNoAlpha(sideBar, frameBuffer, 0, 88);
|
||||
texDrawNoAlpha(usrGuide, frameBuffer, userHelpX, 673);
|
||||
ui::drawTextUserMenu();
|
||||
break;
|
||||
|
||||
case TXT_TTL:
|
||||
texDrawNoAlpha(sideBar, frameBuffer, 0, 88);
|
||||
texDrawNoAlpha(ttlGuide, frameBuffer, titleHelpX, 673);
|
||||
ui::drawTextTitleMenu();
|
||||
break;
|
||||
|
||||
case TXT_FLD:
|
||||
texDrawNoAlpha(sideBar, frameBuffer, 0, 88);
|
||||
texDrawNoAlpha(fldrGuide, frameBuffer, folderHelpX, 673);
|
||||
ui::drawTextFolderMenu();
|
||||
break;
|
||||
|
||||
case EX_MNU:
|
||||
texDrawNoAlpha(sideBar, frameBuffer, 0, 88);
|
||||
ui::drawExMenu();
|
||||
break;
|
||||
|
||||
case OPT_MNU:
|
||||
texDrawNoAlpha(sideBar, frameBuffer, 0, 88);
|
||||
texDrawNoAlpha(optGuide, frameBuffer, optHelpX, 673);
|
||||
ui::drawOptMenu();
|
||||
break;
|
||||
|
||||
case ADV_MDE:
|
||||
drawRect(frameBuffer, 640, 88, 1, 559, ui::txtCont);
|
||||
drawAdvMode();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -492,9 +501,6 @@ void ui::drawBoundBox(int x, int y, int w, int h, int clrSh)
|
|||
|
||||
void ui::runApp(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
//Draw first. Shouldn't, but it simplifies the showX functions
|
||||
drawUI();
|
||||
|
||||
switch(mstate)
|
||||
{
|
||||
case USR_SEL:
|
||||
|
|
@ -533,5 +539,6 @@ void ui::runApp(const uint64_t& down, const uint64_t& held)
|
|||
updateOptMenu(down, held);
|
||||
break;
|
||||
}
|
||||
drawUI();
|
||||
drawPopup(down);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -369,6 +369,37 @@ void ui::advModePrep(const std::string& svDev, const FsSaveDataType& _type, bool
|
|||
advMenuCtrl = 0;
|
||||
}
|
||||
|
||||
void ui::drawAdvMode()
|
||||
{
|
||||
saveMenu.draw(ui::txtCont);
|
||||
sdMenu.draw(ui::txtCont);
|
||||
|
||||
drawTextWrap(savePath.c_str(), frameBuffer, ui::shared, 30, 654, 14, ui::txtCont, 600);
|
||||
drawTextWrap(sdPath.c_str(), frameBuffer, ui::shared, 640, 654, 14, ui::txtCont, 600);
|
||||
|
||||
//draw copy menu if it's supposed to be up
|
||||
if(advMenuCtrl == 2)
|
||||
{
|
||||
switch(advPrev)
|
||||
{
|
||||
case 0:
|
||||
copyMenu.setParams(176, 278, 304);
|
||||
copyMenu.editOpt(0, advMenuStr[0] + "sdmc");
|
||||
ui::drawTextbox(frameBuffer, 168, 236, 320, 268);
|
||||
drawText(dev.c_str(), frameBuffer, ui::shared, 176, 250, 18, ui::txtDiag);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
copyMenu.setParams(816, 278, 304);
|
||||
copyMenu.editOpt(0, advMenuStr[0] + dev);
|
||||
ui::drawTextbox(frameBuffer, 808, 236, 320, 268);
|
||||
drawText("SDMC", frameBuffer, ui::shared, 816, 250, 18, ui::txtDiag);
|
||||
break;
|
||||
}
|
||||
copyMenu.draw(ui::txtDiag);
|
||||
}
|
||||
}
|
||||
|
||||
void ui::updateAdvMode(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
//0 = save; 1 = sd; 2 = cpy
|
||||
|
|
@ -387,12 +418,6 @@ void ui::updateAdvMode(const uint64_t& down, const uint64_t& held)
|
|||
break;
|
||||
}
|
||||
|
||||
saveMenu.draw(ui::txtCont);
|
||||
sdMenu.draw(ui::txtCont);
|
||||
|
||||
drawTextWrap(savePath.c_str(), frameBuffer, ui::shared, 30, 654, 14, ui::txtCont, 600);
|
||||
drawTextWrap(sdPath.c_str(), frameBuffer, ui::shared, 640, 654, 14, ui::txtCont, 600);
|
||||
|
||||
//OH BOY HERE WE GO
|
||||
if(down & KEY_A)
|
||||
{
|
||||
|
|
@ -501,27 +526,5 @@ void ui::updateAdvMode(const uint64_t& down, const uint64_t& held)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//draw copy menu if it's supposed to be up
|
||||
if(advMenuCtrl == 2)
|
||||
{
|
||||
switch(advPrev)
|
||||
{
|
||||
case 0:
|
||||
copyMenu.setParams(176, 278, 304);
|
||||
copyMenu.editOpt(0, advMenuStr[0] + "sdmc");
|
||||
ui::drawTextbox(frameBuffer, 168, 236, 320, 268);
|
||||
drawText(dev.c_str(), frameBuffer, ui::shared, 176, 250, 18, ui::txtDiag);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
copyMenu.setParams(816, 278, 304);
|
||||
copyMenu.editOpt(0, advMenuStr[0] + dev);
|
||||
ui::drawTextbox(frameBuffer, 808, 236, 320, 268);
|
||||
drawText("SDMC", frameBuffer, ui::shared, 816, 250, 18, ui::txtDiag);
|
||||
break;
|
||||
}
|
||||
copyMenu.draw(ui::txtDiag);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -173,41 +173,53 @@ void ui::deleteBackup(unsigned ind)
|
|||
folderMenuPrepare(data::curUser, data::curData);
|
||||
}
|
||||
|
||||
void ui::drawFolderMenu()
|
||||
{
|
||||
texDraw(data::curData.getIcon(), frameBuffer, 96, 98);
|
||||
drawTextWrap(folderMenuInfo.c_str(), frameBuffer, ui::shared, 60, 370, 16, ui::txtCont, 360);
|
||||
folderMenu.draw(ui::txtCont);
|
||||
}
|
||||
|
||||
void ui::updateFolderMenu(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
folderMenu.handleInput(down, held);
|
||||
|
||||
//Draw folder menu
|
||||
folderMenu.draw(ui::txtCont);
|
||||
switch(down)
|
||||
{
|
||||
case KEY_A:
|
||||
if(folderMenu.getSelected() == 0)
|
||||
ui::createNewBackup(held);
|
||||
else
|
||||
ui::overwriteBackup(folderMenu.getSelected() - 1);
|
||||
break;
|
||||
|
||||
texDraw(data::curData.getIcon(), frameBuffer, 96, 98);
|
||||
drawTextWrap(folderMenuInfo.c_str(), frameBuffer, ui::shared, 60, 370, 16, ui::txtCont, 360);
|
||||
case KEY_B:
|
||||
fs::unmountSave();
|
||||
ui::changeState(TTL_SEL);
|
||||
break;
|
||||
|
||||
if(down & KEY_A)
|
||||
{
|
||||
if(folderMenu.getSelected() == 0)
|
||||
ui::createNewBackup(held);
|
||||
else
|
||||
ui::overwriteBackup(folderMenu.getSelected() - 1);
|
||||
}
|
||||
else if(down & KEY_Y)
|
||||
ui::restoreBackup(folderMenu.getSelected() - 1);
|
||||
else if(down & KEY_X && folderMenu.getSelected() > 0)
|
||||
ui::deleteBackup(folderMenu.getSelected() - 1);
|
||||
else if(down & KEY_MINUS)
|
||||
{
|
||||
advModePrep("sv:/", data::curData.getType(), true);
|
||||
ui::changeState(ADV_MDE);
|
||||
}
|
||||
else if(down & KEY_ZR && data::curData.getType() != FsSaveDataType_System && confirm(true, ui::confEraseFolder.c_str(), data::curData.getTitle().c_str()))
|
||||
{
|
||||
fs::delDir("sv:/");
|
||||
fsdevCommitDevice("sv");
|
||||
}
|
||||
else if(down & KEY_B)
|
||||
{
|
||||
fs::unmountSave();
|
||||
ui::changeState(TTL_SEL);
|
||||
case KEY_X:
|
||||
if(folderMenu.getSelected() > 0)
|
||||
ui::deleteBackup(folderMenu.getSelected() - 1);
|
||||
break;
|
||||
|
||||
case KEY_Y:
|
||||
if(folderMenu.getSelected() > 0)
|
||||
ui::restoreBackup(folderMenu.getSelected() - 1);
|
||||
break;
|
||||
|
||||
case KEY_ZR:
|
||||
if(data::curData.getType() != FsSaveDataType_System && confirm(true, ui::confEraseFolder.c_str(), data::curData.getTitle().c_str()))
|
||||
{
|
||||
fs::delDir("sv:/");
|
||||
fsdevCommitDevice("sv");
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_MINUS:
|
||||
advModePrep("sv:/", data::curData.getType(), true);
|
||||
ui::changeState(ADV_MDE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ static inline void reset()
|
|||
data::selData = 0;
|
||||
}
|
||||
|
||||
void ui::updateTitleMenu(const uint64_t& down, const uint64_t& held)
|
||||
void ui::drawTitleMenu()
|
||||
{
|
||||
if(clrAdd)
|
||||
{
|
||||
|
|
@ -79,90 +79,92 @@ void ui::updateTitleMenu(const uint64_t& down, const uint64_t& held)
|
|||
texDrawSkipNoAlpha(data::curUser.titles[i].getIcon(), frameBuffer, tX, y);
|
||||
}
|
||||
}
|
||||
|
||||
if(down & KEY_RIGHT)
|
||||
{
|
||||
if(data::selData < (int)data::curUser.titles.size() - 1)
|
||||
data::selData++;
|
||||
|
||||
if(data::selData >= (int)start + 32)
|
||||
start += 8;
|
||||
}
|
||||
else if(down & KEY_LEFT)
|
||||
{
|
||||
if(data::selData > 0)
|
||||
data::selData--;
|
||||
|
||||
if(data::selData < (int)start)
|
||||
start -= 8;
|
||||
}
|
||||
else if(down & KEY_UP)
|
||||
{
|
||||
data::selData -= 8;
|
||||
if(data::selData < 0)
|
||||
data::selData = 0;
|
||||
|
||||
if(data::selData < start)
|
||||
start -= 8;
|
||||
}
|
||||
else if(down & KEY_DOWN)
|
||||
{
|
||||
data::selData += 8;
|
||||
if(data::selData > (int)data::curUser.titles.size() - 1)
|
||||
data::selData = data::curUser.titles.size() - 1;
|
||||
|
||||
if(data::selData - start >= 32)
|
||||
start += 8;
|
||||
}
|
||||
else if(down & KEY_A && fs::mountSave(data::curUser, data::curData))
|
||||
{
|
||||
folderMenuPrepare(data::curUser, data::curData);
|
||||
//Wanna change this sometime
|
||||
ui::folderMenuInfo = util::getInfoString(data::curUser, data::curData);
|
||||
|
||||
ui::changeState(FLD_SEL);
|
||||
}
|
||||
else if(down & KEY_Y)
|
||||
fs::dumpAllUserSaves(data::curUser);
|
||||
else if(down & KEY_MINUS)
|
||||
{
|
||||
if(ui::confirm(false, ui::confBlacklist.c_str(), data::curUser.titles[data::selData].getTitle().c_str()))
|
||||
data::blacklistAdd(data::curData);
|
||||
}
|
||||
else if(down & KEY_B)
|
||||
{
|
||||
reset();
|
||||
ui::changeState(USR_SEL);
|
||||
return;
|
||||
}
|
||||
else if(down & KEY_L)
|
||||
{
|
||||
if(--data::selUser < 0)
|
||||
data::selUser = data::users.size() - 1;
|
||||
|
||||
reset();
|
||||
ui::showPopup(POP_FRAME_DEFAULT, data::curUser.getUsername().c_str());
|
||||
}
|
||||
else if(down & KEY_R)
|
||||
{
|
||||
if(++data::selUser > (int)data::users.size() - 1)
|
||||
data::selUser = 0;
|
||||
|
||||
reset();
|
||||
ui::showPopup(POP_FRAME_DEFAULT, data::curUser.getUsername().c_str());
|
||||
}
|
||||
else if(down & KEY_ZR)
|
||||
{
|
||||
if(data::curData.getType() == FsSaveDataType_System)
|
||||
ui::showMessage("*NO*", "Deleting system save archives is disabled.");
|
||||
else if(confirm(true, ui::confEraseNand.c_str(), data::curData.getTitle().c_str()))
|
||||
{
|
||||
fsDeleteSaveDataFileSystemBySaveDataSpaceId(FsSaveDataSpaceId_User, data::curData.getSaveID());
|
||||
data::loadUsersTitles(false);
|
||||
data::selData = 0;
|
||||
}
|
||||
}
|
||||
else if(down & KEY_X)
|
||||
data::favoriteTitle(data::curData);
|
||||
}
|
||||
|
||||
void ui::updateTitleMenu(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
switch(down)
|
||||
{
|
||||
case KEY_A:
|
||||
if(fs::mountSave(data::curUser, data::curData))
|
||||
{
|
||||
folderMenuPrepare(data::curUser, data::curData);
|
||||
ui::folderMenuInfo = util::getInfoString(data::curUser, data::curData);
|
||||
ui::changeState(FLD_SEL);
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_B:
|
||||
reset();
|
||||
ui::changeState(USR_SEL);
|
||||
break;
|
||||
|
||||
case KEY_X:
|
||||
data::favoriteTitle(data::curData);
|
||||
break;
|
||||
|
||||
case KEY_Y:
|
||||
fs::dumpAllUserSaves(data::curUser);
|
||||
break;
|
||||
|
||||
case KEY_L:
|
||||
if(--data::selUser < 0)
|
||||
data::selUser = data::users.size() - 1;
|
||||
reset();
|
||||
ui::showPopup(POP_FRAME_DEFAULT, data::curUser.getUsername().c_str());
|
||||
break;
|
||||
|
||||
case KEY_R:
|
||||
if(++data::selUser == (int)data::users.size())
|
||||
data::selUser = 0;
|
||||
reset();
|
||||
ui::showPopup(POP_FRAME_DEFAULT, data::curUser.getUsername().c_str());
|
||||
break;
|
||||
|
||||
case KEY_ZR:
|
||||
if(data::curData.getType() != FsSaveDataType_System && confirm(true, ui::confEraseNand.c_str(), data::curData.getTitle().c_str()))
|
||||
{
|
||||
fsDeleteSaveDataFileSystemBySaveDataSpaceId(FsSaveDataSpaceId_User, data::curData.getSaveID());
|
||||
data::loadUsersTitles(false);
|
||||
data::selData = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_MINUS:
|
||||
if(ui::confirm(false, ui::confBlacklist.c_str(), data::curUser.titles[data::selData].getTitle().c_str()))
|
||||
data::blacklistAdd(data::curData);
|
||||
break;
|
||||
|
||||
case KEY_LSTICK_UP:
|
||||
case KEY_DUP:
|
||||
data::selData -= 8;
|
||||
if(data::selData < 0)
|
||||
data::selData = 0;
|
||||
break;
|
||||
|
||||
case KEY_LSTICK_DOWN:
|
||||
case KEY_DDOWN:
|
||||
data::selData += 8;
|
||||
if(data::selData > (int)data::curUser.titles.size() - 1)
|
||||
data::selData = data::curUser.titles.size() - 1;
|
||||
break;
|
||||
|
||||
case KEY_LSTICK_LEFT:
|
||||
case KEY_DLEFT:
|
||||
if(data::selData > 0)
|
||||
--data::selData;
|
||||
break;
|
||||
|
||||
case KEY_LSTICK_RIGHT:
|
||||
case KEY_DRIGHT:
|
||||
if(data::selData < (int)data::curUser.titles.size() - 1)
|
||||
++data::selData;
|
||||
break;
|
||||
}
|
||||
|
||||
if(data::selData < start)
|
||||
start -= 8;
|
||||
else if(data::selData - start >= 32)
|
||||
start += 8;
|
||||
}
|
||||
|
||||
|
|
|
|||
242
src/ui/txtui.cpp
242
src/ui/txtui.cpp
|
|
@ -49,137 +49,165 @@ void ui::textTitlePrep(data::user& u)
|
|||
void ui::textUserMenuUpdate(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
userMenu.handleInput(down, held);
|
||||
userMenu.draw(ui::txtCont);
|
||||
|
||||
data::selUser = userMenu.getSelected();
|
||||
|
||||
if(down & KEY_A)
|
||||
switch(down)
|
||||
{
|
||||
if(data::curUser.titles.size() > 0)
|
||||
{
|
||||
textTitlePrep(data::curUser);
|
||||
ui::changeState(TXT_TTL);
|
||||
}
|
||||
else
|
||||
ui::showPopup(POP_FRAME_DEFAULT, ui::noSavesFound.c_str(), data::curUser.getUsername().c_str());
|
||||
case KEY_A:
|
||||
if(data::curUser.titles.size() > 0)
|
||||
{
|
||||
ui::textTitlePrep(data::curUser);
|
||||
ui::changeState(TXT_TTL);
|
||||
}
|
||||
else
|
||||
ui::showPopup(POP_FRAME_DEFAULT, ui::noSavesFound.c_str(), data::curUser.getUsername().c_str());
|
||||
break;
|
||||
|
||||
case KEY_X:
|
||||
ui::textMode = false;
|
||||
ui::changeState(USR_SEL);
|
||||
break;
|
||||
|
||||
case KEY_Y:
|
||||
{
|
||||
bool cont = true;
|
||||
for(unsigned i = 0; i < data::users.size() - 2; i++)
|
||||
{
|
||||
if(cont)
|
||||
cont = fs::dumpAllUserSaves(data::users[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_ZR:
|
||||
ui::changeState(EX_MNU);
|
||||
break;
|
||||
|
||||
case KEY_MINUS:
|
||||
ui::changeState(OPT_MNU);
|
||||
break;
|
||||
}
|
||||
else if(down & KEY_Y)
|
||||
{
|
||||
for(unsigned i = 0; i < data::users.size(); i++)
|
||||
fs::dumpAllUserSaves(data::users[i]);
|
||||
}
|
||||
else if(down & KEY_X)
|
||||
{
|
||||
ui::textMode = false;
|
||||
ui::changeState(USR_SEL);
|
||||
}
|
||||
else if(down & KEY_ZR)
|
||||
{
|
||||
fs::unmountSave();
|
||||
ui::exMenuPrep();
|
||||
ui::changeState(EX_MNU);
|
||||
}
|
||||
else if(down & KEY_MINUS)
|
||||
ui::changeState(OPT_MNU);
|
||||
}
|
||||
|
||||
void ui::drawTextUserMenu()
|
||||
{
|
||||
userMenu.draw(ui::txtCont);
|
||||
}
|
||||
|
||||
void ui::textTitleMenuUpdate(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
titleMenu.handleInput(down, held);
|
||||
titleMenu.draw(ui::txtCont);
|
||||
|
||||
data::selData = titleMenu.getSelected();
|
||||
|
||||
if(down & KEY_A)
|
||||
switch(down)
|
||||
{
|
||||
if(fs::mountSave(data::curUser, data::curData))
|
||||
{
|
||||
folderMenuPrepare(data::curUser, data::curData);
|
||||
ui::changeState(TXT_FLD);
|
||||
}
|
||||
}
|
||||
else if(down & KEY_Y)
|
||||
{
|
||||
fs::dumpAllUserSaves(data::curUser);
|
||||
}
|
||||
else if(down & KEY_MINUS)
|
||||
{
|
||||
if(ui::confirm(false, ui::confBlacklist.c_str(), data::curData.getTitle().c_str()))
|
||||
data::blacklistAdd(data::curData);
|
||||
case KEY_A:
|
||||
if(fs::mountSave(data::curUser, data::curData))
|
||||
{
|
||||
folderMenuPrepare(data::curUser, data::curData);
|
||||
ui::folderMenuInfo = util::getInfoString(data::curUser, data::curData);
|
||||
ui::changeState(TXT_FLD);
|
||||
}
|
||||
break;
|
||||
|
||||
textTitlePrep(data::curUser);
|
||||
}
|
||||
else if(down & KEY_L)
|
||||
{
|
||||
if(--data::selUser < 0)
|
||||
data::selUser = data::users.size() - 1;
|
||||
textTitlePrep(data::curUser);
|
||||
ui::showPopup(POP_FRAME_DEFAULT, data::curUser.getUsername().c_str());
|
||||
}
|
||||
else if(down & KEY_R)
|
||||
{
|
||||
if(++data::selUser > (int)data::users.size() - 1)
|
||||
data::selUser = 0;
|
||||
textTitlePrep(data::curUser);
|
||||
ui::showPopup(POP_FRAME_DEFAULT, data::curUser.getUsername().c_str());
|
||||
}
|
||||
else if(down & KEY_X)
|
||||
{
|
||||
data::favoriteTitle(data::curData);
|
||||
textTitlePrep(data::curUser);
|
||||
}
|
||||
else if(down & KEY_ZR)
|
||||
{
|
||||
if(data::curData.getType() == FsSaveDataType_System)
|
||||
ui::showMessage("*NO*", "Deleting system save archives is disabled.");
|
||||
else if(confirm(true, ui::confEraseNand.c_str(), data::curData.getTitle().c_str()))
|
||||
{
|
||||
fsDeleteSaveDataFileSystemBySaveDataSpaceId(FsSaveDataSpaceId_User, data::curData.getSaveID());
|
||||
data::loadUsersTitles(false);
|
||||
case KEY_B:
|
||||
ui::changeState(TXT_USR);
|
||||
break;
|
||||
|
||||
case KEY_X:
|
||||
data::favoriteTitle(data::curData);
|
||||
break;
|
||||
|
||||
case KEY_Y:
|
||||
fs::dumpAllUserSaves(data::curUser);
|
||||
break;
|
||||
|
||||
case KEY_L:
|
||||
if(--data::selUser < 0)
|
||||
data::selUser = data::users.size() - 1;
|
||||
ui::textTitlePrep(data::curUser);
|
||||
}
|
||||
}
|
||||
else if(down & KEY_B)
|
||||
{
|
||||
data::selData = 0;
|
||||
ui::changeState(TXT_USR);
|
||||
ui::showPopup(POP_FRAME_DEFAULT, data::curUser.getUsername().c_str());
|
||||
break;
|
||||
|
||||
case KEY_R:
|
||||
if(++data::selUser == (int)data::users.size())
|
||||
data::selUser = 0;
|
||||
ui::textTitlePrep(data::curUser);
|
||||
ui::showPopup(POP_FRAME_DEFAULT, data::curUser.getUsername().c_str());
|
||||
break;
|
||||
|
||||
case KEY_ZR:
|
||||
if(data::curData.getType() != FsSaveDataType_System && confirm(true, ui::confEraseNand.c_str(), data::curData.getTitle().c_str()))
|
||||
{
|
||||
fsDeleteSaveDataFileSystemBySaveDataSpaceId(FsSaveDataSpaceId_User, data::curData.getSaveID());
|
||||
data::loadUsersTitles(false);
|
||||
data::selData = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_MINUS:
|
||||
if(ui::confirm(false, ui::confBlacklist.c_str(), data::curUser.titles[data::selData].getTitle().c_str()))
|
||||
data::blacklistAdd(data::curData);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ui::drawTextTitleMenu()
|
||||
{
|
||||
titleMenu.draw(ui::txtCont);
|
||||
}
|
||||
|
||||
void ui::textFolderMenuUpdate(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
titleMenu.draw(ui::txtCont);
|
||||
folderMenu.handleInput(down, held);
|
||||
folderMenu.draw(ui::txtCont);
|
||||
|
||||
if(down & KEY_A)
|
||||
switch(down)
|
||||
{
|
||||
if(folderMenu.getSelected() == 0)
|
||||
createNewBackup(held);
|
||||
else
|
||||
overwriteBackup(folderMenu.getSelected() - 1);
|
||||
}
|
||||
else if(down & KEY_Y && folderMenu.getSelected() > 0)
|
||||
restoreBackup(folderMenu.getSelected() - 1);
|
||||
else if(down & KEY_X && folderMenu.getSelected() > 0)
|
||||
deleteBackup(folderMenu.getSelected() - 1);
|
||||
else if(down & KEY_MINUS)
|
||||
{
|
||||
advModePrep("sv:/", data::curData.getType(), true);
|
||||
ui::changeState(ADV_MDE);
|
||||
}
|
||||
else if(down & KEY_ZR && data::curData.getType() != FsSaveDataType_System && confirm(true, ui::confEraseFolder.c_str(), data::curData.getTitle().c_str()))
|
||||
{
|
||||
fs::delDir("sv:/");
|
||||
fsdevCommitDevice("sv");
|
||||
}
|
||||
else if(down & KEY_B)
|
||||
{
|
||||
fsdevUnmountDevice("sv");
|
||||
ui::changeState(TXT_TTL);
|
||||
case KEY_A:
|
||||
if(folderMenu.getSelected() == 0)
|
||||
ui::createNewBackup(held);
|
||||
else
|
||||
ui::overwriteBackup(folderMenu.getSelected() - 1);
|
||||
break;
|
||||
|
||||
case KEY_B:
|
||||
fs::unmountSave();
|
||||
ui::changeState(TXT_TTL);
|
||||
break;
|
||||
|
||||
case KEY_X:
|
||||
if(folderMenu.getSelected() > 0)
|
||||
ui::deleteBackup(folderMenu.getSelected() - 1);
|
||||
break;
|
||||
|
||||
case KEY_Y:
|
||||
if(folderMenu.getSelected() > 0)
|
||||
ui::restoreBackup(folderMenu.getSelected() - 1);
|
||||
break;
|
||||
|
||||
case KEY_ZR:
|
||||
if(data::curData.getType() != FsSaveDataType_System && confirm(true, ui::confEraseFolder.c_str(), data::curData.getTitle().c_str()))
|
||||
{
|
||||
fs::delDir("sv:/");
|
||||
fsdevCommitDevice("sv");
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_MINUS:
|
||||
advModePrep("sv:/", data::curData.getType(), true);
|
||||
ui::changeState(ADV_MDE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ui::drawTextFolderMenu()
|
||||
{
|
||||
titleMenu.draw(ui::txtCont);
|
||||
folderMenu.draw(ui::txtCont);
|
||||
}
|
||||
|
||||
void ui::exMenuPrep()
|
||||
{
|
||||
exMenu.reset();
|
||||
|
|
@ -318,7 +346,10 @@ void ui::updateExMenu(const uint64_t& down, const uint64_t& held)
|
|||
ui::changeState(ui::textMode ? TXT_USR : USR_SEL);
|
||||
prevState = USR_SEL;
|
||||
}
|
||||
}
|
||||
|
||||
void ui::drawExMenu()
|
||||
{
|
||||
exMenu.draw(ui::txtCont);
|
||||
}
|
||||
|
||||
|
|
@ -409,7 +440,10 @@ void ui::updateOptMenu(const uint64_t& down, const uint64_t& held)
|
|||
data::restoreDefaultConfig();
|
||||
else if(down & KEY_B)
|
||||
ui::changeState(ui::textMode ? TXT_USR : USR_SEL);
|
||||
}
|
||||
|
||||
void ui::drawOptMenu()
|
||||
{
|
||||
optMenu.draw(ui::txtCont);
|
||||
drawTextWrap(ui::optMenuExp[optMenu.getSelected()].c_str(), frameBuffer, ui::shared, 466, 98, 18, ui::txtCont, 730);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
#include "uiupdate.h"
|
||||
#include "file.h"
|
||||
|
||||
void ui::updateUserMenu(const uint64_t& down, const uint64_t& held)
|
||||
void ui::drawUserMenu()
|
||||
{
|
||||
//Static so they don't get reset every loop
|
||||
static int start = 0;
|
||||
|
|
@ -61,50 +61,63 @@ void ui::updateUserMenu(const uint64_t& down, const uint64_t& held)
|
|||
data::users[i].drawIconHalf(tX, y);
|
||||
}
|
||||
}
|
||||
|
||||
if(down & KEY_RIGHT && data::selUser < (int)data::users.size() - 1)
|
||||
data::selUser++;
|
||||
else if(down & KEY_LEFT && data::selUser > 0)
|
||||
data::selUser--;
|
||||
else if(down & KEY_UP)
|
||||
{
|
||||
data::selUser -= 4;
|
||||
if(data::selUser < 0)
|
||||
data::selUser = 0;
|
||||
}
|
||||
else if(down & KEY_DOWN)
|
||||
{
|
||||
data::selUser += 4;
|
||||
if(data::selUser > (int)data::users.size() - 1)
|
||||
data::selUser = data::users.size() - 1;
|
||||
}
|
||||
else if(down & KEY_A)
|
||||
{
|
||||
if(data::users[data::selUser].titles.size() > 0)
|
||||
ui::changeState(TTL_SEL);
|
||||
else
|
||||
ui::showPopup(POP_FRAME_DEFAULT, ui::noSavesFound.c_str(), data::curUser.getUsername().c_str());
|
||||
}
|
||||
else if(down & KEY_Y)
|
||||
{
|
||||
bool cont = true;
|
||||
for(unsigned i = 0; i < data::users.size() - 2; i++)
|
||||
{
|
||||
if(cont)
|
||||
cont = fs::dumpAllUserSaves(data::users[i]);
|
||||
}
|
||||
}
|
||||
else if(down & KEY_X)
|
||||
{
|
||||
ui::textMode = true;
|
||||
ui::changeState(TXT_USR);
|
||||
}
|
||||
else if(down & KEY_ZR)
|
||||
{
|
||||
fs::unmountSave();
|
||||
ui::changeState(EX_MNU);
|
||||
}
|
||||
else if(down & KEY_MINUS)
|
||||
ui::changeState(OPT_MNU);
|
||||
}
|
||||
|
||||
void ui::updateUserMenu(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
switch(down)
|
||||
{
|
||||
case KEY_A:
|
||||
if(data::curUser.titles.size() > 0)
|
||||
ui::changeState(TTL_SEL);
|
||||
else
|
||||
ui::showPopup(POP_FRAME_DEFAULT, ui::noSavesFound.c_str(), data::curUser.getUsername().c_str());
|
||||
break;
|
||||
|
||||
case KEY_X:
|
||||
ui::textMode = true;
|
||||
ui::changeState(TXT_USR);
|
||||
break;
|
||||
|
||||
case KEY_Y:
|
||||
{
|
||||
bool cont = true;
|
||||
for(unsigned i = 0; i < data::users.size() - 2; i++)
|
||||
{
|
||||
if(cont)
|
||||
cont = fs::dumpAllUserSaves(data::users[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_ZR:
|
||||
ui::changeState(EX_MNU);
|
||||
break;
|
||||
|
||||
case KEY_MINUS:
|
||||
ui::changeState(OPT_MNU);
|
||||
break;
|
||||
|
||||
case KEY_LSTICK_UP:
|
||||
case KEY_DUP:
|
||||
data::selUser - 5 < 0 ? data::selUser = 0 : data::selUser -= 4;
|
||||
break;
|
||||
|
||||
case KEY_LSTICK_DOWN:
|
||||
case KEY_DDOWN:
|
||||
data::selUser + 5 > (int)data::users.size() - 1 ? data::selUser = data::users.size() - 1 : data::selUser += 5;
|
||||
break;
|
||||
|
||||
case KEY_LSTICK_LEFT:
|
||||
case KEY_DLEFT:
|
||||
if(data::selUser > 0)
|
||||
--data::selUser;
|
||||
break;
|
||||
|
||||
case KEY_LSTICK_RIGHT:
|
||||
case KEY_DRIGHT:
|
||||
if(data::selUser < (int)data::users.size() - 1)
|
||||
++data::selUser;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user