lv_demo_keypad_encoder.c 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. /**
  2. * @file lv_demo_keypad_encoder.c
  3. *
  4. */
  5. /*********************
  6. * INCLUDES
  7. *********************/
  8. #include "lv_demo_keypad_encoder.h"
  9. #if LV_USE_DEMO_KEYPAD_AND_ENCODER
  10. /*********************
  11. * DEFINES
  12. *********************/
  13. /**********************
  14. * TYPEDEFS
  15. **********************/
  16. /**********************
  17. * STATIC PROTOTYPES
  18. **********************/
  19. static void selectors_create(lv_obj_t * parent);
  20. static void text_input_create(lv_obj_t * parent);
  21. static void msgbox_create(void);
  22. static void msgbox_event_cb(lv_event_t * e);
  23. static void ta_event_cb(lv_event_t * e);
  24. /**********************
  25. * STATIC VARIABLES
  26. **********************/
  27. static lv_group_t * g;
  28. static lv_obj_t * tv;
  29. static lv_obj_t * t1;
  30. static lv_obj_t * t2;
  31. /**********************
  32. * MACROS
  33. **********************/
  34. /**********************
  35. * GLOBAL FUNCTIONS
  36. **********************/
  37. void lv_demo_keypad_encoder(void)
  38. {
  39. g = lv_group_get_default();
  40. if(g == NULL) {
  41. g = lv_group_create();
  42. lv_group_set_default(g);
  43. }
  44. lv_indev_t * cur_drv = NULL;
  45. for(;;) {
  46. cur_drv = lv_indev_get_next(cur_drv);
  47. if(!cur_drv) {
  48. break;
  49. }
  50. if(cur_drv->driver->type == LV_INDEV_TYPE_KEYPAD) {
  51. lv_indev_set_group(cur_drv, g);
  52. }
  53. if(cur_drv->driver->type == LV_INDEV_TYPE_ENCODER) {
  54. lv_indev_set_group(cur_drv, g);
  55. }
  56. }
  57. tv = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, LV_DPI_DEF / 3);
  58. t1 = lv_tabview_add_tab(tv, "Selectors");
  59. t2 = lv_tabview_add_tab(tv, "Text input");
  60. selectors_create(t1);
  61. text_input_create(t2);
  62. msgbox_create();
  63. }
  64. void lv_demo_keypad_encoder_close(void)
  65. {
  66. lv_obj_clean(lv_scr_act());
  67. lv_obj_clean(lv_layer_top());
  68. }
  69. /**********************
  70. * STATIC FUNCTIONS
  71. **********************/
  72. static void selectors_create(lv_obj_t * parent)
  73. {
  74. lv_obj_set_flex_flow(parent, LV_FLEX_FLOW_COLUMN);
  75. lv_obj_set_flex_align(parent, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
  76. lv_obj_t * obj;
  77. obj = lv_table_create(parent);
  78. lv_table_set_cell_value(obj, 0, 0, "00");
  79. lv_table_set_cell_value(obj, 0, 1, "01");
  80. lv_table_set_cell_value(obj, 1, 0, "10");
  81. lv_table_set_cell_value(obj, 1, 1, "11");
  82. lv_table_set_cell_value(obj, 2, 0, "20");
  83. lv_table_set_cell_value(obj, 2, 1, "21");
  84. lv_table_set_cell_value(obj, 3, 0, "30");
  85. lv_table_set_cell_value(obj, 3, 1, "31");
  86. lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
  87. obj = lv_calendar_create(parent);
  88. lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
  89. obj = lv_btnmatrix_create(parent);
  90. lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
  91. obj = lv_checkbox_create(parent);
  92. lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
  93. obj = lv_slider_create(parent);
  94. lv_slider_set_range(obj, 0, 10);
  95. lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
  96. obj = lv_switch_create(parent);
  97. lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
  98. obj = lv_spinbox_create(parent);
  99. lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
  100. obj = lv_dropdown_create(parent);
  101. lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
  102. obj = lv_roller_create(parent);
  103. lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
  104. lv_obj_t * list = lv_list_create(parent);
  105. lv_obj_update_layout(list);
  106. if(lv_obj_get_height(list) > lv_obj_get_content_height(parent)) {
  107. lv_obj_set_height(list, lv_obj_get_content_height(parent));
  108. }
  109. lv_list_add_btn(list, LV_SYMBOL_OK, "Apply");
  110. lv_list_add_btn(list, LV_SYMBOL_CLOSE, "Close");
  111. lv_list_add_btn(list, LV_SYMBOL_EYE_OPEN, "Show");
  112. lv_list_add_btn(list, LV_SYMBOL_EYE_CLOSE, "Hide");
  113. lv_list_add_btn(list, LV_SYMBOL_TRASH, "Delete");
  114. lv_list_add_btn(list, LV_SYMBOL_COPY, "Copy");
  115. lv_list_add_btn(list, LV_SYMBOL_PASTE, "Paste");
  116. }
  117. static void text_input_create(lv_obj_t * parent)
  118. {
  119. lv_obj_set_flex_flow(parent, LV_FLEX_FLOW_COLUMN);
  120. lv_obj_t * ta1 = lv_textarea_create(parent);
  121. lv_obj_set_width(ta1, LV_PCT(100));
  122. lv_textarea_set_one_line(ta1, true);
  123. lv_textarea_set_placeholder_text(ta1, "Click with an encoder to show a keyboard");
  124. lv_obj_t * ta2 = lv_textarea_create(parent);
  125. lv_obj_set_width(ta2, LV_PCT(100));
  126. lv_textarea_set_one_line(ta2, true);
  127. lv_textarea_set_placeholder_text(ta2, "Type something");
  128. lv_obj_t * kb = lv_keyboard_create(lv_scr_act());
  129. lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
  130. lv_obj_add_event_cb(ta1, ta_event_cb, LV_EVENT_ALL, kb);
  131. lv_obj_add_event_cb(ta2, ta_event_cb, LV_EVENT_ALL, kb);
  132. }
  133. static void msgbox_create(void)
  134. {
  135. static const char * btns[] = {"Ok", "Cancel", ""};
  136. lv_obj_t * mbox = lv_msgbox_create(NULL, "Hi", "Welcome to the keyboard and encoder demo", btns, false);
  137. lv_obj_add_event_cb(mbox, msgbox_event_cb, LV_EVENT_ALL, NULL);
  138. lv_group_focus_obj(lv_msgbox_get_btns(mbox));
  139. lv_obj_add_state(lv_msgbox_get_btns(mbox), LV_STATE_FOCUS_KEY);
  140. lv_group_focus_freeze(g, true);
  141. lv_obj_align(mbox, LV_ALIGN_CENTER, 0, 0);
  142. lv_obj_t * bg = lv_obj_get_parent(mbox);
  143. lv_obj_set_style_bg_opa(bg, LV_OPA_70, 0);
  144. lv_obj_set_style_bg_color(bg, lv_palette_main(LV_PALETTE_GREY), 0);
  145. }
  146. static void msgbox_event_cb(lv_event_t * e)
  147. {
  148. lv_event_code_t code = lv_event_get_code(e);
  149. lv_obj_t * msgbox = lv_event_get_current_target(e);
  150. if(code == LV_EVENT_VALUE_CHANGED) {
  151. const char * txt = lv_msgbox_get_active_btn_text(msgbox);
  152. if(txt) {
  153. lv_msgbox_close(msgbox);
  154. lv_group_focus_freeze(g, false);
  155. lv_group_focus_obj(lv_obj_get_child(t1, 0));
  156. lv_obj_scroll_to(t1, 0, 0, LV_ANIM_OFF);
  157. }
  158. }
  159. }
  160. static void ta_event_cb(lv_event_t * e)
  161. {
  162. lv_indev_t * indev = lv_indev_get_act();
  163. if(indev == NULL) return;
  164. lv_indev_type_t indev_type = lv_indev_get_type(indev);
  165. lv_event_code_t code = lv_event_get_code(e);
  166. lv_obj_t * ta = lv_event_get_target(e);
  167. lv_obj_t * kb = lv_event_get_user_data(e);
  168. if(code == LV_EVENT_CLICKED && indev_type == LV_INDEV_TYPE_ENCODER) {
  169. lv_keyboard_set_textarea(kb, ta);
  170. lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN);
  171. lv_group_focus_obj(kb);
  172. lv_group_set_editing(lv_obj_get_group(kb), kb);
  173. lv_obj_set_height(tv, LV_VER_RES / 2);
  174. lv_obj_align(kb, LV_ALIGN_BOTTOM_MID, 0, 0);
  175. }
  176. if(code == LV_EVENT_READY || code == LV_EVENT_CANCEL) {
  177. lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
  178. lv_obj_set_height(tv, LV_VER_RES);
  179. }
  180. }
  181. #endif