EC600U_esp32_iap_uart/EC600U_lvgl/ui/ui_screen3.c
2024-02-05 17:39:56 +08:00

627 lines
26 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "../inc/ui/ui_screen3.h"
#include "../inc/ui/ui_screen3_chart.h"
#include "../inc/ui/fs_function.h"
lv_obj_t * ui_Screen3;//用来切屏
lv_obj_t * screen3_calender;
lv_obj_t * screen3_calender_dsc_label; //用来设置选中日期
lv_obj_t * btn_page_plus; //用来设置是否可选中
lv_obj_t * btn_page_reduce;//用来设置是否可选中
//用来设置数据
lv_obj_t * data_table1;
lv_obj_t * data_table2;
lv_obj_t * data_table3;
lv_obj_t * data_table4;
lv_obj_t * data_table5;
lv_obj_t * data_table6;
lv_obj_t * data_table7;
lv_obj_t * data_table8;
lv_obj_t * screen3_spinbox;
lv_obj_t * screen3_spinbox_dsc_label;
lv_obj_t * screen3_spinbox_label_textarea;
lv_obj_t * btnm;
lv_obj_t * scrren3_spinbox_btn;
lv_obj_t * calendar_dropdown_year;
lv_obj_t * calendar_dropdown_month;
//
lv_obj_t * chart;
lv_obj_t * chart_screen;
lv_chart_series_t * ser1;
lv_chart_series_t * ser2;
lv_chart_series_t * ser3;
lv_chart_series_t * ser4;
lv_obj_t * primary_y_label;
lv_obj_t * secondry_y_label;
lv_obj_t * chart_change_btn_label;
extern lv_obj_t * ui_Screen2;
extern lv_obj_t * ui_Screen4;
extern int current_id;
extern int end_count;
struct Return_Data global_file_data_p;
struct ChartData chartdata;//存储chart数据
uint8_t this_date_have_data = 0; //判断是否需要重新读取文件
uint16_t screen3_spinbox_btnm_teatarea_flag = 0;
uint8_t user_first_see_calendar_or_change_date = 1;
lv_calendar_date_t highlighted_days[31];
uint8_t highlighted_days_cnt = 0;
void ui_Screen3_calendar_set_highlight(void)
{
//通过日期获取路径
char year[10];
char month[10];
char filedir[20];
lv_dropdown_get_selected_str(calendar_dropdown_year, year, sizeof(year));
lv_dropdown_get_selected_str(calendar_dropdown_month, month, sizeof(month));
sprintf(filedir,"SD:/%s/%s",year,month);
//printf("%s\n",filedir);
uint16_t a = atoi(year);
int8_t b = atoi(month);
//printf("%d.%02d\n",a,b);
//lv_calendar_date_t highlighted_days[30];
for(int i = 0; i < 31; i++){
highlighted_days[i].year = a;
highlighted_days[i].month = b;
highlighted_days[i].day = 0;
}
//printf("%d.%02d\n",highlighted_days[0].year,highlighted_days[0].month);
char filenames[30][7];
for (int i = 0; i < 31; i++) {
sprintf(filenames[i], "%02d.txt", i+1);
}
//打开文件读取目录
QDIR * dir = ql_opendir(filedir);
if(dir != NULL){
highlighted_days_cnt = 0;
while(1){
qdirent *dirinfo = ql_readdir(dir);
if(dirinfo == NULL){
break;
}
for( int i = 0; i < 31; i++){
if(strcmp(dirinfo->d_name, filenames[i]) == 0){
highlighted_days[highlighted_days_cnt].day = atoi(filenames[i]);
highlighted_days_cnt++;
break;
}
}
}
lv_calendar_set_highlighted_dates(screen3_calender, highlighted_days, highlighted_days_cnt);//高亮对应的日期
ql_closedir(dir);
}
// else{
// LV_LOG_USER("no date need highlight\n");
// }
}
//点击使spinbox数值+1
void lv_spinbox_increment_event_cb(lv_event_t * e){
lv_event_code_t code = lv_event_get_code(e);
if(code == LV_EVENT_SHORT_CLICKED || code == LV_EVENT_LONG_PRESSED_REPEAT) {
//如果可以点击进入回调函数,代表一定有数据
LV_LOG_USER("increment the data");
lv_spinbox_increment(screen3_spinbox);
//根据增加后的页数设置table数据
uint8_t current_page = (uint8_t)lv_spinbox_get_value(screen3_spinbox);
if(current_page <= 0){
return;
}
uint8_t page_count = global_file_data_p.id_count/8 + 1;
LV_LOG_USER("page:%d page_count:%d\n",current_page,page_count);
setDataToTables(&global_file_data_p,current_page,page_count);
}
}
//点击使spinbox数值-1
void lv_spinbox_decrement_event_cb(lv_event_t * e){
lv_event_code_t code = lv_event_get_code(e);
if(code == LV_EVENT_SHORT_CLICKED || code == LV_EVENT_LONG_PRESSED_REPEAT) {
//LV_LOG_USER("decrement the data");
lv_spinbox_decrement(screen3_spinbox);
//根据增加后的页数设置table数据
uint8_t current_page = (uint8_t)lv_spinbox_get_value(screen3_spinbox);
if(current_page <= 0){
return;
}
uint8_t page_count = global_file_data_p.id_count/8 + 1;
//LV_LOG_USER("page:%d page_count:%d\n",current_page,page_count);
setDataToTables(&global_file_data_p,current_page,page_count);
}
}
//使用keyborad对textarea输入数字按下回车按钮后隐藏textarea和keyboard并将数字设置到spinbox上
void screen3_textarea_keyboard_event_cb(lv_event_t * e){
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(code == LV_EVENT_VALUE_CHANGED) {
//当能进入这个回调说明spinbox btn 可以点击,说明存在有用的数据
//获取被点击的btn的id
int id = lv_btnmatrix_get_selected_btn(target);
// const char * txt = lv_btnmatrix_get_btn_text(target, id);
// LV_LOG_USER("%s was pressed\n", txt);
uint8_t textarea_page_count = global_file_data_p.id_count/8 + 1;
uint8_t textarea_page = 0;
//回车被点击
if(id == 11){
//隐藏textarea和keyboard
lv_obj_add_flag(screen3_spinbox_label_textarea,LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(btnm,LV_OBJ_FLAG_HIDDEN);
screen3_spinbox_btnm_teatarea_flag = 0;
//获取此时textarea的文本值
const char * textarea_value = lv_textarea_get_text(screen3_spinbox_label_textarea);
//当存在文本时
if (textarea_value[0] != '\0'){
uint8_t value = atoi(textarea_value);
if(value > 0 && value <textarea_page_count){
//代表键入的页数在范围内
textarea_page = value;
}else if(value == 0){
textarea_page = 1;
}else{
textarea_page = textarea_page_count;
}
lv_spinbox_set_value(screen3_spinbox,textarea_page);//将spinbox设置为对应的页数
setDataToTables(&global_file_data_p,textarea_page,textarea_page_count);
}
}
}
}
//点击spinbox右侧显示页数的btn 显示/隐藏手动输入页数界面
void lv_spinbox_textarea_event_cb(lv_event_t * e){
lv_event_code_t event_code = lv_event_get_code(e);
//lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_CLICKED) {
LV_LOG_USER("page label is clicked");
if(screen3_spinbox_btnm_teatarea_flag == 0){
lv_obj_clear_flag(screen3_spinbox_label_textarea,LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(btnm,LV_OBJ_FLAG_HIDDEN);
LV_LOG_USER("can see spinbox_textarea and btnm");
screen3_spinbox_btnm_teatarea_flag = 1;
}else if(screen3_spinbox_btnm_teatarea_flag == 1){
lv_obj_add_flag(screen3_spinbox_label_textarea,LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(btnm,LV_OBJ_FLAG_HIDDEN);
LV_LOG_USER("can not see spinbox_textarea and btnm");
screen3_spinbox_btnm_teatarea_flag = 0;
}
}
}
//当keyboard中键入数值时同步更新到textarea中
void screen3_btnm_event_handler(lv_event_t * e){
lv_obj_t * obj = lv_event_get_target(e);
lv_obj_t * ta = lv_event_get_user_data(e);
const char * txt = lv_btnmatrix_get_btn_text(obj, lv_btnmatrix_get_selected_btn(obj));
if(strcmp(txt, LV_SYMBOL_BACKSPACE) == 0) lv_textarea_del_char(ta);
else if(strcmp(txt, LV_SYMBOL_NEW_LINE) == 0) lv_event_send(ta, LV_EVENT_READY, NULL);
else lv_textarea_add_text(ta, txt);
}
//点击显示日期的btn可以弹出/隐藏日历界面,当弹出日历时,高亮对应日期
uint16_t calendar_flag = 0;
void screen3_calender_create_cb(lv_event_t *e){
lv_event_code_t event_code = lv_event_get_code(e);
//lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_CLICKED) {
LV_LOG_USER("calender create btn clicked");
if(calendar_flag == 0){
LV_LOG_USER("can see calender");
lv_obj_clear_flag(screen3_calender,LV_OBJ_FLAG_HIDDEN);
//当用户第一次显示日历或者切换日期时
if(user_first_see_calendar_or_change_date){
LV_LOG_USER("user fisrt see calendar or change date\n");
user_first_see_calendar_or_change_date = 0;
ui_Screen3_calendar_set_highlight();
}else{
lv_calendar_set_highlighted_dates(screen3_calender, highlighted_days, highlighted_days_cnt);
}
calendar_flag = 1;
}else if(calendar_flag == 1){
LV_LOG_USER("can not see calender");
lv_obj_add_flag(screen3_calender,LV_OBJ_FLAG_HIDDEN);
calendar_flag = 0;
}
}
}
void screen3_calender_dropdown_cb(lv_event_t *e){
lv_event_code_t code = lv_event_get_code(e);
//lv_obj_t * obj = lv_event_get_target(e); //检测是哪个控件触发的事件
if(code == LV_EVENT_VALUE_CHANGED){
//#if EXIST_RECORD_DATA_FILE
ui_Screen3_calendar_set_highlight();
//#endif
}
}
//选择日历的日期将日历设置为选择的日期并在显示日期的btn上同步更新
void screen3_calender_event_cb(lv_event_t *e){
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t * tables[8] = {data_table1,data_table2,data_table3,data_table4,data_table5,data_table6,data_table7,data_table8};
//点击相同日期也会触发
if(code == LV_EVENT_VALUE_CHANGED) {
//隐藏日历
//LV_LOG_USER("calendar date value changed,hide calendar\n");
lv_obj_add_flag(screen3_calender,LV_OBJ_FLAG_HIDDEN);
calendar_flag = 0;
//获取点击的日期
lv_calendar_date_t clicked_date;
lv_calendar_get_pressed_date(screen3_calender, &clicked_date);
lv_label_set_text_fmt(screen3_calender_dsc_label,"%d.%02d.%02d",clicked_date.year,clicked_date.month,clicked_date.day);
//LV_LOG_USER("year:%d,month:%d,day:%d\n",clicked_date.year,clicked_date.month,clicked_date.day);
//遍历高亮日期数组,查询是否存在相同的项,如果存在相同的,则代表点击的日期有效,否则代表无该文件
uint8_t highlight_flag = 0;
for(int i = 0; i < 31; i++){
if( clicked_date.year == highlighted_days[i].year &&
clicked_date.month == highlighted_days[i].month &&
clicked_date.day == highlighted_days[i].day)
{
highlight_flag = 1;
break;
}
}
uint8_t different_date_flag = 1;
char * label_date = lv_label_get_text(screen3_calender_dsc_label);
int year,month,day;
sscanf(label_date,"%d.%d.%d",&year,&month,&day);
//LV_LOG_USER("label_date:%s,year:%d,month:%d,day:%d\n",label_date,year,month,day);
if(year == clicked_date.year && month == clicked_date.month && day == clicked_date.day) different_date_flag = 0;
//当既不是相同日期又存在文件时,需要从新给全局遍历赋值
if(highlight_flag && different_date_flag){
//LV_LOG_USER("different date and file exist\n");
//将结构体变量初始化为0
lv_memset_00(&global_file_data_p,sizeof(struct Return_Data));
//判断文件是否可读
this_date_have_data = findDataFile(clicked_date.year,clicked_date.month,clicked_date.day);
if(this_date_have_data)
{
//LV_LOG_USER("unempty file\n");
//生成文件路径
char file_path[32];
sprintf(file_path,"E:/%d/%02d/%02d.txt",(int)clicked_date.year,(int)clicked_date.month,(int)clicked_date.day);
//LV_LOG_USER("file_path:%s,id num = %d\n",file_path,global_file_data_p.id_count);
//打开文件
// lv_fs_file_t file_in_screen3_calender_event_cb = {
// .drv = NULL,
// .file_d = NULL
// };
QFILE fd = ql_fopen(file_path,"rb");// lv_fs_open(&file_in_screen3_calender_event_cb,file_path,LV_FS_MODE_RD);
//读取文件赋值给变量
readDataFromFile(fd,&global_file_data_p);
ql_fclose(fd);//lv_fs_close(&file_in_screen3_calender_event_cb);
current_id =0;
end_count = 0;
//根据变量处理控件
//计算总页数设置spinbox页数label以及spinbox范围
uint8_t page_count = global_file_data_p.id_count/8 + 1;
lv_label_set_text_fmt(screen3_spinbox_dsc_label,"/ %d",page_count);
lv_spinbox_set_range(screen3_spinbox, 1,page_count);
//LV_LOG_USER("different id num is: %d, page_count = %d\n", global_file_data_p.id_count,page_count);
//根据当前页数和总页数设置tabel的数据
uint8_t current_page = lv_spinbox_get_value(screen3_spinbox);
setDataToTables(&global_file_data_p,current_page,page_count);
//使能点击flag
lv_obj_add_flag(btn_page_plus,LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_flag(btn_page_reduce,LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_flag(scrren3_spinbox_btn,LV_OBJ_FLAG_CLICKABLE);
lv_obj_t * tables[8] = {data_table1,data_table2,data_table3,data_table4,data_table5,data_table6,data_table7,data_table8};
for(int i = 0; i < 8; i++){
lv_obj_add_flag(tables[i],LV_OBJ_FLAG_CLICKABLE);
}
return;
}
//如果文件空
else
{
//LV_LOG_USER("empty file\n");
goto exit;
}
}
else if(!different_date_flag)
{
//代表点击了相同的日期,直接返回
//LV_LOG_USER("click same date\n");
return;
}
else
{
//代表点了不同的日期但是日期对应没有文件
//LV_LOG_USER("click different date but no file\n");
goto exit;
}
}
exit:
//清空table,清除table的可点击flag
for(int i = 0; i < 8; i++){
lv_obj_clear_flag(tables[i],LV_OBJ_FLAG_CLICKABLE);
for(int j = 0; j < 6; j++){
lv_table_set_cell_value_fmt(tables[i],0,j,"");
}
}
//清除spinbox的btn的可点击flag
lv_obj_clear_flag(btn_page_plus,LV_OBJ_FLAG_CLICKABLE);
lv_obj_clear_flag(btn_page_reduce,LV_OBJ_FLAG_CLICKABLE);
lv_obj_clear_flag(scrren3_spinbox_btn,LV_OBJ_FLAG_CLICKABLE);
//设置spinbox的label
lv_label_set_text(screen3_spinbox_dsc_label,"N/A");
return;
}
//当点击data_table时创建chart界面
void screen3_data_table_chart_create(lv_event_t * e){
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_CLICKED){
//LV_LOG_USER("get code and get target\n");
#if 1
/*获取id如果id为空则直接返回不生成chart*/
int id = atoi(lv_table_get_cell_value(target, 0, 0));
if(id == 0){
LV_LOG_USER("id is empty\n");
return;
}
/*根据id获取文件指针位置和偏移量*/
int offset = 0;
for( int i = 0; i < global_file_data_p.id_count; i++){
if(id == global_file_data_p.dataArr[i].id){
offset = global_file_data_p.dataArr[i].offset;
break;
}
}
//LV_LOG_USER("id = %d, offset = %d\n",id,offset);
/*获取该id的chart数据*/
//生成文件路径并打开文件
int year,month,day;
char file_path[18];
sscanf(lv_label_get_text(screen3_calender_dsc_label), "%d.%d.%d", &year,&month,&day);
sprintf(file_path,"E:/%d/%02d/%02d.txt",year,month,day);
//LV_LOG_USER("path:%s\n",file_path);
// lv_fs_file_t file_in_screen3_data_table_chart_create = {
// .drv = NULL,
// .file_d = NULL
// };
// lv_fs_open(&file_in_screen3_data_table_chart_create,file_path,LV_FS_MODE_RD);
QFILE fd = ql_fopen(file_path,"rb");
//读取该id的chart数据
lv_memset_00(&chartdata,sizeof(struct ChartData));
setDataToChart(fd,offset,id,&chartdata);
ql_fclose(fd);//lv_fs_close(&file_in_screen3_data_table_chart_create);
#endif
#if 0
printf("same_id_count = %d\n",chartdata.same_id_count+1);
for(int i = 0; i < chartdata.same_id_count+1; i++){
printf("depth:%.3f\t,V:%.3f,I:%.3f,time:%s\n",
chartdata.depth[i],
chartdata.V[i],
chartdata.I[i],
chartdata.time[i]
);
}
#endif
int num = chartdata.same_id_count+1;
if(num <= 1){
LV_LOG_USER("too few points\n");
return;
}
ui_screen3_chart_init(num);
}
}
/****************************************************************************************************************************************/
void ui_screen3_init(void)
{
/*****************************************************显示日期的label**********************************************************/
lv_obj_t * screen3_calender_btn = lv_btn_create(ui_Screen3);
lv_obj_set_size(screen3_calender_btn, 100, 34);
lv_obj_set_pos(screen3_calender_btn,60,0);
//点击btn显示或隐藏calendar,并高亮有文件的日期
lv_obj_add_event_cb(screen3_calender_btn, screen3_calender_create_cb, LV_EVENT_CLICKED, NULL);
screen3_calender_dsc_label = lv_label_create(screen3_calender_btn);
lv_obj_center(screen3_calender_dsc_label);
/*
// 获取当前时间戳
time_t t = time(NULL);
// 使用localtime函数将时间戳转换为本地时间结构
struct tm *local_time = localtime(&t);
// 从本地时间结构中提取年、月和日
int year = local_time->tm_year + 1900; // 年份需要加上1900
int month = local_time->tm_mon + 1; // 月份从0开始需要加1
int day = local_time->tm_mday;
char calendar[11];
sprintf(calendar,"%d.%d.%d",year,month,day);
*/
lv_label_set_text(screen3_calender_dsc_label,"2024.01.10");
/*****************************************************显示页数的spinbox**********************************************************/
//创建承载spinbox和描述label的btn
scrren3_spinbox_btn = lv_btn_create(ui_Screen3);
lv_obj_set_pos(scrren3_spinbox_btn,330,0);
lv_obj_set_size(scrren3_spinbox_btn,80,30);
lv_obj_set_style_bg_color(scrren3_spinbox_btn,lv_color_hex(0xFFFFFFF),0);
//点击显示输入文本框和键盘
lv_obj_add_event_cb(scrren3_spinbox_btn, lv_spinbox_textarea_event_cb, LV_EVENT_CLICKED, NULL);
//创建spinbox
screen3_spinbox = lv_spinbox_create(scrren3_spinbox_btn);
lv_spinbox_set_digit_format(screen3_spinbox, 2, 2);
lv_obj_set_width(screen3_spinbox, 46);
lv_obj_align(screen3_spinbox,LV_ALIGN_CENTER,-15,0);
lv_spinbox_set_value(screen3_spinbox,1);//设置初始为第一页
lv_obj_set_style_border_opa(screen3_spinbox,0,0);
lv_obj_set_style_outline_opa(screen3_spinbox,0,0);
//创建显示总页数的label
screen3_spinbox_dsc_label = lv_label_create(scrren3_spinbox_btn);
lv_obj_set_size(screen3_spinbox_dsc_label,50,34);
lv_obj_align_to(screen3_spinbox_dsc_label,screen3_spinbox,LV_ALIGN_OUT_RIGHT_MID,0,8);
lv_obj_set_style_text_font(screen3_spinbox_dsc_label,&lv_font_montserrat_16,0);
lv_label_set_text(screen3_spinbox_dsc_label,"/100");
lv_obj_set_style_border_opa(screen3_spinbox_dsc_label,0,0);
lv_obj_set_style_outline_opa(screen3_spinbox_dsc_label,0,0);
/*****************************************************控制翻页的button**********************************************************/
btn_page_plus = lv_btn_create(ui_Screen3);
lv_obj_set_size(btn_page_plus, 30, 30);
lv_obj_set_pos(btn_page_plus,410,0);
lv_obj_set_style_bg_img_src(btn_page_plus, LV_SYMBOL_PLUS, 0);
btn_page_reduce = lv_btn_create(ui_Screen3);
lv_obj_set_size(btn_page_reduce, 30, 30);
lv_obj_set_pos(btn_page_reduce,300,0);
lv_obj_set_style_bg_img_src(btn_page_reduce, LV_SYMBOL_MINUS, 0);
//spinbox页数+1
lv_obj_add_event_cb(btn_page_plus, lv_spinbox_increment_event_cb, LV_EVENT_ALL,NULL);
//spinbox页数-1
lv_obj_add_event_cb(btn_page_reduce, lv_spinbox_decrement_event_cb, LV_EVENT_ALL,NULL);
/*****************************************************记录数据的table**********************************************************/
char text[6][16] = {"桩点号","最大喷浆量","最大深度","平均电流","开始时间","结束时间"};
int align[6] = {-210,-125,-40,35,120,210};
int size[6] = {50,80,70,70,70,70};
for(int i = 0; i < 6; i++){
lv_obj_t * screen3_label = lv_label_create(ui_Screen3);
lv_obj_set_size(screen3_label,size[i],30);
lv_obj_align(screen3_label,LV_ALIGN_TOP_MID, align[i], 45);
lv_obj_clear_flag(screen3_label,LV_OBJ_FLAG_SCROLLABLE);
lv_label_set_text(screen3_label,text[i]);
lv_obj_set_style_text_font(screen3_label, &lv_font_chinese_12_name, 0);
}
data_table1 = lv_table_create(ui_Screen3);
data_table2 = lv_table_create(ui_Screen3);
data_table3 = lv_table_create(ui_Screen3);
data_table4 = lv_table_create(ui_Screen3);
data_table5 = lv_table_create(ui_Screen3);
data_table6 = lv_table_create(ui_Screen3);
data_table7 = lv_table_create(ui_Screen3);
data_table8 = lv_table_create(ui_Screen3);
lv_obj_t*screen3_data_tables[] = {data_table1, data_table2, data_table3, data_table4,data_table5, data_table6, data_table7, data_table8};
int align_data[] = {-224,-192,-160,-128,-96,-64,-32,0};
for(int r=0;r<8;r++){
lv_obj_align(screen3_data_tables[r],LV_ALIGN_BOTTOM_MID, 10, align_data[r]);//设置位置
lv_table_set_row_cnt(screen3_data_tables[r],1);//设置行列数
lv_table_set_col_cnt(screen3_data_tables[r],6);
lv_obj_set_height(screen3_data_tables[r],35);
lv_obj_set_style_border_width(screen3_data_tables[r],1,LV_PART_MAIN);
lv_obj_set_style_pad_top(screen3_data_tables[r],0,LV_PART_ITEMS);
lv_obj_clear_flag(screen3_data_tables[r],LV_OBJ_FLAG_SCROLLABLE);
lv_table_set_col_width(screen3_data_tables[r],0,75);
lv_table_set_col_width(screen3_data_tables[r],1,87);
lv_table_set_col_width(screen3_data_tables[r],2,75);
lv_table_set_col_width(screen3_data_tables[r],3,80);
lv_table_set_col_width(screen3_data_tables[r],4,100);
lv_table_set_col_width(screen3_data_tables[r],5,100);
//当点击table时生成对应的chart
lv_obj_add_event_cb(screen3_data_tables[r], screen3_data_table_chart_create, LV_EVENT_CLICKED,NULL);
}
/*****************************************************calendar**********************************************************/
screen3_calender = lv_calendar_create(ui_Screen3);
lv_obj_set_size(screen3_calender, 480, 287);
lv_obj_align(screen3_calender,LV_ALIGN_BOTTOM_MID,0,0);
lv_obj_add_flag(screen3_calender,LV_OBJ_FLAG_HIDDEN);
//选择日期读取对应日期文件设置table更新label
lv_obj_add_event_cb(screen3_calender, screen3_calender_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
lv_obj_t * calendar_dropdown_background = lv_calendar_header_dropdown_create(screen3_calender);
calendar_dropdown_year = lv_obj_get_child(calendar_dropdown_background,0);
calendar_dropdown_month = lv_obj_get_child(calendar_dropdown_background,1);
//当日历的年月改变时,读取相对应的路径并高亮对应日期
lv_obj_add_event_cb(calendar_dropdown_year, screen3_calender_dropdown_cb, LV_EVENT_VALUE_CHANGED, NULL);
lv_obj_add_event_cb(calendar_dropdown_month, screen3_calender_dropdown_cb, LV_EVENT_VALUE_CHANGED, NULL);
/*****************************************************textarea+keyboard**********************************************************/
//创建输入文本框并隐藏
screen3_spinbox_label_textarea = lv_textarea_create(ui_Screen3);
lv_textarea_set_one_line(screen3_spinbox_label_textarea, true);
lv_obj_align(screen3_spinbox_label_textarea, LV_ALIGN_TOP_MID, 0, 32);
lv_obj_set_width(screen3_spinbox_label_textarea,480);
lv_obj_add_state(screen3_spinbox_label_textarea, LV_STATE_FOCUSED);
lv_obj_add_flag(screen3_spinbox_label_textarea,LV_OBJ_FLAG_HIDDEN);
//为输入文本框创建输入键盘
static const char * btnm_map[] = {
"1", "2", "3", "\n",
"4", "5", "6", "\n",
"7", "8", "9", "\n",
LV_SYMBOL_BACKSPACE, "0", LV_SYMBOL_NEW_LINE, ""};
btnm = lv_btnmatrix_create(ui_Screen3);
lv_obj_set_size(btnm, 480, 250);
lv_obj_align(btnm, LV_ALIGN_BOTTOM_MID, 0, 0);
lv_obj_clear_flag(btnm, LV_OBJ_FLAG_CLICK_FOCUSABLE); /*To keep the text area focused on button clicks*/
lv_btnmatrix_set_map(btnm, btnm_map);
lv_obj_add_flag(btnm,LV_OBJ_FLAG_HIDDEN);
//回车时设置label隐藏ta和btnm
lv_obj_add_event_cb(btnm, screen3_textarea_keyboard_event_cb, LV_EVENT_ALL, NULL);
//将键盘输入的数据键入到textarea上
lv_obj_add_event_cb(btnm, screen3_btnm_event_handler, LV_EVENT_VALUE_CHANGED, screen3_spinbox_label_textarea);
}