Navigation Menu

Skip to content

Commit

Permalink
Add enum kbdDisableBitmask to manage keyboard imput (#72) (#73)
Browse files Browse the repository at this point in the history
* Add enum kbdDisableBitmask to manage keyboard imput (#72)

* Add InputListItem & IntegerInputListItem examples
  • Loading branch information
H0neyBadger committed Jan 4, 2021
1 parent d5ba2ea commit cbdc1b6
Show file tree
Hide file tree
Showing 7 changed files with 102 additions and 13 deletions.
6 changes: 6 additions & 0 deletions example/main.cpp
Expand Up @@ -129,6 +129,10 @@ int main(int argc, char* argv[])

brls::SelectListItem* layerSelectItem = new brls::SelectListItem("main/layers/title"_i18n, { "main/layers/layer1"_i18n, "main/layers/layer2"_i18n });

brls::InputListItem* keyboardItem = new brls::InputListItem("main/keyboard/string/title"_i18n, "main/keyboard/string/default"_i18n, "main/keyboard/string/help"_i18n, "", 16);

brls::IntegerInputListItem* keyboardNumberItem = new brls::IntegerInputListItem("main/keyboard/number/title"_i18n, 1337, "main/keyboard/number/help"_i18n, "", 10);

testList->addView(dialogItem);
testList->addView(notificationItem);
testList->addView(themeItem);
Expand All @@ -137,6 +141,8 @@ int main(int argc, char* argv[])
testList->addView(crashItem);
testList->addView(installerItem);
testList->addView(popupItem);
testList->addView(keyboardItem);
testList->addView(keyboardNumberItem);

brls::Label* testLabel = new brls::Label(brls::LabelStyle::REGULAR, "main/more"_i18n, true);
testList->addView(testLabel);
Expand Down
6 changes: 4 additions & 2 deletions library/include/borealis/list.hpp
Expand Up @@ -24,6 +24,7 @@
#include <borealis/label.hpp>
#include <borealis/rectangle.hpp>
#include <borealis/scroll_view.hpp>
#include <borealis/swkbd.hpp>
#include <string>

namespace brls
Expand Down Expand Up @@ -162,9 +163,10 @@ class InputListItem : public ListItem
protected:
std::string helpText;
int maxInputLength;
int kbdDisableBitmask;

public:
InputListItem(std::string label, std::string initialValue, std::string helpText, std::string description = "", int maxInputLength = 32);
InputListItem(std::string label, std::string initialValue, std::string helpText, std::string description = "", int maxInputLength = 32, int kbdDisableBitmask = KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_NONE);

virtual bool onClick() override;
};
Expand All @@ -174,7 +176,7 @@ class InputListItem : public ListItem
class IntegerInputListItem : public InputListItem
{
public:
IntegerInputListItem(std::string label, int initialValue, std::string helpText, std::string description = "", int maxInputLength = 32);
IntegerInputListItem(std::string label, int initialValue, std::string helpText, std::string description = "", int maxInputLength = 32, int kbdDisableBitmask = KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_NONE);

virtual bool onClick() override;
};
Expand Down
17 changes: 15 additions & 2 deletions library/include/borealis/swkbd.hpp
Expand Up @@ -25,11 +25,24 @@
namespace brls
{

enum KeyboardKeyDisableBitmask
{
KEYBOARD_DISABLE_NONE = 0,
KEYBOARD_DISABLE_SPACE = 1,
KEYBOARD_DISABLE_AT = 1 << 1,
KEYBOARD_DISABLE_PERCENT = 1 << 2,
KEYBOARD_DISABLE_FORWSLASH = 1 << 3,
KEYBOARD_DISABLE_BACKSLASH = 1 << 4,
KEYBOARD_DISABLE_NUMBERS = 1 << 5,
KEYBOARD_DISABLE_DOWNLOADCODE = 1 << 6,
KEYBOARD_DISABLE_USERNAME = 1 << 7,
};

class Swkbd
{
public:
static bool openForText(std::function<void(std::string)> f, std::string headerText = "", std::string subText = "", int maxStringLength = 32, std::string initialText = "");
static bool openForNumber(std::function<void(int)> f, std::string headerText = "", std::string subText = "", int maxStringLength = 32, std::string initialText = "", std::string leftButton = "", std::string rightButton = "");
static bool openForText(std::function<void(std::string)> f, std::string headerText = "", std::string subText = "", int maxStringLength = 32, std::string initialText = "", int kbdDisableBitmask = KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_NONE);
static bool openForNumber(std::function<void(int)> f, std::string headerText = "", std::string subText = "", int maxStringLength = 32, std::string initialText = "", std::string leftButton = "", std::string rightButton = "", int kbdDisableBitmask = KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_NONE);
};

} // namespace brls
11 changes: 6 additions & 5 deletions library/lib/list.cpp
Expand Up @@ -491,10 +491,11 @@ bool ToggleListItem::getToggleState()
return this->toggleState;
}

InputListItem::InputListItem(std::string label, std::string initialValue, std::string helpText, std::string description, int maxInputLength)
InputListItem::InputListItem(std::string label, std::string initialValue, std::string helpText, std::string description, int maxInputLength, int kbdDisableBitmask)
: ListItem(label, description)
, helpText(helpText)
, maxInputLength(maxInputLength)
, kbdDisableBitmask(kbdDisableBitmask)
{
this->setValue(initialValue, false);
}
Expand All @@ -504,14 +505,14 @@ bool InputListItem::onClick()
Swkbd::openForText([&](std::string text) {
this->setValue(text, false);
},
this->helpText, "", this->maxInputLength, this->getValue());
this->helpText, "", this->maxInputLength, this->getValue(), this->kbdDisableBitmask);

ListItem::onClick();
return true;
}

IntegerInputListItem::IntegerInputListItem(std::string label, int initialValue, std::string helpText, std::string description, int maxInputLength)
: InputListItem(label, std::to_string(initialValue), helpText, description, maxInputLength)
IntegerInputListItem::IntegerInputListItem(std::string label, int initialValue, std::string helpText, std::string description, int maxInputLength, int kbdDisableBitmask)
: InputListItem(label, std::to_string(initialValue), helpText, description, maxInputLength, kbdDisableBitmask)
{
}

Expand All @@ -520,7 +521,7 @@ bool IntegerInputListItem::onClick()
Swkbd::openForNumber([&](int number) {
this->setValue(std::to_string(number), false);
},
this->helpText, "", this->maxInputLength, this->getValue());
this->helpText, "", this->maxInputLength, this->getValue(), "", "", this->kbdDisableBitmask);

ListItem::onClick();
return true;
Expand Down
51 changes: 47 additions & 4 deletions library/lib/swkbd.cpp
Expand Up @@ -30,6 +30,7 @@ namespace brls
{

#ifdef __SWITCH__

static SwkbdConfig createSwkbdBaseConfig(std::string headerText, std::string subText, int maxStringLength, std::string initialText)
{
SwkbdConfig config;
Expand All @@ -46,6 +47,48 @@ static SwkbdConfig createSwkbdBaseConfig(std::string headerText, std::string sub

return config;
}

int getSwkbdKeyDisableBitmask(int borealis_key)
{
// translate brls to Switch libnx values
int ret = 0;
if (borealis_key == brls::KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_NONE)
return 0;

if (borealis_key & brls::KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_SPACE)
// Disable space-bar
ret |= SwkbdKeyDisableBitmask_Space;

if (borealis_key & brls::KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_AT)
// Disable '@'.
ret |= SwkbdKeyDisableBitmask_At;

if (borealis_key & brls::KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_PERCENT)
// Disable '%'.
ret |= SwkbdKeyDisableBitmask_Percent;

if (borealis_key & brls::KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_FORWSLASH)
// Disable '/'.
ret |= SwkbdKeyDisableBitmask_ForwardSlash;

if (borealis_key & brls::KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_BACKSLASH)
// Disable '\'.
ret |= SwkbdKeyDisableBitmask_Backslash;

if (borealis_key & brls::KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_NUMBERS)
// Disable numbers.
ret |= SwkbdKeyDisableBitmask_Numbers;

if (borealis_key & brls::KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_DOWNLOADCODE)
// Used for swkbdConfigMakePresetDownloadCode.
ret |= SwkbdKeyDisableBitmask_DownloadCode;

if (borealis_key & brls::KeyboardKeyDisableBitmask::KEYBOARD_DISABLE_USERNAME)
// Used for swkbdConfigMakePresetUserName. Disables '@', '%', and '\'.
ret |= SwkbdKeyDisableBitmask_UserName;

return ret;
}
#else
static std::string terminalInput(std::string text)
{
Expand All @@ -56,13 +99,13 @@ static std::string terminalInput(std::string text)
}
#endif

bool Swkbd::openForText(std::function<void(std::string)> f, std::string headerText, std::string subText, int maxStringLength, std::string initialText)
bool Swkbd::openForText(std::function<void(std::string)> f, std::string headerText, std::string subText, int maxStringLength, std::string initialText, int kbdDisableBitmask)
{
#ifdef __SWITCH__
SwkbdConfig config = createSwkbdBaseConfig(headerText, subText, maxStringLength, initialText);

swkbdConfigSetType(&config, SwkbdType_Normal);
swkbdConfigSetKeySetDisableBitmask(&config, SwkbdKeyDisableBitmask_At | SwkbdKeyDisableBitmask_Percent | SwkbdKeyDisableBitmask_ForwardSlash | SwkbdKeyDisableBitmask_Backslash);
swkbdConfigSetKeySetDisableBitmask(&config, getSwkbdKeyDisableBitmask(kbdDisableBitmask));

char buffer[0x100];

Expand All @@ -84,15 +127,15 @@ bool Swkbd::openForText(std::function<void(std::string)> f, std::string headerTe
#endif
}

bool Swkbd::openForNumber(std::function<void(int)> f, std::string headerText, std::string subText, int maxStringLength, std::string initialText, std::string leftButton, std::string rightButton)
bool Swkbd::openForNumber(std::function<void(int)> f, std::string headerText, std::string subText, int maxStringLength, std::string initialText, std::string leftButton, std::string rightButton, int kbdDisableBitmask)
{
#ifdef __SWITCH__
SwkbdConfig config = createSwkbdBaseConfig(headerText, subText, maxStringLength, initialText);

swkbdConfigSetType(&config, SwkbdType_NumPad);
swkbdConfigSetLeftOptionalSymbolKey(&config, leftButton.c_str());
swkbdConfigSetRightOptionalSymbolKey(&config, rightButton.c_str());
swkbdConfigSetKeySetDisableBitmask(&config, SwkbdKeyDisableBitmask_At | SwkbdKeyDisableBitmask_Percent | SwkbdKeyDisableBitmask_ForwardSlash | SwkbdKeyDisableBitmask_Backslash);
swkbdConfigSetKeySetDisableBitmask(&config, getSwkbdKeyDisableBitmask(kbdDisableBitmask));

char buffer[0x100];

Expand Down
12 changes: 12 additions & 0 deletions resources/i18n/en-US/main.json
Expand Up @@ -60,6 +60,18 @@
"item1": "Item 1",
"item2": "Item 2",
"item3": "Item 3"
},

"keyboard": {
"string": {
"title": "Open Keyboard",
"default": "Default text",
"help": "Help message"
},
"number": {
"title": "Open Num Keyboard",
"help": "Help message"
}
}
}

12 changes: 12 additions & 0 deletions resources/i18n/fr/main.json
Expand Up @@ -60,6 +60,18 @@
"item1": "Item 1",
"item2": "Item 2",
"item3": "Item 3"
},

"keyboard": {
"string": {
"title": "Ouvrir le clavier",
"default": "Texte par défaut",
"help": "Message d'aide"
},
"number": {
"title": "Ouvrir le clavier numérique",
"help": "Message d'aide"
}
}
}

0 comments on commit cbdc1b6

Please sign in to comment.