Add freebird popup + user change in titles

This commit is contained in:
J-D-K
2020-03-24 01:36:57 -04:00
parent e8d8272613
commit c71ebc96fc
8 changed files with 143 additions and 56 deletions

View File

@@ -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
#---------------------------------------------------------------------------------

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;

View File

@@ -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();
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}
}

View File

@@ -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)