Files
sphaira/sphaira/source/swkbd.cpp
2025-04-20 14:18:02 +01:00

60 lines
1.4 KiB
C++

#include "swkbd.hpp"
#include "defines.hpp"
#include <cstdlib>
namespace sphaira::swkbd {
namespace {
struct Config {
char out_text[FS_MAX_PATH]{};
bool numpad{};
};
Result ShowInternal(Config& cfg, const char* guide, const char* initial, s64 len_min, s64 len_max) {
SwkbdConfig c;
R_TRY(swkbdCreate(&c, 0));
swkbdConfigMakePresetDefault(&c);
swkbdConfigSetInitialCursorPos(&c, 1);
if (cfg.numpad) {
swkbdConfigSetType(&c, SwkbdType_NumPad);
}
if (guide) {
swkbdConfigSetGuideText(&c, guide);
}
if (initial) {
swkbdConfigSetInitialText(&c, initial);
}
if (len_min >= 0) {
swkbdConfigSetStringLenMin(&c, len_min);
}
if (len_max >= 0) {
swkbdConfigSetStringLenMax(&c, len_max);
}
return swkbdShow(&c, cfg.out_text, sizeof(cfg.out_text));
}
} // namespace
Result ShowText(std::string& out, const char* guide, const char* initial, s64 len_min, s64 len_max) {
Config cfg{};
R_TRY(ShowInternal(cfg, guide, initial, len_min, len_max));
out = cfg.out_text;
R_SUCCEED();
}
Result ShowNumPad(s64& out, const char* guide, const char* initial, s64 len_min, s64 len_max) {
Config cfg{};
cfg.numpad = true;
R_TRY(ShowInternal(cfg, guide, initial, len_min, len_max));
out = std::atoll(cfg.out_text);
R_SUCCEED();
}
} // namespace sphaira::swkbd