diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-06-01 15:41:47 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-06-01 15:41:47 +1000 |
| commit | dd27c3530432ea0b09f01e604bf577f31d8ef841 (patch) | |
| tree | bbf86cf81a78f0ff0b07f31f1c390db473f26fd3 /lib/lvgl/examples/widgets/textarea | |
| parent | 6fd588e970470b15936187980829916d0dbe77bb (diff) | |
| download | tangara-fw-dd27c3530432ea0b09f01e604bf577f31d8ef841.tar.gz | |
convert lvgl from submodule to a plain old directory
Diffstat (limited to 'lib/lvgl/examples/widgets/textarea')
| m--------- | lib/lvgl | 0 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/textarea/index.rst | 20 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/textarea/lv_example_textarea_1.c | 44 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/textarea/lv_example_textarea_1.py | 32 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/textarea/lv_example_textarea_2.c | 59 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/textarea/lv_example_textarea_2.py | 49 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/textarea/lv_example_textarea_3.c | 41 | ||||
| -rw-r--r-- | lib/lvgl/examples/widgets/textarea/lv_example_textarea_3.py | 50 |
8 files changed, 295 insertions, 0 deletions
diff --git a/lib/lvgl b/lib/lvgl deleted file mode 160000 -Subproject 0732400e7b564dd0e7dc4a924619d8e19c5b23a diff --git a/lib/lvgl/examples/widgets/textarea/index.rst b/lib/lvgl/examples/widgets/textarea/index.rst new file mode 100644 index 00000000..9bb7bb51 --- /dev/null +++ b/lib/lvgl/examples/widgets/textarea/index.rst @@ -0,0 +1,20 @@ + +Simple Text area +""""""""""""""""""""""" + +.. lv_example:: widgets/textarea/lv_example_textarea_1 + :language: c + + +Text area with password field +""""""""""""""""""""""""""""" + +.. lv_example:: widgets/textarea/lv_example_textarea_2 + :language: c + +Text auto-formatting +""""""""""""""""""""""""""""" + +.. lv_example:: widgets/textarea/lv_example_textarea_3 + :language: c + diff --git a/lib/lvgl/examples/widgets/textarea/lv_example_textarea_1.c b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_1.c new file mode 100644 index 00000000..d8689cb9 --- /dev/null +++ b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_1.c @@ -0,0 +1,44 @@ +#include "../../lv_examples.h" +#if LV_USE_TEXTAREA && LV_BUILD_EXAMPLES + +static void textarea_event_handler(lv_event_t * e) +{ + lv_obj_t * ta = lv_event_get_target(e); + LV_LOG_USER("Enter was pressed. The current text is: %s", lv_textarea_get_text(ta)); +} + +static void btnm_event_handler(lv_event_t * e) +{ + lv_obj_t * obj = lv_event_get_target(e); + lv_obj_t * ta = lv_event_get_user_data(e); + const char * txt = lv_btnmatrix_get_btn_text(obj, lv_btnmatrix_get_selected_btn(obj)); + + if(strcmp(txt, LV_SYMBOL_BACKSPACE) == 0) lv_textarea_del_char(ta); + else if(strcmp(txt, LV_SYMBOL_NEW_LINE) == 0) lv_event_send(ta, LV_EVENT_READY, NULL); + else lv_textarea_add_text(ta, txt); + +} + +void lv_example_textarea_1(void) +{ + lv_obj_t * ta = lv_textarea_create(lv_scr_act()); + lv_textarea_set_one_line(ta, true); + lv_obj_align(ta, LV_ALIGN_TOP_MID, 0, 10); + lv_obj_add_event_cb(ta, textarea_event_handler, LV_EVENT_READY, ta); + lv_obj_add_state(ta, LV_STATE_FOCUSED); /*To be sure the cursor is visible*/ + + static const char * btnm_map[] = {"1", "2", "3", "\n", + "4", "5", "6", "\n", + "7", "8", "9", "\n", + LV_SYMBOL_BACKSPACE, "0", LV_SYMBOL_NEW_LINE, "" + }; + + lv_obj_t * btnm = lv_btnmatrix_create(lv_scr_act()); + lv_obj_set_size(btnm, 200, 150); + lv_obj_align(btnm, LV_ALIGN_BOTTOM_MID, 0, -10); + lv_obj_add_event_cb(btnm, btnm_event_handler, LV_EVENT_VALUE_CHANGED, ta); + lv_obj_clear_flag(btnm, LV_OBJ_FLAG_CLICK_FOCUSABLE); /*To keep the text area focused on button clicks*/ + lv_btnmatrix_set_map(btnm, btnm_map); +} + +#endif diff --git a/lib/lvgl/examples/widgets/textarea/lv_example_textarea_1.py b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_1.py new file mode 100644 index 00000000..c5571889 --- /dev/null +++ b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_1.py @@ -0,0 +1,32 @@ +def textarea_event_handler(e, ta): + print("Enter was pressed. The current text is: " + ta.get_text()) + + +def btnm_event_handler(e, ta): + obj = e.get_target() + txt = obj.get_btn_text(obj.get_selected_btn()) + if txt == lv.SYMBOL.BACKSPACE: + ta.del_char() + elif txt == lv.SYMBOL.NEW_LINE: + lv.event_send(ta, lv.EVENT.READY, None) + elif txt: + ta.add_text(txt) + + +ta = lv.textarea(lv.scr_act()) +ta.set_one_line(True) +ta.align(lv.ALIGN.TOP_MID, 0, 10) +ta.add_event_cb(lambda e: textarea_event_handler(e, ta), lv.EVENT.READY, None) +ta.add_state(lv.STATE.FOCUSED) # To be sure the cursor is visible + +btnm_map = ["1", "2", "3", "\n", + "4", "5", "6", "\n", + "7", "8", "9", "\n", + lv.SYMBOL.BACKSPACE, "0", lv.SYMBOL.NEW_LINE, ""] + +btnm = lv.btnmatrix(lv.scr_act()) +btnm.set_size(200, 150) +btnm.align(lv.ALIGN.BOTTOM_MID, 0, -10) +btnm.add_event_cb(lambda e: btnm_event_handler(e, ta), lv.EVENT.VALUE_CHANGED, None) +btnm.clear_flag(lv.obj.FLAG.CLICK_FOCUSABLE) # To keep the text area focused on button clicks +btnm.set_map(btnm_map) diff --git a/lib/lvgl/examples/widgets/textarea/lv_example_textarea_2.c b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_2.c new file mode 100644 index 00000000..0a915caa --- /dev/null +++ b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_2.c @@ -0,0 +1,59 @@ +#include "../../lv_examples.h" +#if LV_USE_TEXTAREA && LV_USE_KEYBOARD && LV_BUILD_EXAMPLES + +static void ta_event_cb(lv_event_t * e); + +static lv_obj_t * kb; + +void lv_example_textarea_2(void) +{ + /*Create the password box*/ + lv_obj_t * pwd_ta = lv_textarea_create(lv_scr_act()); + lv_textarea_set_text(pwd_ta, ""); + lv_textarea_set_password_mode(pwd_ta, true); + lv_textarea_set_one_line(pwd_ta, true); + lv_obj_set_width(pwd_ta, lv_pct(40)); + lv_obj_set_pos(pwd_ta, 5, 20); + lv_obj_add_event_cb(pwd_ta, ta_event_cb, LV_EVENT_ALL, NULL); + + /*Create a label and position it above the text box*/ + lv_obj_t * pwd_label = lv_label_create(lv_scr_act()); + lv_label_set_text(pwd_label, "Password:"); + lv_obj_align_to(pwd_label, pwd_ta, LV_ALIGN_OUT_TOP_LEFT, 0, 0); + + /*Create the one-line mode text area*/ + lv_obj_t * text_ta = lv_textarea_create(lv_scr_act()); + lv_textarea_set_one_line(text_ta, true); + lv_textarea_set_password_mode(text_ta, false); + lv_obj_set_width(text_ta, lv_pct(40)); + lv_obj_add_event_cb(text_ta, ta_event_cb, LV_EVENT_ALL, NULL); + lv_obj_align(text_ta, LV_ALIGN_TOP_RIGHT, -5, 20); + + + /*Create a label and position it above the text box*/ + lv_obj_t * oneline_label = lv_label_create(lv_scr_act()); + lv_label_set_text(oneline_label, "Text:"); + lv_obj_align_to(oneline_label, text_ta, LV_ALIGN_OUT_TOP_LEFT, 0, 0); + + /*Create a keyboard*/ + kb = lv_keyboard_create(lv_scr_act()); + lv_obj_set_size(kb, LV_HOR_RES, LV_VER_RES / 2); + + lv_keyboard_set_textarea(kb, pwd_ta); /*Focus it on one of the text areas to start*/ +} + +static void ta_event_cb(lv_event_t * e) +{ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * ta = lv_event_get_target(e); + if(code == LV_EVENT_CLICKED || code == LV_EVENT_FOCUSED) { + /*Focus on the clicked text area*/ + if(kb != NULL) lv_keyboard_set_textarea(kb, ta); + } + + else if(code == LV_EVENT_READY) { + LV_LOG_USER("Ready, current text: %s", lv_textarea_get_text(ta)); + } +} + +#endif diff --git a/lib/lvgl/examples/widgets/textarea/lv_example_textarea_2.py b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_2.py new file mode 100644 index 00000000..b418861d --- /dev/null +++ b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_2.py @@ -0,0 +1,49 @@ +def ta_event_cb(e): + code = e.get_code() + ta = e.get_target() + if code == lv.EVENT.CLICKED or code == lv.EVENT.FOCUSED: + # Focus on the clicked text area + if kb != None: + kb.set_textarea(ta) + + elif code == lv.EVENT.READY: + print("Ready, current text: " + ta.get_text()) + + +# Create the password box +LV_HOR_RES = lv.scr_act().get_disp().driver.hor_res +LV_VER_RES = lv.scr_act().get_disp().driver.ver_res + +pwd_ta = lv.textarea(lv.scr_act()) +pwd_ta.set_text("") +pwd_ta.set_password_mode(True) +pwd_ta.set_one_line(True) +pwd_ta.set_width(LV_HOR_RES // 2 - 20) +pwd_ta.set_pos(5, 20) +pwd_ta.add_event_cb(ta_event_cb, lv.EVENT.ALL, None) + +# Create a label and position it above the text box +pwd_label = lv.label(lv.scr_act()) +pwd_label.set_text("Password:") +pwd_label.align_to(pwd_ta, lv.ALIGN.OUT_TOP_LEFT, 0, 0) + +# Create the one-line mode text area +text_ta = lv.textarea(lv.scr_act()) +text_ta.set_width(LV_HOR_RES // 2 - 20) +text_ta.set_one_line(True) +text_ta.add_event_cb(ta_event_cb, lv.EVENT.ALL, None) +text_ta.set_password_mode(False) + +text_ta.align(lv.ALIGN.TOP_RIGHT, -5, 20) + +# Create a label and position it above the text box +oneline_label = lv.label(lv.scr_act()) +oneline_label.set_text("Text:") +oneline_label.align_to(text_ta, lv.ALIGN.OUT_TOP_LEFT, 0, 0) + +# Create a keyboard +kb = lv.keyboard(lv.scr_act()) +kb.set_size(LV_HOR_RES, LV_VER_RES // 2) + +kb.set_textarea(pwd_ta) # Focus it on one of the text areas to start + diff --git a/lib/lvgl/examples/widgets/textarea/lv_example_textarea_3.c b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_3.c new file mode 100644 index 00000000..d3a453a0 --- /dev/null +++ b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_3.c @@ -0,0 +1,41 @@ +#include "../../lv_examples.h" +#if LV_USE_TEXTAREA && LV_USE_KEYBOARD && LV_BUILD_EXAMPLES + +static void ta_event_cb(lv_event_t * e); + +static lv_obj_t * kb; + +/** + * Automatically format text like a clock. E.g. "12:34" + * Add the ':' automatically. + */ +void lv_example_textarea_3(void) +{ + /*Create the text area*/ + lv_obj_t * ta = lv_textarea_create(lv_scr_act()); + lv_obj_add_event_cb(ta, ta_event_cb, LV_EVENT_VALUE_CHANGED, NULL); + lv_textarea_set_accepted_chars(ta, "0123456789:"); + lv_textarea_set_max_length(ta, 5); + lv_textarea_set_one_line(ta, true); + lv_textarea_set_text(ta, ""); + + /*Create a keyboard*/ + kb = lv_keyboard_create(lv_scr_act()); + lv_obj_set_size(kb, LV_HOR_RES, LV_VER_RES / 2); + lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER); + lv_keyboard_set_textarea(kb, ta); +} + +static void ta_event_cb(lv_event_t * e) +{ + lv_obj_t * ta = lv_event_get_target(e); + const char * txt = lv_textarea_get_text(ta); + if(txt[0] >= '0' && txt[0] <= '9' && + txt[1] >= '0' && txt[1] <= '9' && + txt[2] != ':') { + lv_textarea_set_cursor_pos(ta, 2); + lv_textarea_add_char(ta, ':'); + } +} + +#endif diff --git a/lib/lvgl/examples/widgets/textarea/lv_example_textarea_3.py b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_3.py new file mode 100644 index 00000000..71d7c2d9 --- /dev/null +++ b/lib/lvgl/examples/widgets/textarea/lv_example_textarea_3.py @@ -0,0 +1,50 @@ +def ta_event_cb(e): + ta = e.get_target() + txt = ta.get_text() + # print(txt) + pos = ta.get_cursor_pos() + # print("cursor pos: ",pos) + # find position of ":" in text + colon_pos= txt.find(":") + # if there are more than 2 digits before the colon, remove the last one entered + if colon_pos == 3: + ta.del_char() + if colon_pos != -1: + # if there are more than 3 digits after the ":" remove the last one entered + rest = txt[colon_pos:] + if len(rest) > 3: + ta.del_char() + + if len(txt) < 2: + return + if ":" in txt: + return + if txt[0] >= '0' and txt[0] <= '9' and \ + txt[1] >= '0' and txt[1] <= '9': + if len(txt) == 2 or txt[2] != ':' : + ta.set_cursor_pos(2) + ta.add_char(ord(':')) +# +# Automatically format text like a clock. E.g. "12:34" +# Add the ':' automatically +# +# Create the text area + +LV_HOR_RES = lv.scr_act().get_disp().driver.hor_res +LV_VER_RES = lv.scr_act().get_disp().driver.ver_res + +ta = lv.textarea(lv.scr_act()) +ta.add_event_cb(ta_event_cb, lv.EVENT.VALUE_CHANGED, None) +ta.set_accepted_chars("0123456789:") +ta.set_max_length(5) +ta.set_one_line(True) +ta.set_text("") +ta.add_state(lv.STATE.FOCUSED) + +# Create a keyboard +kb = lv.keyboard(lv.scr_act()) +kb.set_size(LV_HOR_RES, LV_VER_RES // 2) +kb.set_mode(lv.keyboard.MODE.NUMBER) +kb.set_textarea(ta) + + |
