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 
lv_demo_keypad_encoder(void)47 void lv_demo_keypad_encoder(void)
48 {
49     g = lv_group_create();
50     lv_group_set_default(g);
51 
52     lv_indev_t * indev = NULL;
53     for(;;) {
54         indev = lv_indev_get_next(indev);
55         if(!indev) {
56             break;
57         }
58 
59         lv_indev_type_t indev_type = lv_indev_get_type(indev);
60         if(indev_type == LV_INDEV_TYPE_KEYPAD) {
61             lv_indev_set_group(indev, g);
62         }
63 
64         if(indev_type == LV_INDEV_TYPE_ENCODER) {
65             lv_indev_set_group(indev, g);
66         }
67     }
68 
69     tv = lv_tabview_create(lv_screen_active());
70 
71     t1 = lv_tabview_add_tab(tv, "Selectors");
72     t2 = lv_tabview_add_tab(tv, "Text input");
73 
74     selectors_create(t1);
75     text_input_create(t2);
76 
77     msgbox_create();
78 }
79 
80 /**********************
81  *   STATIC FUNCTIONS
82  **********************/
83 
selectors_create(lv_obj_t * parent)84 static void selectors_create(lv_obj_t * parent)
85 {
86     lv_obj_set_flex_flow(parent, LV_FLEX_FLOW_COLUMN);
87     lv_obj_set_flex_align(parent, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
88 
89     lv_obj_t * obj;
90 
91     obj = lv_table_create(parent);
92     lv_table_set_cell_value(obj, 0, 0, "00");
93     lv_table_set_cell_value(obj, 0, 1, "01");
94     lv_table_set_cell_value(obj, 1, 0, "10");
95     lv_table_set_cell_value(obj, 1, 1, "11");
96     lv_table_set_cell_value(obj, 2, 0, "20");
97     lv_table_set_cell_value(obj, 2, 1, "21");
98     lv_table_set_cell_value(obj, 3, 0, "30");
99     lv_table_set_cell_value(obj, 3, 1, "31");
100     lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
101 
102     obj = lv_calendar_create(parent);
103     lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
104 
105     obj = lv_buttonmatrix_create(parent);
106     lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
107 
108     obj = lv_checkbox_create(parent);
109     lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
110 
111     obj = lv_slider_create(parent);
112     lv_slider_set_range(obj, 0, 10);
113     lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
114 
115     obj = lv_switch_create(parent);
116     lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
117 
118     obj = lv_spinbox_create(parent);
119     lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
120 
121     obj = lv_dropdown_create(parent);
122     lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
123 
124     obj = lv_roller_create(parent);
125     lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
126 
127     lv_obj_t * list = lv_list_create(parent);
128     lv_obj_update_layout(list);
129     if(lv_obj_get_height(list) > lv_obj_get_content_height(parent)) {
130         lv_obj_set_height(list, lv_obj_get_content_height(parent));
131     }
132 
133     lv_list_add_button(list, LV_SYMBOL_OK, "Apply");
134     lv_list_add_button(list, LV_SYMBOL_CLOSE, "Close");
135     lv_list_add_button(list, LV_SYMBOL_EYE_OPEN, "Show");
136     lv_list_add_button(list, LV_SYMBOL_EYE_CLOSE, "Hide");
137     lv_list_add_button(list, LV_SYMBOL_TRASH, "Delete");
138     lv_list_add_button(list, LV_SYMBOL_COPY, "Copy");
139     lv_list_add_button(list, LV_SYMBOL_PASTE, "Paste");
140 }
141 
text_input_create(lv_obj_t * parent)142 static void text_input_create(lv_obj_t * parent)
143 {
144     lv_obj_set_flex_flow(parent, LV_FLEX_FLOW_COLUMN);
145 
146     lv_obj_t * ta1 = lv_textarea_create(parent);
147     lv_obj_set_width(ta1, LV_PCT(100));
148     lv_textarea_set_one_line(ta1, true);
149     lv_textarea_set_placeholder_text(ta1, "Click with an encoder to show a keyboard");
150 
151     lv_obj_t * ta2 = lv_textarea_create(parent);
152     lv_obj_set_width(ta2, LV_PCT(100));
153     lv_textarea_set_one_line(ta2, true);
154     lv_textarea_set_placeholder_text(ta2, "Type something");
155 
156     lv_obj_t * kb = lv_keyboard_create(lv_screen_active());
157     lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
158 
159     lv_obj_add_event_cb(ta1, ta_event_cb, LV_EVENT_ALL, kb);
160     lv_obj_add_event_cb(ta2, ta_event_cb, LV_EVENT_ALL, kb);
161 }
162 
msgbox_create(void)163 static void msgbox_create(void)
164 {
165     lv_obj_t * mbox = lv_msgbox_create(NULL);
166     lv_msgbox_add_title(mbox, "Hi");
167     lv_msgbox_add_text(mbox, "Welcome to the keyboard and encoder demo");
168 
169     lv_obj_t * btn = lv_msgbox_add_footer_button(mbox, "Ok");
170     lv_obj_add_event_cb(btn, msgbox_event_cb, LV_EVENT_CLICKED, mbox);
171     lv_group_focus_obj(btn);
172     lv_obj_add_state(btn, LV_STATE_FOCUS_KEY);
173     lv_group_focus_freeze(g, true);
174 
175     lv_obj_align(mbox, LV_ALIGN_CENTER, 0, 0);
176 
177     lv_obj_t * bg = lv_obj_get_parent(mbox);
178     lv_obj_set_style_bg_opa(bg, LV_OPA_70, 0);
179     lv_obj_set_style_bg_color(bg, lv_palette_main(LV_PALETTE_GREY), 0);
180 }
181 
msgbox_event_cb(lv_event_t * e)182 static void msgbox_event_cb(lv_event_t * e)
183 {
184     lv_obj_t * msgbox = lv_event_get_user_data(e);
185 
186     lv_msgbox_close(msgbox);
187     lv_group_focus_freeze(g, false);
188     lv_group_focus_obj(lv_obj_get_child(t1, 0));
189     lv_obj_scroll_to(t1, 0, 0, LV_ANIM_OFF);
190 }
191 
ta_event_cb(lv_event_t * e)192 static void ta_event_cb(lv_event_t * e)
193 {
194     lv_indev_t * indev = lv_indev_active();
195     if(indev == NULL) return;
196     lv_indev_type_t indev_type = lv_indev_get_type(indev);
197 
198     lv_event_code_t code = lv_event_get_code(e);
199     lv_obj_t * ta = lv_event_get_target(e);
200     lv_obj_t * kb = lv_event_get_user_data(e);
201 
202     if(code == LV_EVENT_CLICKED && indev_type == LV_INDEV_TYPE_ENCODER) {
203         lv_keyboard_set_textarea(kb, ta);
204         lv_obj_remove_flag(kb, LV_OBJ_FLAG_HIDDEN);
205         lv_group_focus_obj(kb);
206         lv_group_set_editing(lv_obj_get_group(kb), kb != NULL);
207         lv_obj_set_height(tv, LV_VER_RES / 2);
208         lv_obj_align(kb, LV_ALIGN_BOTTOM_MID, 0, 0);
209     }
210 
211     if(code == LV_EVENT_READY || code == LV_EVENT_CANCEL) {
212         lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
213         lv_obj_set_height(tv, LV_VER_RES);
214     }
215 }
216 
217 #endif
218