Fix blacklisting, make menus scroll(may be buggy)

This commit is contained in:
J-D-K 2021-07-27 21:58:04 -04:00
parent a50a43870d
commit e445181e0c
8 changed files with 64 additions and 55 deletions

View File

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

View File

@ -11,7 +11,7 @@
#define curData users[data::selUser].titleInfo[data::selData]
#define BLD_MON 7
#define BLD_DAY 24
#define BLD_DAY 27
#define BLD_YEAR 2021
namespace data
@ -89,7 +89,7 @@ namespace data
};
//Adds title to blacklist
void blacklistAdd(const uint64_t& tid);
void blacklistAdd(void *a);
//Adds title to favorite list
void favoriteTitle(const uint64_t& tid);
//Adds path definition for title

View File

@ -92,7 +92,7 @@ namespace ui
void reset();
//Resets selected + start
void resetSel() { selected = 0; start = 0; }
void resetSel() { selected = 0; }
//Enables control/disables drawing select box
void setActive(bool _set);
@ -100,11 +100,11 @@ namespace ui
private:
//drawing x and y + rectangle width/height. Height is calc'd with font size
int x = 0, y = 0, rW = 0, rY = 0, fSize = 0, rH = 0, mL = 0;
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, start = 0;
int selected = 0, fc = 0;
//How much we shift the color of the rectangle
uint8_t clrSh = 0;
bool clrAdd = true, isActive = true;

View File

@ -10,6 +10,7 @@
#include "data.h"
#include "file.h"
#include "util.h"
#include "type.h"
//FsSaveDataSpaceId_All doesn't work for SD
static const unsigned saveOrder [] = { 0, 1, 2, 3, 4, 100, 101 };
@ -464,14 +465,20 @@ void data::saveBlackList()
}
}
void data::blacklistAdd(const uint64_t& tid)
void data::blacklistAdd(void *a)
{
blacklist.push_back(tid);
threadInfo *t = (threadInfo *)a;
t->status->setStatus("Adding title to blacklist...");
uint64_t *tid = (uint64_t *)t->argPtr;
blacklist.push_back(*tid);
for(data::user& _u : data::users)
{
for(unsigned i = 0; i < _u.titleInfo.size(); i++)
if(_u.titleInfo[i].saveID == tid) _u.titleInfo.erase(_u.titleInfo.begin() + i);
if(_u.titleInfo[i].saveID == *tid) _u.titleInfo.erase(_u.titleInfo.begin() + i);
}
ui::refreshAllViews();
delete tid;
t->finished = true;
}
void data::favoriteTitle(const uint64_t& tid)

View File

@ -22,7 +22,9 @@ 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)
{
x = _x;
mY = _y;
y = _y;
tY = _y;
rW = _rW;
rY = _y;
fSize = _fS;
@ -133,44 +135,33 @@ void ui::menu::update()
int mSize = opt.size() - 1, scrL = mL - 1;
if( (down & HidNpadButton_AnyUp) || ((held & HidNpadButton_AnyUp) && fc == 10) )
{
--selected;
if(selected < 0)
selected = mSize;
if(mSize > (int)mL)
if(selected > 0)
{
if(start > selected)
--start;
else if(selected - scrL > start)
start = selected - scrL;
--selected;
if(selected - mL >= 0 && selected <= mSize - mL)
tY += rH;
}
}
else if( (down & HidNpadButton_AnyDown) || ((held & HidNpadButton_AnyDown) && fc == 10))
{
++selected;
if(selected > mSize)
selected = 0;
if(selected > (start + scrL) && (start + scrL) < mSize)
++start;
if(selected == 0)
start = 0;
if(selected < mSize)
{
++selected;
if(selected - mL > 0 && selected + mL <= mSize + 1)
tY -= rH;
}
}
else if(down & HidNpadButton_AnyLeft)
{
selected -= scrL / 2;
if(selected < 0)
selected = 0;
if(selected < start)
start = selected;
}
else if(down & HidNpadButton_AnyRight)
{
selected += scrL / 2;
if(selected > mSize)
selected = mSize;
if(selected - scrL > start)
start = selected - scrL;
}
if(down)
@ -194,6 +185,12 @@ void ui::menu::draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText
if(opt.size() < 1)
return;
if(y != tY)
{
float add = (float)((float)tY - (float)y) / ui::animScale;
y += ceil(add);
}
if(clrAdd)
{
clrSh += 6;
@ -207,21 +204,21 @@ void ui::menu::draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText
clrAdd = true;
}
for(int i = start; i < (int)opt.size(); i++)
for(int i = 0; i < (int)opt.size(); i++)
{
if(i == selected)
{
if(isActive)
ui::drawBoundBox(target, x, y + ((i - start) * rH), rW, rH, clrSh);
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 - start) * rH)) - 2, 4, fSize + 4);
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 - start) * rH), ui::thmID == ColorSetId_Light ? &menuColorLight : &menuColorDark, opt[i].txt.c_str());
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 - start) * rH), textClr, opt[i].txt.c_str());
gfx::drawTextf(target, fSize, x + 20, (y + (rH / 2 - fSize / 2)) + (i * rH), textClr, opt[i].txt.c_str());
}
int w, h;
@ -231,7 +228,7 @@ void ui::menu::draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText
int dW = scale * w;
int dH = scale * h;
gfx::texDrawStretch(target, opt[i].icn, x + 20, (y + (rH / 2 - fSize / 2)) + ((i - start) * rH), dW, dH);
gfx::texDrawStretch(target, opt[i].icn, x + 20, (y + (rH / 2 - fSize / 2)) + (i * rH), dW, dH);
}
}
@ -240,9 +237,9 @@ void ui::menu::draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText
void ui::menu::reset()
{
opt.clear();
start = 0;
selected = 0;
y = mY;
tY = mY;
fc = 0;
}

View File

@ -141,7 +141,7 @@ static void updateMenuText()
void ui::settInit()
{
ui::settMenu = new ui::menu;
ui::settMenu->setParams(32, 32, 1016, 20, 8);
ui::settMenu->setParams(32, 32, 1016, 24, 5);
ui::settMenu->setCallback(settMenuCallback, NULL);
ui::settMenu->setActive(false);

View File

@ -12,6 +12,7 @@ static ui::slideOutPanel *ttlOptsPanel, *infoPanel, *fldPanel;//There's no reaso
static fs::dirList *fldList;
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()
{
@ -58,8 +59,6 @@ static void fldFuncRestore(void *a)
ui::confirm(conf);
}
void ui::populateFldMenu()
{
fldMenu->reset();
@ -155,8 +154,10 @@ static void ttlOptsShowInfoPanel(void *a)
static void ttlOptsBlacklistTitle(void *a)
{
uint64_t *sendTid = new uint64_t;
*sendTid = data::curData.saveID;
std::string title = data::getTitleNameByTID(data::curData.saveID);
ui::confirmArgs *conf = ui::confirmArgsCreate(false, NULL, NULL, true, ui::confBlacklist.c_str(), title.c_str());
ui::confirmArgs *conf = ui::confirmArgsCreate(false, data::blacklistAdd, sendTid, true, ui::confBlacklist.c_str(), title.c_str());
ui::confirm(conf);
}
@ -322,7 +323,9 @@ static void fldMenuCallback(void *a)
static void fldPanelDraw(void *a)
{
SDL_Texture *target = (SDL_Texture *)a;
fldMenu->draw(target, &ui::txtCont, true);
gfx::clearTarget(fldBuffer, &ui::slidePanelColor);
fldMenu->draw(fldBuffer, &ui::txtCont, true);
gfx::texDraw(target, fldBuffer, 0, 0);
gfx::drawLine(target, &ui::divClr, 10, 648, fldHelpWidth + 54, 648);
gfx::drawTextf(target, 18, 32, 673, &ui::txtCont, ui::folderHelp.c_str());
}
@ -336,12 +339,12 @@ void ui::ttlInit()
ttlViews.emplace_back(new ui::titleview(u, 128, 128, 16, 16, 7, ttlViewCallback));
ttlOpts = new ui::menu;
ttlOpts->setParams(10, 32, 390, 18, 8);
ttlOpts->setParams(10, 32, 390, 20, 7);
ttlOpts->setCallback(ttlOptsCallback, NULL);
ttlOpts->setActive(false);
fldMenu = new ui::menu;
fldMenu->setParams(10, 32, fldHelpWidth + 44, 18, 8);
fldMenu->setParams(10, 32, fldHelpWidth + 44, 20, 6);
fldMenu->setCallback(fldMenuCallback, NULL);
fldMenu->setActive(false);
@ -353,6 +356,7 @@ void ui::ttlInit()
infoPanel->setCallback(infoPanelCallback, NULL);
fldPanel = new ui::slideOutPanel(fldHelpWidth + 64, 720, 0, fldPanelDraw);
fldBuffer = SDL_CreateTexture(gfx::render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC | SDL_TEXTUREACCESS_TARGET, fldHelpWidth + 64, 647);
ui::registerPanel(fldPanel);
fldList = new fs::dirList;
@ -379,6 +383,7 @@ void ui::ttlExit()
for(ui::titleview *t : ttlViews)
delete t;
SDL_DestroyTexture(fldBuffer);
delete ttlOptsPanel;
delete ttlOpts;
delete infoPanel;

View File

@ -299,23 +299,23 @@ void ui::usrInit()
bcatSaveMenu = new ui::menu;
cacheSaveMenu = new ui::menu;
usrMenu->setParams(64, 16, 0, 96, 4);
usrOptMenu->setParams(8, 32, 390, 18, 8);
usrMenu->setParams(64, 16, 0, 96, 2);
usrOptMenu->setParams(8, 32, 390, 20, 7);
usrOptMenu->setCallback(usrOptCallback, NULL);
saveCreateMenu->setParams(8, 32, 390, 18, 8);
saveCreateMenu->setParams(8, 32, 492, 20, 7);
saveCreateMenu->setActive(false);
saveCreateMenu->setCallback(saveCreateCallback, NULL);
deviceSaveMenu->setParams(8, 32, 390, 18, 8);
deviceSaveMenu->setParams(8, 32, 492, 20, 7);
deviceSaveMenu->setActive(false);
deviceSaveMenu->setCallback(saveCreateCallback, NULL);
bcatSaveMenu->setParams(8, 32, 390, 18, 8);
bcatSaveMenu->setParams(8, 32, 492, 20, 7);
bcatSaveMenu->setActive(false);
bcatSaveMenu->setCallback(saveCreateCallback, NULL);
cacheSaveMenu->setParams(8, 32, 390, 18, 8);
cacheSaveMenu->setParams(8, 32, 492, 20, 7);
cacheSaveMenu->setActive(false);
cacheSaveMenu->setCallback(saveCreateCallback, NULL);
@ -345,16 +345,16 @@ void ui::usrInit()
usrOptMenu->optAddButtonEvent(1, HidNpadButton_A, usrOptDeleteAllUserSaves, NULL);
usrOptMenu->setActive(false);
saveCreatePanel = new ui::slideOutPanel(410, 720, 0, saveCreatePanelDraw);
saveCreatePanel = new ui::slideOutPanel(512, 720, 0, saveCreatePanelDraw);
ui::registerPanel(saveCreatePanel);
deviceSavePanel = new ui::slideOutPanel(410, 720, 0, deviceSavePanelDraw);
deviceSavePanel = new ui::slideOutPanel(512, 720, 0, deviceSavePanelDraw);
ui::registerPanel(deviceSavePanel);
bcatSavePanel = new ui::slideOutPanel(410, 720, 0, bcatSavePanelDraw);
bcatSavePanel = new ui::slideOutPanel(512, 720, 0, bcatSavePanelDraw);
ui::registerPanel(bcatSavePanel);
cacheSavePanel = new ui::slideOutPanel(410, 720, 0, cacheSavePanelDraw);
cacheSavePanel = new ui::slideOutPanel(512, 720, 0, cacheSavePanelDraw);
ui::registerPanel(cacheSavePanel);
accCreate = {FsSaveDataType_Account, saveCreateMenu};