650 lines
24 KiB
C
650 lines
24 KiB
C
|
#include "lvgl.h"
|
|||
|
#include "img_def.h"
|
|||
|
#include "demo.h"
|
|||
|
#include "mxc_meter.h"
|
|||
|
#include "moto_list.h"
|
|||
|
#include "language_table.h"
|
|||
|
#include "lan_str_table.h"
|
|||
|
#include "equipment.h"
|
|||
|
|
|||
|
//#define LV_KEY_Q 113
|
|||
|
//#define LV_KEY_W 119
|
|||
|
|
|||
|
char *list_title[16] = {"主题","亮度","蓝牙","其他\n设置","车辆\n信息","返回","1","2","3","4","5","6","7","8","9","10","11","12"};
|
|||
|
char *theme_title[16] = {"主题\n设置","主题\n背景","返回","1","2","3","4","5","6","7","8","9","10","11","12"};
|
|||
|
|
|||
|
|
|||
|
__attribute__((section("resource_section"))) static const lv_mainmenu_win_t mainmenu_page_group[MAINMENU_ITEM_ID_MAX] =
|
|||
|
{
|
|||
|
{MAINMENU_ITEM_ID_THEME, STR_ID_THEME, MAINMENU_ICON_ID_THEME, (void *)theme_create},
|
|||
|
{MAINMENU_ITEM_ID_LIGHT, STR_ID_LIGHT, MAINMENU_ICON_ID_LIGHT, (void *)light_create},
|
|||
|
{MAINMENU_ITEM_ID_BLUETOOTH, STR_ID_BLUETOOTH, MAINMENU_ICON_ID_BLUETOOTH, (void *)bluetooth_create},
|
|||
|
{MAINMENU_ITEM_ID_OTHER, STR_ID_OTHER_SETTING, MAINMENU_ICON_ID_OTHER, (void *)other_create},
|
|||
|
{MAINMENU_ITEM_ID_INFORMATION, STR_ID_INFORMATION, MAINMENU_ICON_ID_INFORMATION, (void *)information_create},
|
|||
|
{MAINMENU_ITEM_ID_PRESSURE, STR_ID_PRESSURE, MAINMENU_ICON_ID_PRESSURE, (void *)pressure_create},
|
|||
|
{MAINMENU_ITEM_ID_FAULT_CODE, STR_ID_FAULT_CODE, MAINMENU_ICON_ID_FAULT_CODE, (void *)fault_code_create},
|
|||
|
{EQUIPMENT_ID_RETURN, STR_ID_RETURN, MAINMENU_ICON_ID_RETURN, (void *)demo_return},
|
|||
|
};
|
|||
|
|
|||
|
const btn_event_func getDeviceEntryByStrId(const LAN_STR_ID str_id)
|
|||
|
{
|
|||
|
btn_event_func p_btn_func = NULL;
|
|||
|
for (uint8_t i = MAINMENU_ITEM_ID_THEME; i < MAINMENU_ITEM_ID_MAX; i++)
|
|||
|
{
|
|||
|
// printf("mainmenu_page_group[i].str_id = %d ,str_id = %d ",mainmenu_page_group[i].str_id,str_id);
|
|||
|
if (mainmenu_page_group[i].str_id == str_id)
|
|||
|
{
|
|||
|
p_btn_func = mainmenu_page_group[i].event_handler;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
if (p_btn_func != NULL)
|
|||
|
{
|
|||
|
p_btn_func(NULL);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LV_ASSERT(true);
|
|||
|
}
|
|||
|
return NULL;
|
|||
|
}
|
|||
|
|
|||
|
ENUM_EQUIPMENT_ID get_menu_iconid_by_strid(const LAN_STR_ID str_id)
|
|||
|
{
|
|||
|
for (uint8_t i = EQUIPMENT_ID_THEME; i < EQUIPMENT_ID_MAX; i++)
|
|||
|
{
|
|||
|
if (mainmenu_page_group[i].str_id == str_id)
|
|||
|
return mainmenu_page_group[i].mainmenu_icon_id;
|
|||
|
}
|
|||
|
return EQUIPMENT_ID_MAX;
|
|||
|
}
|
|||
|
|
|||
|
LAN_STR_ID list_str[16] = {
|
|||
|
STR_ID_THEME,
|
|||
|
STR_ID_LIGHT,
|
|||
|
STR_ID_BLUETOOTH,
|
|||
|
STR_ID_OTHER_SETTING,
|
|||
|
STR_ID_INFORMATION,
|
|||
|
STR_ID_PRESSURE,
|
|||
|
STR_ID_FAULT_CODE,
|
|||
|
STR_ID_RETURN,
|
|||
|
STR_ID_RETURN,
|
|||
|
STR_ID_RETURN,
|
|||
|
STR_ID_RETURN,
|
|||
|
STR_ID_RETURN,
|
|||
|
STR_ID_RETURN,
|
|||
|
STR_ID_RETURN,
|
|||
|
STR_ID_RETURN,
|
|||
|
STR_ID_RETURN,
|
|||
|
STR_ID_RETURN,
|
|||
|
};
|
|||
|
|
|||
|
//lan_str_table[STR_ID_FOCUS_BREATHING][1]
|
|||
|
|
|||
|
mainmenu_tile_t mainmenu_tile[]=
|
|||
|
{
|
|||
|
[MAINMENU_TILE_ZERO] = {.window_obj = NULL, .col_id = 0, .row_id = 0, .dir = LV_DIR_HOR, .Init = init_tile_common}, // <20><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
|
|||
|
[MAINMENU_TILE_ONE] = {.window_obj = NULL, .col_id = 1, .row_id = 0, .dir = LV_DIR_HOR, .Init = init_tile_common},
|
|||
|
[MAINMENU_TILE_TWO] = {.window_obj = NULL, .col_id = 2, .row_id = 0, .dir = LV_DIR_HOR, .Init = init_tile_common},
|
|||
|
};
|
|||
|
|
|||
|
LV_ATTRIBUTE_LARGE_CONST static const lv_img_dsc_t* test_list[4] =
|
|||
|
{
|
|||
|
IMG_DM1_OIL,
|
|||
|
IMG_DM1_TCS,
|
|||
|
IMG_DM1_TEMP,
|
|||
|
IMG_DM1_NULL,
|
|||
|
};
|
|||
|
|
|||
|
uint32_t mainmenu_item_process(uint32_t dis_item_arr[MAINMENU_TILE_END][COMMON_PER_PAGE_NUM],
|
|||
|
uint32_t *page_num, uint32_t *last_item_pos)
|
|||
|
{
|
|||
|
uint32_t mainmenu_item_sum = 0;
|
|||
|
|
|||
|
// calculate how many devices need display
|
|||
|
for (uint8_t i = EQUIPMENT_ID_THEME; i < EQUIPMENT_ID_MAX; i++)
|
|||
|
{
|
|||
|
if (get_equipment_is_display(i))
|
|||
|
mainmenu_item_sum++;
|
|||
|
}
|
|||
|
//mainmenu_item_sum++; // add device manage item
|
|||
|
|
|||
|
// calculate page_num according to mainmenu_item_sum
|
|||
|
*page_num = mainmenu_item_sum / COMMON_PER_PAGE_NUM;
|
|||
|
if (mainmenu_item_sum % COMMON_PER_PAGE_NUM != 0)
|
|||
|
(*page_num)++;
|
|||
|
|
|||
|
// Store the device str_id to be displayed into an array in order
|
|||
|
*last_item_pos = mainmenu_item_sum % COMMON_PER_PAGE_NUM;
|
|||
|
|
|||
|
get_display_equipment_str(dis_item_arr);
|
|||
|
|
|||
|
*last_item_pos == 0 ? (dis_item_arr[(*page_num) - 1][COMMON_PER_PAGE_NUM - 1] = STR_ID_RETURN) : (dis_item_arr[(*page_num) - 1][(*last_item_pos) - 1] = STR_ID_RETURN);
|
|||
|
return mainmenu_item_sum;
|
|||
|
}
|
|||
|
|
|||
|
void enter_mainmenu_win(lv_obj_t *parent)
|
|||
|
{
|
|||
|
lv_obj_t *mainmenu_win = lv_obj_create(parent);
|
|||
|
lv_obj_set_style_bg_color(mainmenu_win, lv_color_make(0x00, 0x00, 0x00), 0);
|
|||
|
lv_obj_set_scrollbar_mode(mainmenu_win, LV_SCROLLBAR_MODE_OFF);
|
|||
|
lv_obj_set_size(mainmenu_win, LV_PCT(100), LV_PCT(100));
|
|||
|
lv_obj_set_style_pad_all(mainmenu_win, 0, 0);
|
|||
|
lv_obj_set_style_radius(mainmenu_win, 0, 0);
|
|||
|
lv_obj_set_style_border_width(mainmenu_win, 0, LV_PART_MAIN);
|
|||
|
// lv_obj_set_style_border_color(mainmenu_win, lv_color_black(), 0);
|
|||
|
lv_obj_set_style_bg_color(mainmenu_win, lv_color_hex(0x5E5E5E), NULL);
|
|||
|
lv_obj_clear_flag(mainmenu_win, LV_OBJ_FLAG_SCROLLABLE);
|
|||
|
|
|||
|
lv_obj_t *demo_group = get_key_group();
|
|||
|
lv_group_add_obj(demo_group, mainmenu_win);
|
|||
|
|
|||
|
lv_obj_t *mainmenu_tile_win = lv_tileview_create(mainmenu_win);
|
|||
|
lv_obj_set_style_bg_color(mainmenu_tile_win, lv_color_black(), 0);
|
|||
|
lv_obj_clear_flag(mainmenu_tile_win, LV_OBJ_FLAG_SCROLLABLE);
|
|||
|
lv_obj_clear_flag(mainmenu_tile_win, LV_OBJ_FLAG_EVENT_BUBBLE);
|
|||
|
lv_obj_set_scrollbar_mode(mainmenu_tile_win, LV_SCROLLBAR_MODE_OFF);
|
|||
|
lv_obj_set_scroll_dir(mainmenu_tile_win, LV_DIR_HOR);
|
|||
|
lv_obj_clear_flag(mainmenu_tile_win, LV_OBJ_FLAG_SCROLL_ELASTIC);
|
|||
|
lv_obj_add_flag(mainmenu_tile_win, LV_OBJ_FLAG_SCROLL_MOMENTUM);
|
|||
|
lv_obj_add_flag(mainmenu_tile_win, LV_OBJ_FLAG_SCROLL_ONE);
|
|||
|
lv_obj_set_size(mainmenu_tile_win, LV_PCT(100), LV_PCT(100));
|
|||
|
lv_obj_set_style_radius(mainmenu_tile_win, 0, 0);
|
|||
|
lv_obj_set_style_pad_all(mainmenu_tile_win, 0, 0);
|
|||
|
lv_obj_set_style_border_width(mainmenu_tile_win, 0, LV_PART_MAIN);
|
|||
|
// lv_obj_set_style_border_color(mainmenu_tile_win, lv_color_black(), 0);
|
|||
|
lv_obj_set_style_bg_color(mainmenu_tile_win, lv_color_hex(0x5E5E5E), NULL);
|
|||
|
|
|||
|
uint32_t page_num = 3; // sum of mainmenu pages
|
|||
|
uint32_t tile_item_count = 3; // number of items per page
|
|||
|
uint32_t last_item_pos = 0;
|
|||
|
uint8_t cal_check_page = 0;
|
|||
|
// uint8_t cal_check_item = 0;
|
|||
|
|
|||
|
uint32_t dis_item_arr[MAINMENU_TILE_END][COMMON_PER_PAGE_NUM];
|
|||
|
memset(dis_item_arr, 0, sizeof(dis_item_arr));
|
|||
|
|
|||
|
uint32_t btn_totalnum = mainmenu_item_process(dis_item_arr, &page_num, &last_item_pos);
|
|||
|
printf("btn_totalnum = %d .\n",btn_totalnum);
|
|||
|
printf("page_num = %d last_num = %d .\n",page_num,last_item_pos);
|
|||
|
// Loop create tile
|
|||
|
for (uint8_t i = MAINMENU_TILE_ZERO; i < page_num; i++)
|
|||
|
{
|
|||
|
// calculate number of items on the last page
|
|||
|
if ((i == page_num - 1) && (last_item_pos))
|
|||
|
tile_item_count = last_item_pos;
|
|||
|
|
|||
|
// add tile
|
|||
|
mainmenu_tile[i].window_obj = lv_tileview_add_tile(mainmenu_tile_win, mainmenu_tile[i].col_id, mainmenu_tile[i].row_id, mainmenu_tile[i].dir);
|
|||
|
|
|||
|
if (i == cal_check_page)
|
|||
|
((mainmenu_tile_t *)&mainmenu_tile[i])->Init(mainmenu_tile[i].window_obj, dis_item_arr[i], i, tile_item_count);
|
|||
|
else
|
|||
|
((mainmenu_tile_t *)&mainmenu_tile[i])->Init(mainmenu_tile[i].window_obj, dis_item_arr[i], i, tile_item_count);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
lv_obj_set_tile_id(mainmenu_tile_win, mainmenu_tile[cal_check_page].col_id, mainmenu_tile[cal_check_page].row_id, LV_ANIM_ON);
|
|||
|
lv_obj_add_event_cb(mainmenu_win, key_event_handler, LV_EVENT_KEY, NULL);
|
|||
|
}
|
|||
|
|
|||
|
static void key_event_handler(lv_event_t *e)
|
|||
|
{
|
|||
|
lv_event_code_t code = lv_event_get_code(e);
|
|||
|
|
|||
|
lv_obj_t *mainmenu_win = lv_event_get_target(e);
|
|||
|
lv_obj_t *mainmenu_tile_win = lv_obj_get_child(mainmenu_win, 0);
|
|||
|
lv_obj_t *mainmenu_btn_win = lv_tileview_get_tile_act(mainmenu_tile_win); // get display tile
|
|||
|
lv_obj_t *img_side = lv_obj_get_child(mainmenu_win, 1);
|
|||
|
|
|||
|
if (code == LV_EVENT_KEY)
|
|||
|
{
|
|||
|
|
|||
|
uint32_t *key = lv_event_get_param(e);
|
|||
|
uint8_t key_code = (uint8_t)*key;
|
|||
|
|
|||
|
uint32_t page_count = 0; // display tile index
|
|||
|
uint32_t btn_count = 0; // checked item index
|
|||
|
uint32_t page_num = 0; // sum of mainmenu pages
|
|||
|
uint32_t last_item_pos = 0; // last item index of his page
|
|||
|
uint32_t dis_item_arr[MAINMENU_TILE_END][COMMON_PER_PAGE_NUM];
|
|||
|
memset(dis_item_arr, 0, sizeof(dis_item_arr));
|
|||
|
uint32_t btn_totalnum = mainmenu_item_process(dis_item_arr, &page_num, &last_item_pos);
|
|||
|
|
|||
|
bool check = false;
|
|||
|
// MAINMENU_ICON_ID_ENUM menu_id = MAINMENU_ICON_ID_MAX;
|
|||
|
// ENUM_MAINMENU_ITEM_ID item_id = MAINMENU_ITEM_ID_MAX;
|
|||
|
// uint8_t curItemState = 0;
|
|||
|
|
|||
|
// get focus item index
|
|||
|
for (uint32_t i = 0; i < lv_obj_get_child_cnt(mainmenu_btn_win); i++)
|
|||
|
{
|
|||
|
lv_obj_t *child = lv_obj_get_child(mainmenu_btn_win, i);
|
|||
|
if (lv_obj_has_state(child, LV_STATE_FOCUS_KEY))
|
|||
|
btn_count = i;
|
|||
|
}
|
|||
|
|
|||
|
lv_obj_t *mainmenu_button_cur = lv_obj_get_child(mainmenu_btn_win, btn_count); // get checked item obj
|
|||
|
|
|||
|
page_count = (uint32_t)lv_obj_get_child_id(mainmenu_btn_win); // get display tile index
|
|||
|
check = lv_obj_get_child_cnt(mainmenu_btn_win) > 1 ? true : false;
|
|||
|
|
|||
|
switch (key_code)
|
|||
|
{
|
|||
|
case LV_KEY_Q:
|
|||
|
lv_obj_clear_state(mainmenu_button_cur, LV_STATE_FOCUS_KEY);
|
|||
|
if(btn_totalnum ==btn_count+1+page_count*3){//最后一个按钮
|
|||
|
printf("2---------count = %d.\n",btn_count+1+page_count*3);
|
|||
|
page_count =0;
|
|||
|
btn_count =0;
|
|||
|
lv_obj_t *tile_display = lv_obj_get_child(mainmenu_tile_win, page_count);
|
|||
|
lv_obj_set_tile(mainmenu_tile_win, tile_display, LV_ANIM_ON);
|
|||
|
mainmenu_btn_win = lv_tileview_get_tile_act(mainmenu_tile_win);
|
|||
|
lv_obj_t *mainmenu_next_button = lv_obj_get_child(mainmenu_btn_win, btn_count);
|
|||
|
lv_obj_add_state(mainmenu_next_button, LV_STATE_FOCUS_KEY);
|
|||
|
printf("LV_KEY_Q page_count = %d ,btn_count = %d\n",page_count,btn_count);
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
if(btn_count==2){
|
|||
|
btn_count =0;
|
|||
|
page_count++;
|
|||
|
lv_obj_t *tile_display = lv_obj_get_child(mainmenu_tile_win, page_count);
|
|||
|
lv_obj_set_tile(mainmenu_tile_win, tile_display, LV_ANIM_ON);
|
|||
|
}else
|
|||
|
btn_count++;
|
|||
|
mainmenu_btn_win = lv_tileview_get_tile_act(mainmenu_tile_win);
|
|||
|
lv_obj_t *mainmenu_next_button = lv_obj_get_child(mainmenu_btn_win, btn_count);
|
|||
|
lv_obj_add_state(mainmenu_next_button, LV_STATE_FOCUS_KEY);
|
|||
|
printf("LV_KEY_Q page_count = %d ,btn_count = %d\n",page_count,btn_count);
|
|||
|
break;
|
|||
|
case LV_KEY_W:
|
|||
|
printf("LV_KEY_W page_count = %d ,btn_count = %d,",page_count,btn_count);
|
|||
|
printf("count = %d.\n",btn_count+1+page_count*3);
|
|||
|
// ENUM_MAINMENU_ITEM_ID item_id = get_mainmenu_item_id_by_strid(dis_item_arr[page_count][btn_count]);
|
|||
|
// Set_check_menu_item(item_id);
|
|||
|
|
|||
|
close_all_win();
|
|||
|
SubmenuBtnEnter(get_root_win(), page_count, btn_count);
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
// printf("other key:%d\r\n", key_code);
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void init_tile_common(lv_obj_t *mainmenu_btn_win, uint32_t str_arr[], uint8_t page_num, uint8_t cur_tile_item)
|
|||
|
{
|
|||
|
|
|||
|
printf("page_num = %d, cur_tile_item = %d\n",page_num,cur_tile_item);
|
|||
|
lv_obj_t *mainmenu_tile_win = lv_obj_get_parent(mainmenu_btn_win);
|
|||
|
lv_obj_t *mainmenu_win = lv_obj_get_parent(mainmenu_tile_win);
|
|||
|
lv_obj_t *img_side = lv_obj_get_child(mainmenu_win, 1);
|
|||
|
|
|||
|
uint32_t x1 = 0, y1 = 0, x2 = 0, y2 = 0;
|
|||
|
|
|||
|
uint32_t page_id = lv_obj_get_child_id(mainmenu_btn_win);
|
|||
|
|
|||
|
lv_obj_set_style_pad_all(mainmenu_btn_win, 0, 0);
|
|||
|
lv_obj_set_style_opa(mainmenu_btn_win, LV_OPA_100, 0);
|
|||
|
lv_obj_set_scrollbar_mode(mainmenu_btn_win, LV_SCROLLBAR_MODE_ACTIVE);
|
|||
|
lv_obj_clear_flag(mainmenu_btn_win, LV_OBJ_FLAG_SCROLL_ELASTIC);
|
|||
|
lv_obj_set_size(mainmenu_btn_win, LV_PCT(100), LV_PCT(100));
|
|||
|
lv_obj_set_style_radius(mainmenu_btn_win, 0, 0);
|
|||
|
lv_obj_set_style_bg_color(mainmenu_btn_win, lv_color_hex(0x7000BB), 0);
|
|||
|
|
|||
|
for (uint8_t i = 0; i < cur_tile_item; i++)
|
|||
|
{
|
|||
|
lv_obj_t *imgbtn = lv_btn_create(mainmenu_btn_win);
|
|||
|
lv_obj_set_style_bg_opa(imgbtn, LV_OPA_0, 0);
|
|||
|
uint32_t child_id = lv_obj_get_child_id(imgbtn);
|
|||
|
|
|||
|
switch (child_id)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
x1 = ICON_IMG_1_X;
|
|||
|
x2 = ICON_RING_1_X;
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
x1 = ICON_IMG_2_X;
|
|||
|
x2 = ICON_RING_2_X;
|
|||
|
break;
|
|||
|
default:
|
|||
|
x1 = ICON_IMG_3_X;
|
|||
|
x2 = ICON_RING_3_X;
|
|||
|
break;
|
|||
|
}
|
|||
|
y1 = ICON_IMG_Y;
|
|||
|
lv_obj_set_size(imgbtn, MAINMENU_ICON_WIDTH_UNCHECK, MAINMENU_ICON_HEIGHT_UNCHECK);
|
|||
|
lv_obj_set_pos(imgbtn, x1, y1);
|
|||
|
|
|||
|
LAN_STR_ID str_id = (LAN_STR_ID)str_arr[i];
|
|||
|
ENUM_EQUIPMENT_ID cur_menu_id = get_menu_iconid_by_strid(str_id);
|
|||
|
if (cur_menu_id == MAINMENU_ICON_ID_MAX)
|
|||
|
continue;
|
|||
|
|
|||
|
|
|||
|
if(page_id == 0 && i==0){
|
|||
|
lv_obj_add_state(imgbtn, LV_STATE_FOCUS_KEY);
|
|||
|
}
|
|||
|
|
|||
|
lv_obj_t * label = lv_label_create(imgbtn);
|
|||
|
const LAN_STR_ID Str_id = get_equipment_is_str(cur_menu_id);
|
|||
|
lv_label_set_text_fmt(label, "%s",lan_str_table[Str_id][1]);
|
|||
|
lv_obj_center(label);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
lv_obj_clear_flag(mainmenu_btn_win, LV_OBJ_FLAG_SCROLL_ELASTIC);
|
|||
|
lv_obj_clear_flag(mainmenu_btn_win, LV_OBJ_FLAG_GESTURE_BUBBLE);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
ENUM_MAINMENU_ITEM_ID Get_menu_btn_item(uint32_t btn_count){
|
|||
|
|
|||
|
switch(btn_count){
|
|||
|
case 0:
|
|||
|
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
return MAINMENU_ITEM_ID_MAX;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
ENUM_MAINMENU_ITEM_ID Get_menu_item(uint32_t page_count ,uint32_t btn_count){
|
|||
|
|
|||
|
switch(page_count){
|
|||
|
case 0:
|
|||
|
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
return MAINMENU_ITEM_ID_MAX;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void SubmenuBtnEnter(lv_obj_t * scr_parent_main , uint32_t page_count ,uint32_t btn_count)
|
|||
|
{
|
|||
|
uint8_t mainmenu_item_sum = 0;
|
|||
|
uint8_t page_num = 0;
|
|||
|
uint8_t tile_item_count = COMMON_PER_PAGE_NUM;
|
|||
|
|
|||
|
lv_obj_t *submenu_win = lv_obj_create(scr_parent_main);
|
|||
|
lv_obj_set_scrollbar_mode(submenu_win, LV_SCROLLBAR_MODE_OFF);
|
|||
|
lv_obj_set_size(submenu_win, LV_PCT(100), LV_PCT(100));
|
|||
|
lv_obj_set_style_pad_all(submenu_win, 0, 0);
|
|||
|
lv_obj_set_style_radius(submenu_win, 0, 0);
|
|||
|
lv_obj_set_style_border_width(submenu_win, 0, LV_PART_MAIN);
|
|||
|
lv_obj_set_style_border_color(submenu_win, lv_color_black(), 0);
|
|||
|
lv_obj_clear_flag(submenu_win, LV_OBJ_FLAG_SCROLLABLE);
|
|||
|
|
|||
|
// ENUM_MAINMENU_ITEM_ID page_type = Get_menu_item(page_count,btn_count);
|
|||
|
// printf("SubmenuBtnEnter ====== page_count = %d ,btn_count = %d .page_type = %d\n",page_count,btn_count,page_type);
|
|||
|
//
|
|||
|
// uint32_t last_item_pos = mainmenu_item_sum % COMMON_PER_PAGE_NUM;
|
|||
|
uint32_t dis_item_arr[MAINMENU_TILE_END][COMMON_PER_PAGE_NUM];
|
|||
|
memset(dis_item_arr, 0, sizeof(dis_item_arr));
|
|||
|
get_display_equipment_str(dis_item_arr);
|
|||
|
// last_item_pos == 0 ? \
|
|||
|
// (dis_item_arr[page_num-1][COMMON_PER_PAGE_NUM-1]=STR_ID_DEVICE_MANAGE) : \
|
|||
|
// (dis_item_arr[page_num-1][last_item_pos-1]=STR_ID_DEVICE_MANAGE);
|
|||
|
getDeviceEntryByStrId(dis_item_arr[page_count][btn_count]);
|
|||
|
// printf("dis_item_arr = %d \n",dis_item_arr[page_count][btn_count]);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/**************************************************************************************/
|
|||
|
static void scroll_begin_event(lv_event_t * e)
|
|||
|
{
|
|||
|
/*Disable the scroll animations. Triggered when a tab button is clicked */
|
|||
|
if(lv_event_get_code(e) == LV_EVENT_SCROLL_BEGIN) {
|
|||
|
lv_anim_t * a = lv_event_get_param(e);
|
|||
|
if(a) a->time = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void scroll_event_cb(lv_event_t * e)
|
|||
|
{
|
|||
|
lv_obj_t * cont = lv_event_get_target(e);
|
|||
|
|
|||
|
lv_area_t cont_a;
|
|||
|
lv_obj_get_coords(cont, &cont_a);
|
|||
|
lv_coord_t cont_y_center = cont_a.y1 + lv_area_get_height(&cont_a) / 2;
|
|||
|
|
|||
|
lv_coord_t r = lv_obj_get_height(cont) * 7 / 10;
|
|||
|
uint32_t i;
|
|||
|
uint32_t child_cnt = lv_obj_get_child_cnt(cont);
|
|||
|
for(i = 0; i < child_cnt; i++) {
|
|||
|
lv_obj_t * child = lv_obj_get_child(cont, i);
|
|||
|
lv_area_t child_a;
|
|||
|
lv_obj_get_coords(child, &child_a);
|
|||
|
|
|||
|
lv_coord_t child_y_center = child_a.y1 + lv_area_get_height(&child_a) / 2;
|
|||
|
|
|||
|
lv_coord_t diff_y = child_y_center - cont_y_center;
|
|||
|
diff_y = LV_ABS(diff_y);
|
|||
|
|
|||
|
/*Get the x of diff_y on a circle.*/
|
|||
|
lv_coord_t x;
|
|||
|
/*If diff_y is out of the circle use the last point of the circle (the radius)*/
|
|||
|
if(diff_y >= r) {
|
|||
|
x = r;
|
|||
|
} else {
|
|||
|
/*Use Pythagoras theorem to get x from radius and y*/
|
|||
|
uint32_t x_sqr = r * r - diff_y * diff_y;
|
|||
|
lv_sqrt_res_t res;
|
|||
|
lv_sqrt(x_sqr, &res, 0x8000); /*Use lvgl's built in sqrt root function*/
|
|||
|
x = r - res.i;
|
|||
|
}
|
|||
|
|
|||
|
/*Translate the item by the calculated X coordinate*/
|
|||
|
lv_obj_set_style_translate_x(child, x, 0);
|
|||
|
|
|||
|
/*Use some opacity with larger translations*/
|
|||
|
lv_opa_t opa = lv_map(x, 0, r, LV_OPA_TRANSP, LV_OPA_COVER);
|
|||
|
lv_obj_set_style_opa(child, LV_OPA_COVER - opa, 0);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void test(lv_obj_t* parent){
|
|||
|
|
|||
|
|
|||
|
lv_obj_t *mainmenu_win = lv_obj_create(parent);
|
|||
|
lv_obj_set_style_bg_color(mainmenu_win, lv_color_make(0x00, 0x00, 0x00), 0);
|
|||
|
lv_obj_set_scrollbar_mode(mainmenu_win, LV_SCROLLBAR_MODE_OFF);
|
|||
|
lv_obj_set_size(mainmenu_win, LV_PCT(100), LV_PCT(100));
|
|||
|
lv_obj_set_style_pad_all(mainmenu_win, 0, 0);
|
|||
|
lv_obj_set_style_radius(mainmenu_win, 0, 0);
|
|||
|
lv_obj_set_style_border_width(mainmenu_win, 0, LV_PART_MAIN);
|
|||
|
lv_obj_set_style_border_color(mainmenu_win, lv_color_black(), 0);
|
|||
|
lv_obj_clear_flag(mainmenu_win, LV_OBJ_FLAG_SCROLLABLE);
|
|||
|
|
|||
|
// lv_obj_t *mainmenu_win = NULL;
|
|||
|
// gui_create_new_window(mainmenu_win);
|
|||
|
Set_UI_page_id(PAGE_MAINMENU_WIN_ID);
|
|||
|
// app_menu_comm_entry(mainmenu_win,PAGE_MAINMENU_WIN_ID,false);
|
|||
|
// #if !MMI_WIN32_SIM
|
|||
|
// lv_group_t *g = lv_get_keypad_group();
|
|||
|
// lv_group_remove_all_objs(g);
|
|||
|
// lv_group_add_obj(g, mainmenu_win);
|
|||
|
// #endif
|
|||
|
|
|||
|
uint8_t style_num =1;
|
|||
|
lv_obj_t * cont = NULL;
|
|||
|
lv_obj_t * cont_parent = NULL;
|
|||
|
uint8_t i =0;
|
|||
|
static lv_style_t style;
|
|||
|
lv_obj_t *tabview;
|
|||
|
|
|||
|
|
|||
|
switch(style_num){
|
|||
|
case 0:
|
|||
|
|
|||
|
/*Create a Tab view object*/
|
|||
|
|
|||
|
tabview = lv_tabview_create(lv_scr_act(), LV_DIR_LEFT, 100);
|
|||
|
lv_obj_add_event_cb(lv_tabview_get_content(tabview), scroll_begin_event, LV_EVENT_SCROLL_BEGIN, NULL);
|
|||
|
|
|||
|
lv_obj_set_style_bg_color(tabview, lv_palette_lighten(LV_PALETTE_RED, 2), 0);
|
|||
|
|
|||
|
lv_obj_t * tab_btns = lv_tabview_get_tab_btns(tabview);
|
|||
|
lv_obj_set_style_bg_color(tab_btns, lv_palette_darken(LV_PALETTE_GREY, 3), 0);
|
|||
|
lv_obj_set_style_text_color(tab_btns, lv_palette_lighten(LV_PALETTE_GREY, 5), 0);
|
|||
|
lv_obj_set_style_border_side(tab_btns, LV_BORDER_SIDE_RIGHT, LV_PART_ITEMS | LV_STATE_CHECKED);
|
|||
|
|
|||
|
|
|||
|
/*Add 3 tabs (the tabs are page (lv_page) and can be scrolled*/
|
|||
|
lv_obj_t *tab1 = lv_tabview_add_tab(tabview, "Tab 1");
|
|||
|
lv_obj_set_size(tab1, LV_PCT(100), LV_PCT(100));
|
|||
|
lv_obj_t *tab2 = lv_tabview_add_tab(tabview, "Tab 2");
|
|||
|
lv_obj_set_size(tab2, LV_PCT(100), LV_PCT(100));
|
|||
|
lv_obj_t *tab3 = lv_tabview_add_tab(tabview, "Tab 3");
|
|||
|
lv_obj_set_size(tab3, LV_PCT(100), LV_PCT(100));
|
|||
|
lv_obj_t *tab4 = lv_tabview_add_tab(tabview, "Tab 4");
|
|||
|
lv_obj_set_size(tab4, LV_PCT(100), LV_PCT(100));
|
|||
|
lv_obj_t *tab5 = lv_tabview_add_tab(tabview, "Tab 5");
|
|||
|
lv_obj_set_size(tab5, LV_PCT(100), LV_PCT(100));
|
|||
|
|
|||
|
lv_obj_set_style_bg_color(tab2, lv_palette_lighten(LV_PALETTE_AMBER, 3), 0);
|
|||
|
lv_obj_set_style_bg_opa(tab2, LV_OPA_COVER, 0);
|
|||
|
|
|||
|
/*Add content to the tabs*/
|
|||
|
lv_obj_t * label = lv_label_create(tab1);
|
|||
|
lv_label_set_text(label, "First tab 1111111111111111");
|
|||
|
|
|||
|
label = lv_label_create(tab2);
|
|||
|
lv_label_set_text(label, "Second tab 2222222222222222");
|
|||
|
|
|||
|
label = lv_label_create(tab3);
|
|||
|
lv_label_set_text(label, "Third tab 333333333333333333333");
|
|||
|
|
|||
|
label = lv_label_create(tab4);
|
|||
|
lv_label_set_text(label, "Forth tab 444");
|
|||
|
|
|||
|
label = lv_label_create(tab5);
|
|||
|
lv_label_set_text(label, "Fifth tab 5");
|
|||
|
|
|||
|
// lv_obj_clear_flag(lv_tabview_get_content(tabview), LV_OBJ_FLAG_SCROLLABLE);
|
|||
|
|
|||
|
// //横向按钮列表
|
|||
|
// cont = lv_obj_create(mainmenu_win);
|
|||
|
// lv_obj_set_size(cont, lv_pct(100), lv_pct(100));
|
|||
|
// lv_obj_center(cont);
|
|||
|
// lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_ROW );
|
|||
|
// lv_obj_add_event_cb(cont, scroll_event_cb, LV_EVENT_SCROLL, NULL);
|
|||
|
// lv_obj_set_style_radius(cont, LV_RADIUS_CIRCLE, 0);//圆弧框
|
|||
|
// lv_obj_set_style_clip_corner(cont, true, 0);//隐藏四个角落
|
|||
|
// lv_obj_set_scroll_dir(cont, LV_DIR_VER);
|
|||
|
// lv_obj_set_scroll_snap_y(cont, LV_SCROLL_SNAP_CENTER);
|
|||
|
// lv_obj_set_scrollbar_mode(cont, LV_SCROLLBAR_MODE_OFF);
|
|||
|
// lv_obj_clear_flag(cont, LV_OBJ_FLAG_SCROLLABLE);
|
|||
|
//
|
|||
|
// for(i = 0; i < 7; i++) {
|
|||
|
// lv_obj_t * btn = lv_btn_create(cont);
|
|||
|
// lv_obj_set_width(btn, 100);
|
|||
|
// lv_obj_set_height(btn, lv_pct(70));
|
|||
|
//
|
|||
|
// lv_obj_t * label = lv_label_create(btn);
|
|||
|
// lv_label_set_text_fmt(label, "%d", i);
|
|||
|
// }
|
|||
|
//
|
|||
|
// lv_event_send(cont, LV_EVENT_SCROLL, NULL);
|
|||
|
//
|
|||
|
// lv_obj_scroll_to_view(lv_obj_get_child(cont, 0), LV_ANIM_OFF);
|
|||
|
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
//弧形按钮列表
|
|||
|
cont_parent = lv_obj_create(mainmenu_win);
|
|||
|
lv_obj_set_size(cont_parent, 180, lv_pct(100));
|
|||
|
lv_obj_align(cont_parent,LV_ALIGN_TOP_LEFT, 0, 0);
|
|||
|
lv_obj_set_style_bg_color(cont_parent, lv_color_hex(0xff0000), 0);
|
|||
|
lv_obj_clear_flag(cont_parent, LV_OBJ_FLAG_SCROLLABLE);
|
|||
|
|
|||
|
cont = lv_obj_create(cont_parent);
|
|||
|
lv_obj_set_size(cont, 150, 150);
|
|||
|
lv_obj_center(cont);
|
|||
|
lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_COLUMN);
|
|||
|
lv_obj_add_event_cb(cont, scroll_event_cb, LV_EVENT_SCROLL, NULL);
|
|||
|
lv_obj_set_style_radius(cont, LV_RADIUS_CIRCLE, 0);//圆弧框
|
|||
|
lv_obj_set_style_clip_corner(cont, true, 0);//隐藏四个角落
|
|||
|
lv_obj_set_scroll_dir(cont, LV_DIR_VER);
|
|||
|
lv_obj_set_scroll_snap_y(cont, LV_SCROLL_SNAP_CENTER);
|
|||
|
lv_obj_set_scrollbar_mode(cont, LV_SCROLLBAR_MODE_OFF);
|
|||
|
lv_obj_clear_flag(cont, LV_OBJ_FLAG_SCROLLABLE);
|
|||
|
|
|||
|
for(i = 0; i < 7; i++) {
|
|||
|
lv_obj_t * btn = lv_btn_create(cont);
|
|||
|
lv_obj_set_width(btn, lv_pct(90));
|
|||
|
lv_obj_set_height(btn, lv_pct(70));
|
|||
|
|
|||
|
lv_obj_t * label = lv_label_create(btn);
|
|||
|
lv_label_set_text_fmt(label, "%d", i);
|
|||
|
}
|
|||
|
|
|||
|
lv_event_send(cont, LV_EVENT_SCROLL, NULL);
|
|||
|
|
|||
|
lv_obj_scroll_to_view(lv_obj_get_child(cont, 0), LV_ANIM_OFF);
|
|||
|
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
//循环滚动列表
|
|||
|
|
|||
|
lv_style_init(&style);
|
|||
|
lv_style_set_bg_color(&style, lv_color_black());
|
|||
|
lv_style_set_text_color(&style, lv_color_hex(0x5e0000));
|
|||
|
lv_style_set_border_width(&style, 0);
|
|||
|
lv_style_set_pad_all(&style, 0);
|
|||
|
lv_obj_add_style(mainmenu_win, &style, 0);
|
|||
|
|
|||
|
lv_obj_t *roller1 = lv_roller_create(mainmenu_win);
|
|||
|
lv_obj_add_style(roller1, &style, 0);
|
|||
|
// lv_obj_set_style_bg_opa(roller1, LV_OPA_TRANSP, LV_PART_SELECTED);
|
|||
|
|
|||
|
lv_roller_set_options(roller1,
|
|||
|
"January\n"
|
|||
|
"February\n"
|
|||
|
"March\n"
|
|||
|
"April\n"
|
|||
|
"May\n"
|
|||
|
"June\n"
|
|||
|
"July\n"
|
|||
|
"August\n"
|
|||
|
"September\n"
|
|||
|
"October\n"
|
|||
|
"November\n"
|
|||
|
"December",
|
|||
|
LV_ROLLER_MODE_INFINITE);
|
|||
|
|
|||
|
lv_obj_center(roller1);
|
|||
|
lv_roller_set_visible_row_count(roller1, 3);
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|