mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2025-10-10 23:22:35 +02:00
* feat: backport js_gpio from unleashed * feat: backport js_keyboard, TextInputModel::minimum_length from unleashed * fix: api version inconsistency * style: js_gpio * build: fix submodule ._ . * refactor: js_gpio * docs: type declarations for gpio * feat: gpio interrupts * fix: js_gpio freeing, resetting and minor stylistic changes * style: js_gpio * style: mlib array, fixme's * feat: js_gpio adc * feat: js_event_loop * docs: js_event_loop * feat: js_event_loop subscription cancellation * feat: js_event_loop + js_gpio integration * fix: js_event_loop memory leak * feat: stop event loop on back button * test: js: basic, math, event_loop * feat: js_event_loop queue * feat: js linkage to previously loaded plugins * build: fix ci errors * feat: js module ordered teardown * feat: js_gui_defer_free * feat: basic hourglass view * style: JS ASS (Argument Schema for Scripts) * fix: js_event_loop mem leaks and lifetime problems * fix: crashing test and pvs false positives * feat: mjs custom obj destructors, gui submenu view * refactor: yank js_gui_defer_free (yuck) * refactor: maybe_unsubscribe * empty_screen, docs, typing fix-ups * docs: navigation event & demo * feat: submenu setHeader * feat: text_input * feat: text_box * docs: text_box availability * ci: silence irrelevant pvs low priority warning * style: use furistring * style: _get_at -> _safe_get * fix: built-in module name assignment * feat: js_dialog; refactor, optimize: js_gui * docs: js_gui * ci: silence pvs warning: Memory allocation is infallible * style: fix storage spelling * feat: foreign pointer signature checks * feat: js_storage * docs: js_storage * fix: my unit test was breaking other tests ;_; * ci: fix ci? * Make doxygen happy * docs: flipper, math, notification, global * style: review suggestions * style: review fixups * fix: badusb demo script * docs: badusb * ci: add nofl * ci: make linter happy * Bump api version Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
79 lines
2.5 KiB
C
79 lines
2.5 KiB
C
#include "../../js_modules.h" // IWYU pragma: keep
|
|
#include "js_gui.h"
|
|
#include <gui/modules/text_box.h>
|
|
|
|
static bool
|
|
text_assign(struct mjs* mjs, TextBox* text_box, JsViewPropValue value, FuriString* context) {
|
|
UNUSED(mjs);
|
|
furi_string_set(context, value.string);
|
|
text_box_set_text(text_box, furi_string_get_cstr(context));
|
|
return true;
|
|
}
|
|
|
|
static bool font_assign(struct mjs* mjs, TextBox* text_box, JsViewPropValue value, void* context) {
|
|
UNUSED(context);
|
|
TextBoxFont font;
|
|
if(strcasecmp(value.string, "hex") == 0) {
|
|
font = TextBoxFontHex;
|
|
} else if(strcasecmp(value.string, "text") == 0) {
|
|
font = TextBoxFontText;
|
|
} else {
|
|
mjs_prepend_errorf(mjs, MJS_BAD_ARGS_ERROR, "must be one of: \"text\", \"hex\"");
|
|
return false;
|
|
}
|
|
text_box_set_font(text_box, font);
|
|
return true;
|
|
}
|
|
|
|
static bool
|
|
focus_assign(struct mjs* mjs, TextBox* text_box, JsViewPropValue value, void* context) {
|
|
UNUSED(context);
|
|
TextBoxFocus focus;
|
|
if(strcasecmp(value.string, "start") == 0) {
|
|
focus = TextBoxFocusStart;
|
|
} else if(strcasecmp(value.string, "end") == 0) {
|
|
focus = TextBoxFocusEnd;
|
|
} else {
|
|
mjs_prepend_errorf(mjs, MJS_BAD_ARGS_ERROR, "must be one of: \"start\", \"end\"");
|
|
return false;
|
|
}
|
|
text_box_set_focus(text_box, focus);
|
|
return true;
|
|
}
|
|
|
|
FuriString* ctx_make(struct mjs* mjs, TextBox* specific_view, mjs_val_t view_obj) {
|
|
UNUSED(mjs);
|
|
UNUSED(specific_view);
|
|
UNUSED(view_obj);
|
|
return furi_string_alloc();
|
|
}
|
|
|
|
void ctx_destroy(TextBox* specific_view, FuriString* context, FuriEventLoop* loop) {
|
|
UNUSED(specific_view);
|
|
UNUSED(loop);
|
|
furi_string_free(context);
|
|
}
|
|
|
|
static const JsViewDescriptor view_descriptor = {
|
|
.alloc = (JsViewAlloc)text_box_alloc,
|
|
.free = (JsViewFree)text_box_free,
|
|
.get_view = (JsViewGetView)text_box_get_view,
|
|
.custom_make = (JsViewCustomMake)ctx_make,
|
|
.custom_destroy = (JsViewCustomDestroy)ctx_destroy,
|
|
.prop_cnt = 3,
|
|
.props = {
|
|
(JsViewPropDescriptor){
|
|
.name = "text",
|
|
.type = JsViewPropTypeString,
|
|
.assign = (JsViewPropAssign)text_assign},
|
|
(JsViewPropDescriptor){
|
|
.name = "font",
|
|
.type = JsViewPropTypeString,
|
|
.assign = (JsViewPropAssign)font_assign},
|
|
(JsViewPropDescriptor){
|
|
.name = "focus",
|
|
.type = JsViewPropTypeString,
|
|
.assign = (JsViewPropAssign)focus_assign},
|
|
}};
|
|
JS_GUI_VIEW_DEF(text_box, &view_descriptor);
|