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 EXEFS_SRC := exefs_src
APP_TITLE := JKSV APP_TITLE := JKSV
APP_AUTHOR := JK APP_AUTHOR := JK
APP_VERSION := 07.24.2021 APP_VERSION := 07.27.2021
ROMFS := romfs ROMFS := romfs
ICON := icon.jpg ICON := icon.jpg

View File

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

View File

@ -92,7 +92,7 @@ namespace ui
void reset(); void reset();
//Resets selected + start //Resets selected + start
void resetSel() { selected = 0; start = 0; } void resetSel() { selected = 0; }
//Enables control/disables drawing select box //Enables control/disables drawing select box
void setActive(bool _set); void setActive(bool _set);
@ -100,11 +100,11 @@ namespace ui
private: private:
//drawing x and y + rectangle width/height. Height is calc'd with font size //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 //Options vector
std::vector<ui::menuOpt> opt; std::vector<ui::menuOpt> opt;
//Selected + frame counting for auto-scroll //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 //How much we shift the color of the rectangle
uint8_t clrSh = 0; uint8_t clrSh = 0;
bool clrAdd = true, isActive = true; bool clrAdd = true, isActive = true;

View File

@ -10,6 +10,7 @@
#include "data.h" #include "data.h"
#include "file.h" #include "file.h"
#include "util.h" #include "util.h"
#include "type.h"
//FsSaveDataSpaceId_All doesn't work for SD //FsSaveDataSpaceId_All doesn't work for SD
static const unsigned saveOrder [] = { 0, 1, 2, 3, 4, 100, 101 }; 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(data::user& _u : data::users)
{ {
for(unsigned i = 0; i < _u.titleInfo.size(); i++) 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) 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) void ui::menu::setParams(const unsigned& _x, const unsigned& _y, const unsigned& _rW, const unsigned& _fS, const unsigned& _mL)
{ {
x = _x; x = _x;
mY = _y;
y = _y; y = _y;
tY = _y;
rW = _rW; rW = _rW;
rY = _y; rY = _y;
fSize = _fS; fSize = _fS;
@ -133,44 +135,33 @@ void ui::menu::update()
int mSize = opt.size() - 1, scrL = mL - 1; int mSize = opt.size() - 1, scrL = mL - 1;
if( (down & HidNpadButton_AnyUp) || ((held & HidNpadButton_AnyUp) && fc == 10) ) if( (down & HidNpadButton_AnyUp) || ((held & HidNpadButton_AnyUp) && fc == 10) )
{ {
--selected; if(selected > 0)
if(selected < 0)
selected = mSize;
if(mSize > (int)mL)
{ {
if(start > selected) --selected;
--start; if(selected - mL >= 0 && selected <= mSize - mL)
else if(selected - scrL > start) tY += rH;
start = selected - scrL;
} }
} }
else if( (down & HidNpadButton_AnyDown) || ((held & HidNpadButton_AnyDown) && fc == 10)) else if( (down & HidNpadButton_AnyDown) || ((held & HidNpadButton_AnyDown) && fc == 10))
{ {
++selected; if(selected < mSize)
if(selected > mSize) {
selected = 0; ++selected;
if(selected - mL > 0 && selected + mL <= mSize + 1)
if(selected > (start + scrL) && (start + scrL) < mSize) tY -= rH;
++start; }
if(selected == 0)
start = 0;
} }
else if(down & HidNpadButton_AnyLeft) else if(down & HidNpadButton_AnyLeft)
{ {
selected -= scrL / 2; selected -= scrL / 2;
if(selected < 0) if(selected < 0)
selected = 0; selected = 0;
if(selected < start)
start = selected;
} }
else if(down & HidNpadButton_AnyRight) else if(down & HidNpadButton_AnyRight)
{ {
selected += scrL / 2; selected += scrL / 2;
if(selected > mSize) if(selected > mSize)
selected = mSize; selected = mSize;
if(selected - scrL > start)
start = selected - scrL;
} }
if(down) if(down)
@ -194,6 +185,12 @@ void ui::menu::draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText
if(opt.size() < 1) if(opt.size() < 1)
return; return;
if(y != tY)
{
float add = (float)((float)tY - (float)y) / ui::animScale;
y += ceil(add);
}
if(clrAdd) if(clrAdd)
{ {
clrSh += 6; clrSh += 6;
@ -207,21 +204,21 @@ void ui::menu::draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText
clrAdd = true; clrAdd = true;
} }
for(int i = start; i < (int)opt.size(); i++) for(int i = 0; i < (int)opt.size(); i++)
{ {
if(i == selected) if(i == selected)
{ {
if(isActive) 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) 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 else
{ {
if(drawText) 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; 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 dW = scale * w;
int dH = scale * h; 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() void ui::menu::reset()
{ {
opt.clear(); opt.clear();
start = 0;
selected = 0; selected = 0;
y = mY;
tY = mY;
fc = 0; fc = 0;
} }

View File

@ -141,7 +141,7 @@ static void updateMenuText()
void ui::settInit() void ui::settInit()
{ {
ui::settMenu = new ui::menu; 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->setCallback(settMenuCallback, NULL);
ui::settMenu->setActive(false); 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::dirList *fldList;
static fs::backupArgs *backargs; static fs::backupArgs *backargs;
static std::string infoPanelString; static std::string infoPanelString;
static SDL_Texture *fldBuffer;//This is so folder menu doesn't draw over guide
void ui::refreshAllViews() void ui::refreshAllViews()
{ {
@ -58,8 +59,6 @@ static void fldFuncRestore(void *a)
ui::confirm(conf); ui::confirm(conf);
} }
void ui::populateFldMenu() void ui::populateFldMenu()
{ {
fldMenu->reset(); fldMenu->reset();
@ -155,8 +154,10 @@ static void ttlOptsShowInfoPanel(void *a)
static void ttlOptsBlacklistTitle(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); 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); ui::confirm(conf);
} }
@ -322,7 +323,9 @@ static void fldMenuCallback(void *a)
static void fldPanelDraw(void *a) static void fldPanelDraw(void *a)
{ {
SDL_Texture *target = (SDL_Texture *)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::drawLine(target, &ui::divClr, 10, 648, fldHelpWidth + 54, 648);
gfx::drawTextf(target, 18, 32, 673, &ui::txtCont, ui::folderHelp.c_str()); 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)); ttlViews.emplace_back(new ui::titleview(u, 128, 128, 16, 16, 7, ttlViewCallback));
ttlOpts = new ui::menu; ttlOpts = new ui::menu;
ttlOpts->setParams(10, 32, 390, 18, 8); ttlOpts->setParams(10, 32, 390, 20, 7);
ttlOpts->setCallback(ttlOptsCallback, NULL); ttlOpts->setCallback(ttlOptsCallback, NULL);
ttlOpts->setActive(false); ttlOpts->setActive(false);
fldMenu = new ui::menu; 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->setCallback(fldMenuCallback, NULL);
fldMenu->setActive(false); fldMenu->setActive(false);
@ -353,6 +356,7 @@ void ui::ttlInit()
infoPanel->setCallback(infoPanelCallback, NULL); infoPanel->setCallback(infoPanelCallback, NULL);
fldPanel = new ui::slideOutPanel(fldHelpWidth + 64, 720, 0, fldPanelDraw); 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); ui::registerPanel(fldPanel);
fldList = new fs::dirList; fldList = new fs::dirList;
@ -379,6 +383,7 @@ void ui::ttlExit()
for(ui::titleview *t : ttlViews) for(ui::titleview *t : ttlViews)
delete t; delete t;
SDL_DestroyTexture(fldBuffer);
delete ttlOptsPanel; delete ttlOptsPanel;
delete ttlOpts; delete ttlOpts;
delete infoPanel; delete infoPanel;

View File

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