summaryrefslogtreecommitdiff
path: root/lib/lvgl/examples/widgets/textarea
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-01 15:41:47 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-01 15:41:47 +1000
commitdd27c3530432ea0b09f01e604bf577f31d8ef841 (patch)
treebbf86cf81a78f0ff0b07f31f1c390db473f26fd3 /lib/lvgl/examples/widgets/textarea
parent6fd588e970470b15936187980829916d0dbe77bb (diff)
downloadtangara-fw-dd27c3530432ea0b09f01e604bf577f31d8ef841.tar.gz
convert lvgl from submodule to a plain old directory
Diffstat (limited to 'lib/lvgl/examples/widgets/textarea')
m---------lib/lvgl0
-rw-r--r--lib/lvgl/examples/widgets/textarea/index.rst20
-rw-r--r--lib/lvgl/examples/widgets/textarea/lv_example_textarea_1.c44
-rw-r--r--lib/lvgl/examples/widgets/textarea/lv_example_textarea_1.py32
-rw-r--r--lib/lvgl/examples/widgets/textarea/lv_example_textarea_2.c59
-rw-r--r--lib/lvgl/examples/widgets/textarea/lv_example_textarea_2.py49
-rw-r--r--lib/lvgl/examples/widgets/textarea/lv_example_textarea_3.c41
-rw-r--r--lib/lvgl/examples/widgets/textarea/lv_example_textarea_3.py50
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)
+
+