mirror of
https://github.com/J-D-K/JKSV.git
synced 2026-09-07 18:16:00 -05:00
Fix file mode if used as root dir, add scroll for long menu options
This commit is contained in:
2
Makefile
2
Makefile
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -5,7 +5,7 @@ namespace ui
|
||||
void ttlInit();
|
||||
void ttlExit();
|
||||
void ttlSetActive(int usr);
|
||||
void refreshAllViews();
|
||||
void ttlRefresh();
|
||||
void populateFldMenu();
|
||||
|
||||
//JIC for func ptr
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace ui
|
||||
{
|
||||
void usrInit();
|
||||
void usrExit();
|
||||
void usrRefresh();
|
||||
void usrUpdate();
|
||||
void usrDraw(SDL_Texture *target);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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++)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
176
src/ui/usr.cpp
176
src/ui/usr.cpp
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user