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