Fix file mode if used as root dir, add scroll for long menu options

This commit is contained in:
J-D-K
2021-08-04 22:56:54 -04:00
parent 93e9fade66
commit 730f7ffbca
15 changed files with 236 additions and 152 deletions

View File

@@ -38,7 +38,7 @@ INCLUDES := inc inc/ui
EXEFS_SRC := exefs_src
APP_TITLE := JKSV
APP_AUTHOR := JK
APP_VERSION := 08.01.2021
APP_VERSION := 08.04.2021
ROMFS := romfs
ICON := icon.jpg

View File

@@ -11,7 +11,7 @@
#define curData users[data::selUser].titleInfo[data::selData]
#define BLD_MON 8
#define BLD_DAY 1
#define BLD_DAY 4
#define BLD_YEAR 2021
namespace data

View File

@@ -71,4 +71,9 @@ namespace gfx
SDL_SetRenderDrawColor(gfx::render, clear->r, clear->g, clear->b, clear->a);
SDL_RenderClear(gfx::render);
}
inline void resetRender()
{
SDL_SetRenderDrawColor(gfx::render, 0xFF, 0xFF, 0xFF, 0xFF);
}
}

View File

@@ -16,6 +16,7 @@ typedef enum
MENU_X,
MENU_Y,
MENU_RECT_WIDTH,
MENU_RECT_HEIGHT,
MENU_FONT_SIZE,
MENU_MAX_SCROLL
} menuParams;
@@ -48,6 +49,7 @@ namespace ui
{
SDL_Texture *icn = NULL;
std::string txt;
int txtWidth;
std::vector<menuOptEvent> events;
} menuOpt;
@@ -55,10 +57,8 @@ namespace ui
{
public:
menu() = default;
//X, Y, Rect width/Max length, Font size, max to show
void setParams(const unsigned& _x, const unsigned& _y, const unsigned& _rW, const unsigned& _fS, const unsigned& _mL);
void editParam(int _param, unsigned newVal);
menu(const int& _x, const int& _y, const int& _rW, const int& _fS, const int& _mL);
void editParam(int _param, int newVal);
//Gets executed when menu changes at all
void setOnChangeFunc(funcPtr func) { onChange = func; }
@@ -106,11 +106,13 @@ namespace ui
int x = 0, mY = 0, tY = 0, y = 0, rW = 0, rY = 0, fSize = 0, rH = 0, mL = 0;
//Options vector
std::vector<ui::menuOpt> opt;
//Selected + frame counting for auto-scroll
int selected = 0, fc = 0;
//Selected + frame counting for auto-scroll. Hover count is to not break autoscroll
int selected = 0, fc = 0, hoverCount = 0, spcWidth = 0;
//How much we shift the color of the rectangle
uint8_t clrSh = 0;
bool clrAdd = true, isActive = true;
bool clrAdd = true, isActive = true, hover = false;
//Option buffer. Basically, text is draw to this so it can't overlap. Also allows scrolling
SDL_Texture *optTex;
funcPtr onChange = NULL, callback = NULL;
void *callbackArgs, *funcArgs;
};

View File

@@ -16,6 +16,7 @@ namespace ui
slideOutPanel(int _w, int _h, int _y, slidePanelOrientation _side, funcPtr _draw);
~slideOutPanel();
void resizePanel(int _w, int _h, int _y);
void update();
void setCallback(funcPtr _cb, void *_args) { callback = _cb; cbArgs = _args; }
void openPanel() { open = true; }

View File

@@ -5,7 +5,7 @@ namespace ui
void ttlInit();
void ttlExit();
void ttlSetActive(int usr);
void refreshAllViews();
void ttlRefresh();
void populateFldMenu();
//JIC for func ptr

View File

@@ -4,6 +4,7 @@ namespace ui
{
void usrInit();
void usrExit();
void usrRefresh();
void usrUpdate();
void usrDraw(SDL_Texture *target);

View File

@@ -211,7 +211,7 @@ static void loadTitlesFromRecords()
bool data::loadUsersTitles(bool clearUsers)
{
static unsigned systemUserCount = 3;
static unsigned systemUserCount = 4;
FsSaveDataInfoReader it;
FsSaveDataInfo info;
s64 total = 0;
@@ -477,7 +477,7 @@ void data::blacklistAdd(void *a)
for(unsigned i = 0; i < _u.titleInfo.size(); i++)
if(_u.titleInfo[i].saveID == *tid) _u.titleInfo.erase(_u.titleInfo.begin() + i);
}
ui::refreshAllViews();
ui::ttlRefresh();
delete tid;
t->finished = true;
}

View File

@@ -117,7 +117,9 @@ static void extMenuMountSysSave(void *a)
//Todo: Not so simple now.
static void extMenuReloadTitles(void *a)
{
data::loadUsersTitles(false);
ui::usrRefresh();
ui::ttlRefresh();
}
static void extMenuMountRomFS(void *a)
@@ -134,8 +136,7 @@ static void extMenuMountRomFS(void *a)
void ui::extInit()
{
ui::extMenu = new ui::menu;
ui::extMenu->setParams(200, 24, 1002, 24, 4);
ui::extMenu = new ui::menu(200, 24, 1002, 24, 4);
ui::extMenu->setCallback(extMenuCallback, NULL);
ui::extMenu->setActive(false);
for(unsigned i = 0; i < 11; i++)

View File

@@ -224,12 +224,23 @@ static void _copyMenuCopy(void *a)
menuFuncArgs *ma = (menuFuncArgs *)a;
fs::backupArgs *b = ma->b;
std::string srcPath, dstPath;
if(ma == devArgs)
int sel = b->m->getSelected();
if(sel == 0 && ma == devArgs)
{
srcPath = *ma->path + b->d->getItem(b->m->getSelected() - 2);
dstPath = *sdmcArgs->path + b->d->getItem(b->m->getSelected() - 2);
srcPath = *ma->path;
dstPath = *sdmcArgs->path;
}
else
else if(sel > 1 && ma == devArgs)
{
srcPath = *ma->path + b->d->getItem(sel - 2);
dstPath = *sdmcArgs->path + b->d->getItem(sel - 2);
}
else if(sel == 0 && ma == sdmcArgs)
{
srcPath = *ma->path;
dstPath = *devArgs->path;
}
else if(sel > 1 && ma == sdmcArgs)
{
srcPath = *ma->path + b->d->getItem(b->m->getSelected() - 2);
dstPath = *devArgs->path + b->d->getItem(b->m->getSelected() - 2);
@@ -307,7 +318,7 @@ static void _copyMenuDelete(void *a)
else if(sel > 1)
itmPath = *ma->path + b->d->getItem(sel - 2);
if(sel == 0 || sel > 1)
if(ma == sdmcArgs || (ma == devArgs && (sel == 0 || sel > 1) && (type != FsSaveDataType_System || data::config["sysSaveWrite"])))
{
ui::confirmArgs *send = ui::confirmArgsCreate(data::config["holdDel"], _copyMenuDelete_t, a, true, ui::confDel.c_str(), itmPath.c_str());
ui::confirm(send);
@@ -381,17 +392,15 @@ void ui::fmInit()
sdmcArgs->b = new fs::backupArgs;
sdmcArgs->path = &sdPath;
devMenu = new ui::menu;
devMenu = new ui::menu(10, 8, 590, 18, 5);
devMenu->setCallback(_devMenuCallback, devArgs);
devMenu->setParams(10, 8, 590, 18, 5);
devMenu->setActive(true);
devArgs->b->m = devMenu;
devPanel = new ui::slideOutPanel(260, 720, 0, ui::SLD_LEFT, _devCopyPanelDraw);
devCopyMenu = new ui::menu;
devCopyMenu = new ui::menu(10, 236, 246, 20, 5);
devCopyMenu->setActive(false);
devCopyMenu->setCallback(_devCopyMenuCallback, NULL);
devCopyMenu->setParams(10, 236, 246, 20, 5);
devCopyMenu->addOpt(NULL, ui::advMenuStr[0] + "SDMC");
for(int i = 1; i < 6; i++)
devCopyMenu->addOpt(NULL, advMenuStr[i]);
@@ -402,17 +411,15 @@ void ui::fmInit()
devCopyMenu->optAddButtonEvent(5, HidNpadButton_A, _copyMenuClose, devArgs);
ui::registerPanel(devPanel);
sdMenu = new ui::menu;
sdMenu = new ui::menu(620, 8, 590, 18, 5);
sdMenu->setCallback(_sdMenuCallback, sdmcArgs);
sdMenu->setParams(620, 8, 590, 18, 5);
sdMenu->setActive(false);
sdmcArgs->b->m = sdMenu;
sdPanel = new ui::slideOutPanel(260, 720, 0, ui::SLD_RIGHT, _sdCopyPanelDraw);
sdCopyMenu = new ui::menu;
sdCopyMenu = new ui::menu(10, 236, 246, 20, 5);
sdCopyMenu->setActive(false);
sdCopyMenu->setCallback(_sdCopyMenuCallback, NULL);
sdCopyMenu->setParams(10, 236, 246, 20, 5);
for(int i = 0; i < 6; i++)
sdCopyMenu->addOpt(NULL, advMenuStr[i]);
sdCopyMenu->optAddButtonEvent(0, HidNpadButton_A, _copyMenuCopy, sdmcArgs);

View File

@@ -19,7 +19,7 @@ static const SDL_Color fillBar = {0x00, 0xDD, 0x00, 0xFF};
static const SDL_Color menuColorLight = {0x32, 0x50, 0xF0, 0xFF};
static const SDL_Color menuColorDark = {0x00, 0xFF, 0xC5, 0xFF};
void ui::menu::setParams(const unsigned& _x, const unsigned& _y, const unsigned& _rW, const unsigned& _fS, const unsigned& _mL)
ui::menu::menu(const int& _x, const int& _y, const int& _rW, const int& _fS, const int& _mL)
{
x = _x;
mY = _y;
@@ -29,10 +29,14 @@ void ui::menu::setParams(const unsigned& _x, const unsigned& _y, const unsigned&
rY = _y;
fSize = _fS;
mL = _mL;
rH = _fS + 32;
rH = _fS + 30;
spcWidth = gfx::getTextWidth(" ", _fS) * 3;
optTex = SDL_CreateTexture(gfx::render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC | SDL_TEXTUREACCESS_TARGET, rW - 24, rH - 8);
SDL_SetTextureBlendMode(optTex, SDL_BLENDMODE_BLEND);
}
void ui::menu::editParam(int _param, unsigned newVal)
void ui::menu::editParam(int _param, int newVal)
{
switch(_param)
{
@@ -48,6 +52,10 @@ void ui::menu::editParam(int _param, unsigned newVal)
rW = newVal;
break;
case MENU_RECT_HEIGHT:
rH = newVal;
break;
case MENU_FONT_SIZE:
fSize = newVal;
break;
@@ -61,25 +69,8 @@ void ui::menu::editParam(int _param, unsigned newVal)
int ui::menu::addOpt(SDL_Texture *_icn, const std::string& add)
{
ui::menuOpt newOpt;
if((int)gfx::getTextWidth(add.c_str(), fSize) < rW - 56 || rW == 0)
newOpt.txt = add;
else
{
std::string tmp;
for(unsigned i = 0; i < add.length(); )
{
uint32_t tmpChr = 0;
ssize_t untCnt = decode_utf8(&tmpChr, (uint8_t *)&add.c_str()[i]);
tmp += add.substr(i, untCnt);
i += untCnt;
if((int)gfx::getTextWidth(tmp.c_str(), fSize) >= rW - 56)
{
newOpt.txt = tmp;
break;
}
}
}
newOpt.txt = add;
newOpt.txtWidth = gfx::getTextWidth(newOpt.txt.c_str(), fSize);
newOpt.icn = _icn;
opt.push_back(newOpt);
return opt.size() - 1;
@@ -112,6 +103,7 @@ int ui::menu::getOptPos(const std::string& txt)
ui::menu::~menu()
{
SDL_DestroyTexture(optTex);
opt.clear();
}
@@ -132,29 +124,49 @@ void ui::menu::update()
fc = 0;
int oldSel = selected;
int mSize = opt.size() - 1, scrL = mL - 1;
int mSize = opt.size() - 1;
bool change = false;
if( (down & HidNpadButton_AnyUp) || ((held & HidNpadButton_AnyUp) && fc == 10) )
{
if(selected > 0)
--selected;
change = true;
}
else if( (down & HidNpadButton_AnyDown) || ((held & HidNpadButton_AnyDown) && fc == 10))
{
if(selected < mSize)
++selected;
change = true;
}
else if(down & HidNpadButton_AnyLeft)
{
selected -= mL;
if(selected < 0)
selected = 0;
change = true;
}
else if(down & HidNpadButton_AnyRight)
{
selected += mL;
if(selected > mSize)
selected = mSize;
change = true;
}
++hoverCount;
if(!change && hoverCount >= 90)
hover = true;
else if(change)
{
hoverCount = 0;
hover = false;
}
if(down && !opt[selected].events.empty())
{
for(ui::menuOptEvent& e : opt[selected].events)
@@ -210,29 +222,59 @@ void ui::menu::draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText
if(tY < -rH || tY > tH)
continue;
if(i == selected)
//Todo: Clean this up maybe
if(i == selected && drawText)
{
gfx::clearTarget(optTex, &ui::transparent);
if(isActive)
ui::drawBoundBox(target, x, y + (i * rH), rW, rH, clrSh);
gfx::drawRect(target, ui::thmID == ColorSetId_Light ? &menuColorLight : &menuColorDark, x + 10, ((y + (rH / 2 - fSize / 2)) + (i * rH)) - 2, 4, fSize + 4);
if(drawText)
gfx::drawTextf(target, fSize, x + 20, (y + (rH / 2 - fSize / 2)) + (i * rH), ui::thmID == ColorSetId_Light ? &menuColorLight : &menuColorDark, opt[i].txt.c_str());
}
else
{
if(drawText)
gfx::drawTextf(target, fSize, x + 20, (y + (rH / 2 - fSize / 2)) + (i * rH), textClr, opt[i].txt.c_str());
}
int w, h;
if(opt[i].icn && SDL_QueryTexture(opt[i].icn, NULL, NULL, &w, &h) == 0)
static int dX = 0;
if(hover && opt[i].txtWidth > rW - 24)
{
if((dX -= 2) <= -(opt[i].txtWidth + spcWidth))
dX = 0;
gfx::drawTextf(optTex, fSize, dX, ((rH - 8) / 2) - fSize / 2, ui::thmID == ColorSetId_Light ? &menuColorLight : &menuColorDark, opt[i].txt.c_str());
gfx::drawTextf(optTex, fSize, dX + opt[i].txtWidth + spcWidth, ((rH - 8) / 2) - fSize / 2, ui::thmID == ColorSetId_Light ? &menuColorLight : &menuColorDark, opt[i].txt.c_str());
}
else
{
dX = 0;
gfx::drawTextf(optTex, fSize, 0, ((rH - 8) / 2) - fSize / 2, ui::thmID == ColorSetId_Light ? &menuColorLight : &menuColorDark, opt[i].txt.c_str());
}
gfx::texDraw(target, optTex, x + 20, (y + 4 + (i * rH)));
}
else if(i == selected && !drawText && opt[i].icn)
{
int w, h;
SDL_QueryTexture(opt[i].icn, NULL, NULL, &w, &h);
float scale = (float)fSize / (float)h;
int dW = scale * w;
int dH = scale * h;
if(isActive)
ui::drawBoundBox(target, x, y + (i * rH), rW, rH, clrSh);
gfx::texDrawStretch(target, opt[i].icn, x + 20, (y + (rH / 2 - fSize / 2)) + (i * rH), dW, dH);
gfx::drawRect(target, ui::thmID == ColorSetId_Light ? &menuColorLight : &menuColorDark, x + 10, ((y + (rH / 2 - fSize / 2)) + (i * rH)) - 2, 4, fSize + 4);
}
else if(drawText)
{
gfx::clearTarget(optTex, &ui::transparent);
gfx::drawTextf(optTex, fSize, 0, ((rH - 8) / 2) - fSize / 2, textClr, opt[i].txt.c_str());
gfx::texDraw(target, optTex, x + 20, (y + 4 + (i * rH)));
}
else if(!drawText && opt[i].icn)
{
int w, h;
SDL_QueryTexture(opt[i].icn, NULL, NULL, &w, &h);
float scale = (float)fSize / (float)h;
int dW = scale * w;
int dH = scale * h;
gfx::texDrawStretch(target, opt[i].icn, x + 20, (y + (rH / 2 - fSize / 2)) + (i * rH), dW, dH);
}
}
}

View File

@@ -110,7 +110,7 @@ static void toggleOpt(void *a)
if(++data::sortType > 2)
data::sortType = 0;
data::loadUsersTitles(false);
ui::refreshAllViews();
ui::ttlRefresh();
break;
case 16:
@@ -145,8 +145,7 @@ static void updateMenuText()
void ui::settInit()
{
ui::settMenu = new ui::menu;
ui::settMenu->setParams(200, 24, 1002, 24, 4);
ui::settMenu = new ui::menu(200, 24, 1002, 24, 4);
ui::settMenu->setCallback(settMenuCallback, NULL);
ui::settMenu->setActive(false);

View File

@@ -24,6 +24,19 @@ ui::slideOutPanel::~slideOutPanel()
SDL_DestroyTexture(panel);
}
void ui::slideOutPanel::resizePanel(int _w, int _h, int _y)
{
w = _w;
h = _h;
y = _y;
if(sldSide == ui::SLD_LEFT)
x = -w;
SDL_DestroyTexture(panel);
panel = SDL_CreateTexture(gfx::render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC | SDL_TEXTUREACCESS_TARGET, w, h);
SDL_SetTextureBlendMode(panel, SDL_BLENDMODE_BLEND);
}
void ui::slideOutPanel::update()
{
if(open && callback)

View File

@@ -15,7 +15,7 @@ static fs::backupArgs *backargs;
static std::string infoPanelString;
static SDL_Texture *fldBuffer;//This is so folder menu doesn't draw over guide
void ui::refreshAllViews()
void ui::ttlRefresh()
{
for(int i = 0; i < (int)data::users.size(); i++)
ttlViews[i]->refresh();
@@ -116,7 +116,7 @@ static void ttlViewCallback(void *a)
uint64_t sid = data::curData.saveID;
data::favoriteTitle(sid);
int newSel = data::getTitleIndexInUser(data::curUser, sid);
ui::refreshAllViews();
ui::ttlRefresh();
ttlViews[data::selUser]->setSelected(newSel);
}
break;
@@ -354,13 +354,11 @@ void ui::ttlInit()
for(data::user& u : data::users)
ttlViews.emplace_back(new ui::titleview(u, 128, 128, 16, 16, 7, ttlViewCallback));
ttlOpts = new ui::menu;
ttlOpts->setParams(10, 32, 390, 20, 7);
ttlOpts = new ui::menu(10, 32, 390, 20, 7);
ttlOpts->setCallback(ttlOptsCallback, NULL);
ttlOpts->setActive(false);
fldMenu = new ui::menu;
fldMenu->setParams(10, 32, fldHelpWidth + 44, 20, 7);
fldMenu = new ui::menu(10, 8, fldHelpWidth + 44, 20, 6);
fldMenu->setCallback(fldMenuCallback, NULL);
fldMenu->setActive(false);
@@ -393,7 +391,6 @@ void ui::ttlInit()
ttlOpts->optAddButtonEvent(5, HidNpadButton_A, ttlOptsDeleteSaveData, NULL);
ttlOpts->addOpt(NULL, ui::titleOptString[6]);
ttlOpts->optAddButtonEvent(6, HidNpadButton_A, ttlOptsExtendSaveData, NULL);
}
void ui::ttlExit()

View File

@@ -12,6 +12,8 @@
#include "usr.h"
#include "ttl.h"
static const char *settText = "Settings", *extText = "Extras";
//Main menu/Users + options, folder
ui::menu *ui::usrMenu;
ui::slideOutPanel *ui::usrSelPanel;
@@ -127,7 +129,7 @@ static void usrOptSaveCreate(void *a)
int bcatPos = m->getOptPos("BCAT");
int cachePos = m->getOptPos("Cache");
ui::updateInput();//Todo: Need to go through with fine tooth comb so this isn't needed
ui::updateInput();
int sel = m->getSelected();
bool closeUsrOpt = false;
if(sel == devPos && deviceSaveMenu->getOptCount() > 0)
@@ -179,7 +181,7 @@ static void usrOptDeleteAllUserSaves_t(void *a)
}
}
data::loadUsersTitles(false);
ui::refreshAllViews();
ui::ttlRefresh();
t->finished = true;
}
@@ -317,7 +319,7 @@ static void createSaveData_t(void *a)
if(R_SUCCEEDED(res = fsCreateSaveDataFileSystem(&attr, &svCreate, &meta)))
{
data::loadUsersTitles(false);
ui::refreshAllViews();
ui::ttlRefresh();
}
else
{
@@ -333,77 +335,18 @@ static void createSaveData(void *a)
ui::newThread(createSaveData_t, a, NULL);
}
void ui::usrInit()
//Sets up save create menus
static void initSaveCreateMenus()
{
usrMenu = new ui::menu;
usrOptMenu = new ui::menu;
saveCreateMenu = new ui::menu;
deviceSaveMenu = new ui::menu;
bcatSaveMenu = new ui::menu;
cacheSaveMenu = new ui::menu;
saveCreateMenu->reset();
deviceSaveMenu->reset();
bcatSaveMenu->reset();
cacheSaveMenu->reset();
usrMenu->setParams(54, 16, 0, 106, 1);
usrOptMenu->setParams(8, 32, 390, 20, 6);
usrOptMenu->setCallback(usrOptCallback, NULL);
saveCreateMenu->setParams(8, 32, 492, 20, 6);
saveCreateMenu->setActive(false);
saveCreateMenu->setCallback(saveCreateCallback, NULL);
deviceSaveMenu->setParams(8, 32, 492, 20, 6);
deviceSaveMenu->setActive(false);
deviceSaveMenu->setCallback(saveCreateCallback, NULL);
bcatSaveMenu->setParams(8, 32, 492, 20, 6);
bcatSaveMenu->setActive(false);
bcatSaveMenu->setCallback(saveCreateCallback, NULL);
cacheSaveMenu->setParams(8, 32, 492, 20, 6);
cacheSaveMenu->setActive(false);
cacheSaveMenu->setCallback(saveCreateCallback, NULL);
for(data::user u : data::users)
{
int usrPos = usrMenu->addOpt(u.getUserIcon(), u.getUsername());
usrMenu->optAddButtonEvent(usrPos, HidNpadButton_A, toTTL, NULL);
}
sett = util::createIconGeneric("Settings", 48, false);
int pos = usrMenu->addOpt(sett, "Settings");
usrMenu->optAddButtonEvent(pos, HidNpadButton_A, toOPT, NULL);
ext = util::createIconGeneric("Extras", 48, false);
pos = usrMenu->addOpt(ext, "Extras");
usrMenu->optAddButtonEvent(pos, HidNpadButton_A, toEXT, NULL);
usrMenu->setOnChangeFunc(onMainChange);
usrMenu->editParam(MENU_RECT_WIDTH, 136);
usrSelPanel = new ui::slideOutPanel(200, 559, 89, ui::SLD_LEFT, _usrSelPanelDraw);
usrSelPanel->setX(0);
ui::registerPanel(usrSelPanel);
usrSelPanel->openPanel();
usrOptPanel = new ui::slideOutPanel(410, 720, 0, ui::SLD_RIGHT, usrOptPanelDraw);
ui::registerPanel(usrOptPanel);
usrOptMenu->addOpt(NULL, ui::usrOptString[0]);
usrOptMenu->optAddButtonEvent(0, HidNpadButton_A, usrOptSaveCreate, usrMenu);
usrOptMenu->addOpt(NULL, ui::usrOptString[1]);
usrOptMenu->optAddButtonEvent(1, HidNpadButton_A, usrOptDeleteAllUserSaves, NULL);
usrOptMenu->setActive(false);
saveCreatePanel = new ui::slideOutPanel(512, 720, 0, ui::SLD_RIGHT, saveCreatePanelDraw);
ui::registerPanel(saveCreatePanel);
deviceSavePanel = new ui::slideOutPanel(512, 720, 0, ui::SLD_RIGHT, deviceSavePanelDraw);
ui::registerPanel(deviceSavePanel);
bcatSavePanel = new ui::slideOutPanel(512, 720, 0, ui::SLD_RIGHT, bcatSavePanelDraw);
ui::registerPanel(bcatSavePanel);
cacheSavePanel = new ui::slideOutPanel(512, 720, 0, ui::SLD_RIGHT, cacheSavePanelDraw);
ui::registerPanel(cacheSavePanel);
accSids.clear();
devSids.clear();
bcatSids.clear();
cacheSids.clear();
accCreate = {FsSaveDataType_Account, saveCreateMenu};
devCreate = {FsSaveDataType_Device, deviceSaveMenu};
@@ -457,6 +400,76 @@ void ui::usrInit()
cacheSaveMenu->addOpt(NULL, data::getTitleNameByTID(cacheSids[i]));
cacheSaveMenu->optAddButtonEvent(i, HidNpadButton_A, createSaveData, &cacheCreate);
}
}
void ui::usrInit()
{
usrMenu = new ui::menu(50, 16, 0, 112, 1);
usrOptMenu = new ui::menu(8, 32, 390, 20, 6);
saveCreateMenu = new ui::menu(8, 32, 492, 20, 6);
deviceSaveMenu = new ui::menu(8, 32, 492, 20, 6);
bcatSaveMenu = new ui::menu(8, 32, 492, 20, 6);
cacheSaveMenu = new ui::menu(8, 32, 492, 20, 6);
usrOptMenu->setCallback(usrOptCallback, NULL);
saveCreateMenu->setActive(false);
saveCreateMenu->setCallback(saveCreateCallback, NULL);
deviceSaveMenu->setActive(false);
deviceSaveMenu->setCallback(saveCreateCallback, NULL);
bcatSaveMenu->setActive(false);
bcatSaveMenu->setCallback(saveCreateCallback, NULL);
cacheSaveMenu->setActive(false);
cacheSaveMenu->setCallback(saveCreateCallback, NULL);
for(data::user u : data::users)
{
int usrPos = usrMenu->addOpt(u.getUserIcon(), u.getUsername());
usrMenu->optAddButtonEvent(usrPos, HidNpadButton_A, toTTL, NULL);
}
sett = util::createIconGeneric(settText, 48, false);
int pos = usrMenu->addOpt(sett, settText);
usrMenu->optAddButtonEvent(pos, HidNpadButton_A, toOPT, NULL);
ext = util::createIconGeneric(extText, 48, false);
pos = usrMenu->addOpt(ext, extText);
usrMenu->optAddButtonEvent(pos, HidNpadButton_A, toEXT, NULL);
usrMenu->setOnChangeFunc(onMainChange);
usrMenu->editParam(MENU_RECT_WIDTH, 142);
usrMenu->editParam(MENU_RECT_HEIGHT, 130);
usrSelPanel = new ui::slideOutPanel(200, 559, 89, ui::SLD_LEFT, _usrSelPanelDraw);
usrSelPanel->setX(0);
ui::registerPanel(usrSelPanel);
usrSelPanel->openPanel();
usrOptPanel = new ui::slideOutPanel(410, 720, 0, ui::SLD_RIGHT, usrOptPanelDraw);
ui::registerPanel(usrOptPanel);
usrOptMenu->addOpt(NULL, ui::usrOptString[0]);
usrOptMenu->optAddButtonEvent(0, HidNpadButton_A, usrOptSaveCreate, usrMenu);
usrOptMenu->addOpt(NULL, ui::usrOptString[1]);
usrOptMenu->optAddButtonEvent(1, HidNpadButton_A, usrOptDeleteAllUserSaves, NULL);
usrOptMenu->setActive(false);
saveCreatePanel = new ui::slideOutPanel(512, 720, 0, ui::SLD_RIGHT, saveCreatePanelDraw);
ui::registerPanel(saveCreatePanel);
deviceSavePanel = new ui::slideOutPanel(512, 720, 0, ui::SLD_RIGHT, deviceSavePanelDraw);
ui::registerPanel(deviceSavePanel);
bcatSavePanel = new ui::slideOutPanel(512, 720, 0, ui::SLD_RIGHT, bcatSavePanelDraw);
ui::registerPanel(bcatSavePanel);
cacheSavePanel = new ui::slideOutPanel(512, 720, 0, ui::SLD_RIGHT, cacheSavePanelDraw);
ui::registerPanel(cacheSavePanel);
initSaveCreateMenus();
usrHelpX = 1220 - gfx::getTextWidth(ui::userHelp.c_str(), 18);
}
@@ -481,16 +494,13 @@ void ui::usrExit()
SDL_DestroyTexture(ext);
}
void ui::usrRefresh()
{
initSaveCreateMenus();
}
void ui::usrUpdate()
{
usrMenu->update();
usrOptMenu->update();
saveCreateMenu->update();
deviceSaveMenu->update();
bcatSaveMenu->update();
cacheSaveMenu->update();
//Todo: Not this
if(usrMenu->getActive())
{
switch(ui::padKeysDown())
@@ -508,6 +518,12 @@ void ui::usrUpdate()
break;
}
}
usrMenu->update();
usrOptMenu->update();
saveCreateMenu->update();
deviceSaveMenu->update();
bcatSaveMenu->update();
cacheSaveMenu->update();
}
void ui::usrDraw(SDL_Texture *target)