Fix some text UI stuff, get rid of gross if.

This commit is contained in:
J-D-K
2020-06-10 17:48:34 -04:00
parent 40131cd3f9
commit fa257562f4
8 changed files with 167 additions and 82 deletions

View File

@@ -7,12 +7,6 @@
#include "gfx.h"
#include "miscui.h"
enum menuTouch
{
MENU_NOTHING,
MENU_DOUBLE_REL
};
namespace ui
{
class menu
@@ -32,9 +26,6 @@ namespace ui
//Returns selected option
int getSelected() { return selected; }
//Returns touch event from buttons
int getTouchEvent() { return retEvent; }
//Draws the menu at x and y. rectWidth is the width of the rectangle drawn under the selected
void draw(const clr& textClr);
@@ -53,7 +44,7 @@ namespace ui
//Options vector
std::vector<std::string> opt;
//Selected + frame counting for auto-scroll
int selected = 0, fc = 0, start = 0, retEvent = MENU_NOTHING;
int selected = 0, fc = 0, start = 0;
//How much we shift the color of the rectangle
uint8_t clrSh = 0;
bool clrAdd = true;

42
inc/uistrmap.h Normal file
View File

@@ -0,0 +1,42 @@
#ifndef UISTRMAP_H
#define UISTRMAP_H
#include <unordered_map>
//This is only included in UI so I don't have a nasty if else if else if else if else if
//Might be a shitty way to pull this off, but meh
static std::unordered_map<std::string, unsigned> uistrdef;
inline void transLoadInit()
{
uistrdef["author"] = 0;
uistrdef["userHelp"] = 1;
uistrdef["titleHelp"] = 2;
uistrdef["folderHelp"] = 3;
uistrdef["optHelp"] = 4;
uistrdef["yt"] = 5;
uistrdef["nt"] = 6;
uistrdef["on"] = 7;
uistrdef["off"] = 8;
uistrdef["confirmBlacklist"] = 9;
uistrdef["confirmOverwrite"] = 10;
uistrdef["confirmRestore"] = 11;
uistrdef["confirmDelete"] = 12;
uistrdef["confirmCopy"] = 13;
uistrdef["confirmEraseNand"] = 14;
uistrdef["confirmEraseFolder"] = 15;
uistrdef["confirmHead"] = 16;
uistrdef["copyHead"] = 17;
uistrdef["noSavesFound"] = 18;
uistrdef["advMenu"] = 19;
uistrdef["extMenu"] = 20;
uistrdef["optMenu"] = 21;
uistrdef["optMenuExp"] = 22;
uistrdef["holdingText"] = 23;
}
inline void transLoadExit()
{
uistrdef.clear();
}
#endif

View File

@@ -1,5 +1,5 @@
#include <vector>
#include <map>
#include <unordered_map>
#include <string>
#include <cstring>
#include <algorithm>

View File

@@ -369,7 +369,6 @@ size_t textGetWidth(const char *str, const font *f, int sz)
width += slot->advance.x >> 6;
}
return width;
}

View File

@@ -10,6 +10,9 @@
#include "util.h"
#include "file.h"
//for ui translation loading
#include "uistrmap.h"
#define VER_STRING "v. 06.07.2020"
//text mode
@@ -120,77 +123,129 @@ static void loadTrans()
}
}
transLoadInit();
fs::dataFile lang(file);
while(lang.readNextLine(true))
{
std::string varName = lang.getName();
//Holy shit this'll be fun
if(varName == "author")
author = lang.getNextValueStr();
else if(varName == "userHelp")
ui::userHelp = lang.getNextValueStr();
else if(varName == "titleHelp")
ui::titleHelp = lang.getNextValueStr();
else if(varName == "folderHelp")
ui::folderHelp = lang.getNextValueStr();
else if(varName == "optHelp")
ui::optHelp = lang.getNextValueStr();
else if(varName == "yt")
ui::yt = lang.getNextValueStr();
else if(varName == "nt")
ui::nt = lang.getNextValueStr();
else if(varName == "on")
ui::on = lang.getNextValueStr();
else if(varName == "off")
ui::off = lang.getNextValueStr();
else if(varName == "confirmBlacklist")
ui::confBlacklist = lang.getNextValueStr();
else if(varName == "confirmOverwrite")
ui::confOverwrite = lang.getNextValueStr();
else if(varName == "confirmRestore")
ui::confRestore = lang.getNextValueStr();
else if(varName == "confirmDelete")
ui::confDel = lang.getNextValueStr();
else if(varName == "confirmCopy")
ui::confCopy = lang.getNextValueStr();
else if(varName == "confirmEraseNand")
ui::confEraseNand = lang.getNextValueStr();
else if(varName == "confirmEraseFolder")
ui::confEraseFolder = lang.getNextValueStr();
else if(varName == "confirmHead")
ui::confirmHead = lang.getNextValueStr();
else if(varName == "copyHead")
ui::copyHead = lang.getNextValueStr();
else if(varName == "noSavesFound")
ui::noSavesFound = lang.getNextValueStr();
else if(varName == "advMenu")
switch(uistrdef[lang.getName()])
{
int ind = lang.getNextValueInt();
ui::advMenuStr[ind] = lang.getNextValueStr();
case 0:
author = lang.getNextValueStr();
break;
case 1:
ui::userHelp = lang.getNextValueStr();
break;
case 2:
ui::titleHelp = lang.getNextValueStr();
break;
case 3:
ui::folderHelp = lang.getNextValueStr();
break;
case 4:
ui::optHelp = lang.getNextValueStr();
break;
case 5:
ui::yt = lang.getNextValueStr();
break;
case 6:
ui::nt = lang.getNextValueStr();
break;
case 7:
ui::on = lang.getNextValueStr();
break;
case 8:
ui::off = lang.getNextValueStr();
break;
case 9:
ui::confBlacklist = lang.getNextValueStr();
break;
case 10:
ui::confOverwrite = lang.getNextValueStr();
break;
case 11:
ui::confRestore = lang.getNextValueStr();
break;
case 12:
ui::confDel = lang.getNextValueStr();
break;
case 13:
ui::confCopy = lang.getNextValueStr();
break;
case 14:
ui::confEraseNand = lang.getNextValueStr();
break;
case 15:
ui::confEraseFolder = lang.getNextValueStr();
break;
case 16:
ui::confirmHead = lang.getNextValueStr();
break;
case 17:
ui::copyHead = lang.getNextValueStr();
break;
case 18:
ui::noSavesFound = lang.getNextValueStr();
break;
case 19:
{
int ind = lang.getNextValueInt();
ui::advMenuStr[ind] = lang.getNextValueStr();
}
break;
case 20:
{
int ind = lang.getNextValueInt();
ui::exMenuStr[ind] = lang.getNextValueStr();
}
break;
case 21:
{
int ind = lang.getNextValueInt();
ui::optMenuStr[ind] = lang.getNextValueStr();
}
break;
case 22:
{
int ind = lang.getNextValueInt();
ui::optMenuExp[ind] = lang.getNextValueStr();
}
break;
case 23:
{
int ind = lang.getNextValueInt();
ui::holdingText[ind] = lang.getNextValueStr();
}
break;
default:
ui::showMessage("*Translation File Error:*", "On Line: %s\n*%s* is not a known or valid string name.", lang.getLine(), lang.getName());
break;
}
else if(varName == "extMenu")
{
int ind = lang.getNextValueInt();
ui::exMenuStr[ind] = lang.getNextValueStr();
}
else if(varName == "optMenu")
{
int ind = lang.getNextValueInt();
ui::optMenuStr[ind] = lang.getNextValueStr();
}
else if(varName == "optMenuExp")
{
int ind = lang.getNextValueInt();
ui::optMenuExp[ind] = lang.getNextValueStr();
}
else if(varName == "holdingText")
{
int ind = lang.getNextValueInt();
ui::holdingText[ind] = lang.getNextValueStr();
}
else
ui::showMessage("*Translation File Error:*", "On Line: %s\n*%s* is not a known or valid string name.", lang.getLine(), varName.c_str());
}
transLoadExit();
}
void ui::initTheme()

View File

@@ -149,9 +149,7 @@ void performCopyMenuOps()
std::remove(delPath.c_str());
}
if(commit)
{
fsdevCommitDevice(dev.c_str());
};
}
}
break;
@@ -354,6 +352,7 @@ void ui::advModePrep(const std::string& svDev, const FsSaveDataType& _type, bool
{
commit = commitOnWrite;
type = _type;
saveMenu.setParams(30, 98, 602);
sdMenu.setParams(648, 98, 602);
copyMenu.setParams(472, 278, 304);

View File

@@ -8,7 +8,6 @@
static const clr menuColorLight = clrCreateU32(0xFFF05032), menuColorDark = clrCreateU32(0xFFC5FF00);
void ui::menu::setParams(const unsigned& _x, const unsigned& _y, const unsigned& _rW)
{
x = _x;

View File

@@ -159,9 +159,9 @@ void ui::textFolderMenuUpdate(const uint64_t& down, const uint64_t& held)
else
overwriteBackup(folderMenu.getSelected() - 1);
}
else if(down & KEY_Y)
else if(down & KEY_Y && folderMenu.getSelected() > 0)
restoreBackup(folderMenu.getSelected() - 1);
else if(down & KEY_X)
else if(down & KEY_X && folderMenu.getSelected() > 0)
deleteBackup(folderMenu.getSelected() - 1);
else if(down & KEY_MINUS)
{