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