From 846a96db4b218a868898f55e7e9c39f30fb671f1 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Sun, 23 May 2021 11:56:11 +0200 Subject: [PATCH] jfkeys: add key overrides on fx-CG 50 --- include/justui/jfkeys.h | 13 +++++++++++++ src/jfkeys.c | 28 +++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/include/justui/jfkeys.h b/include/justui/jfkeys.h index a8b88fe..530a94e 100644 --- a/include/justui/jfkeys.h +++ b/include/justui/jfkeys.h @@ -60,6 +60,7 @@ typedef struct { #ifdef FXCG50 char const *labels; + char const *overrides[6]; #endif } jfkeys; @@ -101,4 +102,16 @@ int jfkeys_level(jfkeys *keys); /* jfkeys_set_level(): Set the function key level */ void jfkeys_set_level(jfkeys *keys, int level); +/* The following functions are available only on fx-CG 50 and are no-ops on + fx-9860 (you can't generate a good image for a tiny key). */ + +/* fkeys_override(): Get the override for a key */ +char const *jfkeys_override(jfkeys *keys, int key); + +/* fkeys_set_override(): Override the value of a single key on all levels + This functions sets the override on the specified key, which replaces the + label for that key on all levels. This is useful to conditionally show + functions. */ +void jfkeys_set_override(jfkeys *keys, int key, char const *override); + #endif /* _J_JFKEYS */ diff --git a/src/jfkeys.c b/src/jfkeys.c index c393518..56f3d80 100644 --- a/src/jfkeys.c +++ b/src/jfkeys.c @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -14,6 +15,7 @@ jfkeys *jfkeys_create(bopti_image_t const *img, void *parent) jfkeys *f = malloc(sizeof *f); jwidget_init(&f->widget, jfkeys_type_id, parent); jfkeys_set(f, img); + return f; } @@ -32,6 +34,7 @@ jfkeys *jfkeys_create(char const *labels, void *parent) jfkeys *f = malloc(sizeof *f); jwidget_init(&f->widget, jfkeys_type_id, parent); jfkeys_set(f, labels); + for(int i = 0; i < 6; i++) f->overrides[i] = NULL; return f; } @@ -112,7 +115,11 @@ static void jfkeys_poly_render(void *f0, int base_x, int y) for(int position = 0; position < 6; position++) { size_t length = 0; - char const *text = get_label(level, position, &length); + char const *text = NULL; + #ifdef FXCG50 + text = f->overrides[position]; + #endif + if(!text) text = get_label(level, position, &length); if(!text || (*text != '.' && *text != '/' && *text != '@' && *text != '#')) continue; @@ -161,6 +168,25 @@ void jfkeys_set_level(jfkeys *f, int level) f->widget.update = 1; } +char const *jfkeys_override(GUNUSED jfkeys *keys, GUNUSED int key) +{ + #ifdef FXCG50 + if(key < 1 || key > 6) return NULL; + return keys->overrides[key - 1]; + #endif + + return NULL; +} + +void jfkeys_set_override(GUNUSED jfkeys *keys, GUNUSED int key, + GUNUSED char const *override) +{ + #ifdef FXCG50 + if(key < 1 || key > 6) return; + keys->overrides[key - 1] = override; + #endif +} + /* jfkeys type definition */ static jwidget_poly type_jfkeys = { .name = "jfkeys",