mirror of
https://github.com/J-D-K/JKSV.git
synced 2026-08-22 02:16:18 -05:00
Add freebird popup + user change in titles
This commit is contained in:
2
Makefile
2
Makefile
@@ -38,7 +38,7 @@ INCLUDES := inc
|
||||
EXEFS_SRC := exefs_src
|
||||
APP_TITLE := JKSV
|
||||
APP_AUTHOR := JK
|
||||
APP_VERSION := 03.22.2020
|
||||
APP_VERSION := 03.24.2020
|
||||
ROMFS := romfs
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
@@ -112,6 +112,7 @@ namespace data
|
||||
//Stores current data we're using so I don't have to type so much.
|
||||
extern titledata curData;
|
||||
extern user curUser;
|
||||
extern int selUser, selData;
|
||||
|
||||
extern bool isSpcd;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@ enum trackEvents
|
||||
TRACK_SWIPE_RIGHT
|
||||
};
|
||||
|
||||
#define POP_FRAME_DEFAULT 130
|
||||
|
||||
//For smaller classes that aren't easy to get lost in and general functions
|
||||
namespace ui
|
||||
{
|
||||
@@ -86,6 +88,10 @@ namespace ui
|
||||
bool confirmDelete(const std::string& p);
|
||||
void drawTextbox(int x, int y, int w, int h);
|
||||
void drawTextboxInvert(int x, int y, int w, int h);
|
||||
|
||||
//Popup from freebird
|
||||
void showPopup(const std::string& mess, unsigned frames);
|
||||
void drawPopup();
|
||||
}
|
||||
|
||||
#endif // MISCUI_H
|
||||
|
||||
@@ -75,6 +75,7 @@ namespace data
|
||||
{
|
||||
titledata curData;
|
||||
user curUser;
|
||||
int selUser = 0, selData = 0;
|
||||
std::vector<icn> icons;
|
||||
std::vector<user> users;
|
||||
bool forceMount = true;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
#include "util.h"
|
||||
#include "file.h"
|
||||
|
||||
#define VER_STRING "v. 03.22.2020"
|
||||
#define VER_STRING "v. 03.24.2020"
|
||||
|
||||
//Nav buttons
|
||||
std::vector<ui::button> usrNav, ttlNav, fldNav;
|
||||
@@ -21,7 +21,7 @@ static tex *top, *bot;
|
||||
|
||||
//Help text
|
||||
static const std::string userHelp = "\ue0e0 Select \ue0e3 Dump All \ue0e2 UI Mode \ue0f0 Extras";
|
||||
static const std::string titleHelp = "\ue0e0 Select \ue0e3 Dump All \ue0e2 BlackList \ue0e1 Back";
|
||||
static const std::string titleHelp = "\ue0e0 Select \ue0e4\ue0e5 Change User \ue0e3 Dump All \ue0e2 BlackList \ue0e1 Back";
|
||||
static const std::string folderHelp = "\ue0f0 File Mode \ue0e4\ue0e5 AutoName \ue0e0 Backup \ue0e3 Restore \ue0e2 Delete \ue0e1 Back";
|
||||
|
||||
//X position of help texts. Calculated to make editing quicker/easier
|
||||
@@ -340,5 +340,7 @@ namespace ui
|
||||
updateExMenu(down, held, p);
|
||||
break;
|
||||
}
|
||||
|
||||
drawPopup();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,17 @@
|
||||
#include "miscui.h"
|
||||
#include "util.h"
|
||||
|
||||
static bool popDraw = false;
|
||||
static std::string popText;
|
||||
static unsigned popY, popTextX, popState, frameCount, frameHold;
|
||||
|
||||
enum popStates
|
||||
{
|
||||
popRise,
|
||||
popShow,
|
||||
popFall
|
||||
};
|
||||
|
||||
namespace ui
|
||||
{
|
||||
progBar::progBar(const uint64_t& _max)
|
||||
@@ -272,4 +283,47 @@ namespace ui
|
||||
drawRect(frameBuffer, x + 32, (y + h) - 32, w - 64, 32, temp);
|
||||
texDrawInvert(ui::cornerBottomRight, frameBuffer, (x + w) - 32, (y + h) - 32);
|
||||
}
|
||||
|
||||
void showPopup(const std::string& mess, unsigned frames)
|
||||
{
|
||||
frameCount = 0;
|
||||
frameHold = frames;
|
||||
popTextX = 640 - (textGetWidth(mess.c_str(), ui::shared, 24) / 2);
|
||||
|
||||
popText = mess;
|
||||
popY = 721;
|
||||
popState = popRise;
|
||||
popDraw = true;
|
||||
}
|
||||
|
||||
void drawPopup()
|
||||
{
|
||||
if(!popDraw)
|
||||
return;
|
||||
|
||||
switch(popState)
|
||||
{
|
||||
case popRise:
|
||||
if(popY > 559)
|
||||
popY -= 24;
|
||||
else
|
||||
popState = popShow;
|
||||
break;
|
||||
|
||||
case popShow:
|
||||
if(frameCount++ >= frameHold)
|
||||
popState = popFall;
|
||||
break;
|
||||
|
||||
case popFall:
|
||||
if(popY < 721)
|
||||
popY += 24;
|
||||
else
|
||||
popDraw = false;
|
||||
break;
|
||||
}
|
||||
|
||||
drawTextbox(60, popY, 1160, 64);
|
||||
drawText(popText.c_str(), frameBuffer, ui::shared, popTextX, popY + 20, 24, ui::txtClr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace ui
|
||||
{
|
||||
//Static vars so they don't change on every loop
|
||||
//Where to start in titles, selected title
|
||||
static int start = 0, selected = 0;
|
||||
static int start = 0;
|
||||
|
||||
//Color shift for rect
|
||||
static uint8_t clrShft = 0;
|
||||
@@ -59,12 +59,12 @@ namespace ui
|
||||
if(i == endTitle)
|
||||
break;
|
||||
|
||||
if((int)i == selected)
|
||||
if((int)i == data::selData)
|
||||
{
|
||||
selRectX = tX - 6;
|
||||
selRectY = y - 6;
|
||||
|
||||
std::string title = data::curUser.titles[selected].getTitle();
|
||||
std::string title = data::curUser.titles[data::selData].getTitle();
|
||||
unsigned titleWidth = textGetWidth(title.c_str(), ui::shared, 16);
|
||||
int rectWidth = titleWidth + 32, rectX = (tX + 64) - (rectWidth / 2);
|
||||
if(rectX < 16)
|
||||
@@ -84,9 +84,9 @@ namespace ui
|
||||
for(int i = 0; i < 32; i++)
|
||||
{
|
||||
selButtons[i].update(p);
|
||||
if(i == selected - start && selButtons[i].getEvent() == BUTTON_RELEASED)
|
||||
if(i == data::selData - start && selButtons[i].getEvent() == BUTTON_RELEASED)
|
||||
{
|
||||
data::curData = data::curUser.titles[selected];
|
||||
data::curData = data::curUser.titles[data::selData];
|
||||
if(fs::mountSave(data::curUser, data::curData))
|
||||
{
|
||||
util::makeTitleDir(data::curUser, data::curData);
|
||||
@@ -99,7 +99,7 @@ namespace ui
|
||||
else if(selButtons[i].getEvent() == BUTTON_RELEASED)
|
||||
{
|
||||
if(start + i < (int)data::curUser.titles.size())
|
||||
selected = start + i;
|
||||
data::selData = start + i;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,9 +117,9 @@ namespace ui
|
||||
if(start + 32 < (int)data::curUser.titles.size())
|
||||
{
|
||||
start += 8;
|
||||
selected += 8;
|
||||
if(selected > (int)data::curUser.titles.size() - 1)
|
||||
selected = data::curUser.titles.size() - 1;
|
||||
data::selData += 8;
|
||||
if(data::selData > (int)data::curUser.titles.size() - 1)
|
||||
data::selData = data::curUser.titles.size() - 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -129,7 +129,7 @@ namespace ui
|
||||
if(start - 8 >= 0)
|
||||
{
|
||||
start -= 8;
|
||||
selected -= 8;
|
||||
data::selData -= 8;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -137,41 +137,41 @@ namespace ui
|
||||
|
||||
if(down & KEY_RIGHT)
|
||||
{
|
||||
if(selected < (int)data::curUser.titles.size() - 1)
|
||||
selected++;
|
||||
if(data::selData < (int)data::curUser.titles.size() - 1)
|
||||
data::selData++;
|
||||
|
||||
if(selected >= (int)start + 32)
|
||||
if(data::selData >= (int)start + 32)
|
||||
start += 8;
|
||||
}
|
||||
else if(down & KEY_LEFT)
|
||||
{
|
||||
if(selected > 0)
|
||||
selected--;
|
||||
if(data::selData > 0)
|
||||
data::selData--;
|
||||
|
||||
if(selected < (int)start)
|
||||
if(data::selData < (int)start)
|
||||
start -= 8;
|
||||
}
|
||||
else if(down & KEY_UP)
|
||||
{
|
||||
selected -= 8;
|
||||
if(selected < 0)
|
||||
selected = 0;
|
||||
data::selData -= 8;
|
||||
if(data::selData < 0)
|
||||
data::selData = 0;
|
||||
|
||||
if(selected < start)
|
||||
if(data::selData < start)
|
||||
start -= 8;
|
||||
}
|
||||
else if(down & KEY_DOWN)
|
||||
{
|
||||
selected += 8;
|
||||
if(selected > (int)data::curUser.titles.size() - 1)
|
||||
selected = data::curUser.titles.size() - 1;
|
||||
data::selData += 8;
|
||||
if(data::selData > (int)data::curUser.titles.size() - 1)
|
||||
data::selData = data::curUser.titles.size() - 1;
|
||||
|
||||
if(selected - start >= 32)
|
||||
if(data::selData - start >= 32)
|
||||
start += 8;
|
||||
}
|
||||
else if(down & KEY_A || ttlNav[0].getEvent() == BUTTON_RELEASED)
|
||||
{
|
||||
data::curData = data::curUser.titles[selected];
|
||||
data::curData = data::curUser.titles[data::selData];
|
||||
if(fs::mountSave(data::curUser, data::curData))
|
||||
{
|
||||
util::makeTitleDir(data::curUser, data::curData);
|
||||
@@ -187,19 +187,45 @@ namespace ui
|
||||
}
|
||||
else if(down & KEY_X || ttlNav[2].getEvent() == BUTTON_RELEASED)
|
||||
{
|
||||
std::string confStr = "Are you 100% sure you want to add \"" + data::curUser.titles[selected].getTitle() + \
|
||||
std::string confStr = "Are you 100% sure you want to add \"" + data::curUser.titles[data::selData].getTitle() + \
|
||||
"\" to your blacklist?";
|
||||
if(ui::confirm(confStr))
|
||||
data::blacklistAdd(data::curUser, data::curUser.titles[selected]);
|
||||
data::blacklistAdd(data::curUser, data::curUser.titles[data::selData]);
|
||||
}
|
||||
else if(down & KEY_B || ttlNav[3].getEvent() == BUTTON_RELEASED)
|
||||
{
|
||||
start = 0;
|
||||
selected = 0;
|
||||
data::selData = 0;
|
||||
selRectX = 64;
|
||||
selRectY = 90;
|
||||
mstate = USR_SEL;
|
||||
return;
|
||||
}
|
||||
else if(down & KEY_L)
|
||||
{
|
||||
data::selUser--;
|
||||
if(data::selUser < 0)
|
||||
data::selUser = data::users.size() -1;
|
||||
|
||||
start = 0;
|
||||
data::selData = 0;
|
||||
selRectX = 64, selRectY = 90;
|
||||
data::curUser = data::users[data::selUser];
|
||||
|
||||
ui::showPopup(data::curUser.getUsername(), POP_FRAME_DEFAULT);
|
||||
}
|
||||
else if(down & KEY_R)
|
||||
{
|
||||
data::selUser++;
|
||||
if(data::selUser > (int)data::users.size() - 1)
|
||||
data::selUser = 0;
|
||||
|
||||
start = 0;
|
||||
data::selData = 0;
|
||||
selRectX = 64, selRectY = 90;
|
||||
data::curUser = data::users[data::selUser];
|
||||
|
||||
ui::showPopup(data::curUser.getUsername(), POP_FRAME_DEFAULT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <vector>
|
||||
#include <switch.h>
|
||||
|
||||
#include "data.h"
|
||||
#include "ui.h"
|
||||
#include "uiupdate.h"
|
||||
#include "file.h"
|
||||
@@ -14,7 +15,7 @@ namespace ui
|
||||
void updateUserMenu(const uint64_t& down, const uint64_t& held, const touchPosition& p)
|
||||
{
|
||||
//Static so they don't get reset every loop
|
||||
static int start = 0, selected = 0;
|
||||
static int start = 0;
|
||||
|
||||
static uint8_t clrShft = 0;
|
||||
static bool clrAdd = true;
|
||||
@@ -51,12 +52,12 @@ namespace ui
|
||||
if(i == endUser)
|
||||
break;
|
||||
|
||||
if((int)i == selected)
|
||||
if((int)i == data::selUser)
|
||||
{
|
||||
selRectX = tX - 6;
|
||||
selRectY = y - 6;
|
||||
|
||||
std::string username = data::users[selected].getUsername();
|
||||
std::string username = data::users[data::selUser].getUsername();
|
||||
unsigned userWidth = textGetWidth(username.c_str(), ui::shared, 16);
|
||||
int userRectWidth = userWidth + 32, userRectX = (tX + 64) - (userRectWidth / 2);
|
||||
if(userRectX < 16)
|
||||
@@ -77,15 +78,15 @@ namespace ui
|
||||
for(int i = 0; i < 32; i++)
|
||||
{
|
||||
selButtons[i].update(p);
|
||||
if(selected == i && selButtons[i].getEvent() == BUTTON_RELEASED)
|
||||
if(data::selUser == i && selButtons[i].getEvent() == BUTTON_RELEASED)
|
||||
{
|
||||
data::curUser = data::users[selected];
|
||||
data::curUser = data::users[data::selUser];
|
||||
mstate = TTL_SEL;
|
||||
}
|
||||
else if(selButtons[i].getEvent() == BUTTON_RELEASED)
|
||||
{
|
||||
if(start + i < (int)data::users.size())
|
||||
selected = start + i;
|
||||
data::selUser = start + i;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,45 +99,41 @@ namespace ui
|
||||
|
||||
if(down & KEY_RIGHT)
|
||||
{
|
||||
if(selected < (int)data::users.size() - 1)
|
||||
selected++;
|
||||
if(data::selUser < (int)data::users.size() - 1)
|
||||
data::selUser++;
|
||||
|
||||
if(selected >= (int)start + 32)
|
||||
if(data::selUser >= (int)start + 32)
|
||||
start += 8;
|
||||
}
|
||||
else if(down & KEY_LEFT)
|
||||
{
|
||||
if(selected > 0)
|
||||
selected--;
|
||||
if(data::selUser > 0)
|
||||
data::selUser--;
|
||||
|
||||
if(selected < start)
|
||||
if(data::selUser < start)
|
||||
start -= 8;
|
||||
}
|
||||
else if(down & KEY_UP)
|
||||
{
|
||||
selected -= 8;
|
||||
if(selected < 0)
|
||||
selected = 0;
|
||||
data::selUser -= 8;
|
||||
if(data::selUser < 0)
|
||||
data::selUser = 0;
|
||||
|
||||
if(selected - start >= 32)
|
||||
if(data::selUser - start >= 32)
|
||||
start -= 8;
|
||||
}
|
||||
else if(down & KEY_DOWN)
|
||||
{
|
||||
selected += 8;
|
||||
if(selected > (int)data::users.size() - 1)
|
||||
selected = data::users.size() - 1;
|
||||
data::selUser += 8;
|
||||
if(data::selUser > (int)data::users.size() - 1)
|
||||
data::selUser = data::users.size() - 1;
|
||||
|
||||
if(selected - start >= 32)
|
||||
if(data::selUser - start >= 32)
|
||||
start += 8;
|
||||
}
|
||||
else if(down & KEY_A || usrNav[0].getEvent() == BUTTON_RELEASED)
|
||||
{
|
||||
data::curUser = data::users[selected];
|
||||
//Reset this
|
||||
start = 0;
|
||||
selected = 0;
|
||||
selRectX = 64, selRectY = 90;
|
||||
data::curUser = data::users[data::selUser];
|
||||
mstate = TTL_SEL;
|
||||
}
|
||||
else if(down & KEY_Y || usrNav[1].getEvent() == BUTTON_RELEASED)
|
||||
|
||||
Reference in New Issue
Block a user