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_example_menu_5.c (8637B)
1 #include "../../lv_examples.h" 2 #if LV_USE_MENU && LV_USE_MSGBOX && LV_BUILD_EXAMPLES 3 4 enum { 5 LV_MENU_ITEM_BUILDER_VARIANT_1, 6 LV_MENU_ITEM_BUILDER_VARIANT_2 7 }; 8 typedef uint8_t lv_menu_builder_variant_t; 9 10 static void back_event_handler(lv_event_t * e); 11 static void switch_handler(lv_event_t * e); 12 lv_obj_t * root_page; 13 static lv_obj_t * create_text(lv_obj_t * parent, const char * icon, const char * txt, 14 lv_menu_builder_variant_t builder_variant); 15 static lv_obj_t * create_slider(lv_obj_t * parent, 16 const char * icon, const char * txt, int32_t min, int32_t max, int32_t val); 17 static lv_obj_t * create_switch(lv_obj_t * parent, 18 const char * icon, const char * txt, bool chk); 19 20 void lv_example_menu_5(void) 21 { 22 lv_obj_t * menu = lv_menu_create(lv_scr_act()); 23 24 lv_color_t bg_color = lv_obj_get_style_bg_color(menu, 0); 25 if(lv_color_brightness(bg_color) > 127) { 26 lv_obj_set_style_bg_color(menu, lv_color_darken(lv_obj_get_style_bg_color(menu, 0), 10), 0); 27 } 28 else { 29 lv_obj_set_style_bg_color(menu, lv_color_darken(lv_obj_get_style_bg_color(menu, 0), 50), 0); 30 } 31 lv_menu_set_mode_root_back_btn(menu, LV_MENU_ROOT_BACK_BTN_ENABLED); 32 lv_obj_add_event_cb(menu, back_event_handler, LV_EVENT_CLICKED, menu); 33 lv_obj_set_size(menu, lv_disp_get_hor_res(NULL), lv_disp_get_ver_res(NULL)); 34 lv_obj_center(menu); 35 36 lv_obj_t * cont; 37 lv_obj_t * section; 38 39 /*Create sub pages*/ 40 lv_obj_t * sub_mechanics_page = lv_menu_page_create(menu, NULL); 41 lv_obj_set_style_pad_hor(sub_mechanics_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); 42 lv_menu_separator_create(sub_mechanics_page); 43 section = lv_menu_section_create(sub_mechanics_page); 44 create_slider(section, LV_SYMBOL_SETTINGS, "Velocity", 0, 150, 120); 45 create_slider(section, LV_SYMBOL_SETTINGS, "Acceleration", 0, 150, 50); 46 create_slider(section, LV_SYMBOL_SETTINGS, "Weight limit", 0, 150, 80); 47 48 lv_obj_t * sub_sound_page = lv_menu_page_create(menu, NULL); 49 lv_obj_set_style_pad_hor(sub_sound_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); 50 lv_menu_separator_create(sub_sound_page); 51 section = lv_menu_section_create(sub_sound_page); 52 create_switch(section, LV_SYMBOL_AUDIO, "Sound", false); 53 54 lv_obj_t * sub_display_page = lv_menu_page_create(menu, NULL); 55 lv_obj_set_style_pad_hor(sub_display_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); 56 lv_menu_separator_create(sub_display_page); 57 section = lv_menu_section_create(sub_display_page); 58 create_slider(section, LV_SYMBOL_SETTINGS, "Brightness", 0, 150, 100); 59 60 lv_obj_t * sub_software_info_page = lv_menu_page_create(menu, NULL); 61 lv_obj_set_style_pad_hor(sub_software_info_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); 62 section = lv_menu_section_create(sub_software_info_page); 63 create_text(section, NULL, "Version 1.0", LV_MENU_ITEM_BUILDER_VARIANT_1); 64 65 lv_obj_t * sub_legal_info_page = lv_menu_page_create(menu, NULL); 66 lv_obj_set_style_pad_hor(sub_legal_info_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); 67 section = lv_menu_section_create(sub_legal_info_page); 68 for(uint32_t i = 0; i < 15; i++) { 69 create_text(section, NULL, 70 "This is a long long long long long long long long long text, if it is long enough it may scroll.", 71 LV_MENU_ITEM_BUILDER_VARIANT_1); 72 } 73 74 lv_obj_t * sub_about_page = lv_menu_page_create(menu, NULL); 75 lv_obj_set_style_pad_hor(sub_about_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); 76 lv_menu_separator_create(sub_about_page); 77 section = lv_menu_section_create(sub_about_page); 78 cont = create_text(section, NULL, "Software information", LV_MENU_ITEM_BUILDER_VARIANT_1); 79 lv_menu_set_load_page_event(menu, cont, sub_software_info_page); 80 cont = create_text(section, NULL, "Legal information", LV_MENU_ITEM_BUILDER_VARIANT_1); 81 lv_menu_set_load_page_event(menu, cont, sub_legal_info_page); 82 83 lv_obj_t * sub_menu_mode_page = lv_menu_page_create(menu, NULL); 84 lv_obj_set_style_pad_hor(sub_menu_mode_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); 85 lv_menu_separator_create(sub_menu_mode_page); 86 section = lv_menu_section_create(sub_menu_mode_page); 87 cont = create_switch(section, LV_SYMBOL_AUDIO, "Sidebar enable", true); 88 lv_obj_add_event_cb(lv_obj_get_child(cont, 2), switch_handler, LV_EVENT_VALUE_CHANGED, menu); 89 90 /*Create a root page*/ 91 root_page = lv_menu_page_create(menu, "Settings"); 92 lv_obj_set_style_pad_hor(root_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0); 93 section = lv_menu_section_create(root_page); 94 cont = create_text(section, LV_SYMBOL_SETTINGS, "Mechanics", LV_MENU_ITEM_BUILDER_VARIANT_1); 95 lv_menu_set_load_page_event(menu, cont, sub_mechanics_page); 96 cont = create_text(section, LV_SYMBOL_AUDIO, "Sound", LV_MENU_ITEM_BUILDER_VARIANT_1); 97 lv_menu_set_load_page_event(menu, cont, sub_sound_page); 98 cont = create_text(section, LV_SYMBOL_SETTINGS, "Display", LV_MENU_ITEM_BUILDER_VARIANT_1); 99 lv_menu_set_load_page_event(menu, cont, sub_display_page); 100 101 create_text(root_page, NULL, "Others", LV_MENU_ITEM_BUILDER_VARIANT_1); 102 section = lv_menu_section_create(root_page); 103 cont = create_text(section, NULL, "About", LV_MENU_ITEM_BUILDER_VARIANT_1); 104 lv_menu_set_load_page_event(menu, cont, sub_about_page); 105 cont = create_text(section, LV_SYMBOL_SETTINGS, "Menu mode", LV_MENU_ITEM_BUILDER_VARIANT_1); 106 lv_menu_set_load_page_event(menu, cont, sub_menu_mode_page); 107 108 lv_menu_set_sidebar_page(menu, root_page); 109 110 lv_event_send(lv_obj_get_child(lv_obj_get_child(lv_menu_get_cur_sidebar_page(menu), 0), 0), LV_EVENT_CLICKED, NULL); 111 } 112 113 static void back_event_handler(lv_event_t * e) 114 { 115 lv_obj_t * obj = lv_event_get_target(e); 116 lv_obj_t * menu = lv_event_get_user_data(e); 117 118 if(lv_menu_back_btn_is_root(menu, obj)) { 119 lv_obj_t * mbox1 = lv_msgbox_create(NULL, "Hello", "Root back btn click.", NULL, true); 120 lv_obj_center(mbox1); 121 } 122 } 123 124 static void switch_handler(lv_event_t * e) 125 { 126 lv_event_code_t code = lv_event_get_code(e); 127 lv_obj_t * menu = lv_event_get_user_data(e); 128 lv_obj_t * obj = lv_event_get_target(e); 129 if(code == LV_EVENT_VALUE_CHANGED) { 130 if(lv_obj_has_state(obj, LV_STATE_CHECKED)) { 131 lv_menu_set_page(menu, NULL); 132 lv_menu_set_sidebar_page(menu, root_page); 133 lv_event_send(lv_obj_get_child(lv_obj_get_child(lv_menu_get_cur_sidebar_page(menu), 0), 0), LV_EVENT_CLICKED, NULL); 134 } 135 else { 136 lv_menu_set_sidebar_page(menu, NULL); 137 lv_menu_clear_history(menu); /* Clear history because we will be showing the root page later */ 138 lv_menu_set_page(menu, root_page); 139 } 140 } 141 } 142 143 static lv_obj_t * create_text(lv_obj_t * parent, const char * icon, const char * txt, 144 lv_menu_builder_variant_t builder_variant) 145 { 146 lv_obj_t * obj = lv_menu_cont_create(parent); 147 148 lv_obj_t * img = NULL; 149 lv_obj_t * label = NULL; 150 151 if(icon) { 152 img = lv_img_create(obj); 153 lv_img_set_src(img, icon); 154 } 155 156 if(txt) { 157 label = lv_label_create(obj); 158 lv_label_set_text(label, txt); 159 lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR); 160 lv_obj_set_flex_grow(label, 1); 161 } 162 163 if(builder_variant == LV_MENU_ITEM_BUILDER_VARIANT_2 && icon && txt) { 164 lv_obj_add_flag(img, LV_OBJ_FLAG_FLEX_IN_NEW_TRACK); 165 lv_obj_swap(img, label); 166 } 167 168 return obj; 169 } 170 171 static lv_obj_t * create_slider(lv_obj_t * parent, const char * icon, const char * txt, int32_t min, int32_t max, 172 int32_t val) 173 { 174 lv_obj_t * obj = create_text(parent, icon, txt, LV_MENU_ITEM_BUILDER_VARIANT_2); 175 176 lv_obj_t * slider = lv_slider_create(obj); 177 lv_obj_set_flex_grow(slider, 1); 178 lv_slider_set_range(slider, min, max); 179 lv_slider_set_value(slider, val, LV_ANIM_OFF); 180 181 if(icon == NULL) { 182 lv_obj_add_flag(slider, LV_OBJ_FLAG_FLEX_IN_NEW_TRACK); 183 } 184 185 return obj; 186 } 187 188 static lv_obj_t * create_switch(lv_obj_t * parent, const char * icon, const char * txt, bool chk) 189 { 190 lv_obj_t * obj = create_text(parent, icon, txt, LV_MENU_ITEM_BUILDER_VARIANT_1); 191 192 lv_obj_t * sw = lv_switch_create(obj); 193 lv_obj_add_state(sw, chk ? LV_STATE_CHECKED : 0); 194 195 return obj; 196 } 197 198 #endif 199