#include "include.h" #include "func.h" #include "ble_protocol_msg.h" #include "app_variable.h" #include "spirit_island_api.h" #define TRACE_EN 0 #if TRACE_EN #define TRACE(...) printf(__VA_ARGS__) #else #define TRACE(...) #endif /* 卡片坐标信息 */ #define MESSAGE_BOX_AT_LEAST_NUM 1 #define MESSAGE_BOX_HEIGHT 160 /* 页面坐标信息 */ #define MESSAGE_PAGE_HEIGHT(n) ((n - MESSAGE_BOX_AT_LEAST_NUM) * MESSAGE_BOX_HEIGHT) #define MESSAGE_PAGE_DRAG_SIZE 120 static BleProtocol_Msg_t *g_message = NULL; static uint8_t MsgStorageCnt = 0; static uint8_t Refresh = 0; //卡片/按钮id enum{ COMPO_ID_CARDBOX_MESSAGE = 1, }; typedef struct f_sidebar_t_ { page_tp_move_t *ptm; u8 message_number; } f_sidebar_t; static const int message_title_str_table[] = { [STORE_MESSAGE_GENERAL] = STR_MESSAGE, [STORE_MESSAGE_QQ] = STR_MESSAGE_QQ, [STORE_MESSAGE_WECHAT] = STR_MESSAGE_WECHAT, [STORE_MESSAGE_FACEBOOK] = STR_MESSAGE_FACEBOOK, [STORE_MESSAGE_TWITTER] = STR_MESSAGE_TWITTER, [STORE_MESSAGE_WHATSAPP] = STR_MESSAGE_WHATSAPP, }; //创建右滑菜单 compo_form_t * func_message_form_create(void) { compo_cardbox_t *cardbox; compo_picturebox_t *pic; char text_buf[50] = {0}; // 新建窗体 compo_form_t *frm = compo_form_create(true); // 创建遮罩层 compo_shape_t *masklayer = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE); compo_shape_set_color(masklayer, COLOR_BLACK); compo_shape_set_location(masklayer, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, GUI_SCREEN_WIDTH, GUI_SCREEN_HEIGHT); compo_shape_set_alpha(masklayer, 255); compo_form_set_mode(frm, COMPO_FORM_MODE_SHOW_TITLE | COMPO_FORM_MODE_SHOW_TIME); compo_form_set_title(frm, i18n[message_title_str_table[SysVariable.Stroage_type]]); if (MsgStorageCnt == 0) { // compo_picturebox_create_coordinate(frm,UI_BUF_MESSAGE_NULL_BIN,GUI_SCREEN_CENTER_X,GUI_SCREEN_CENTER_Y-20,0,true); compo_textbox_t *text = compo_textbox_create(frm, 20); compo_textbox_set_location(text, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, GUI_SCREEN_WIDTH - 40, 30); compo_textbox_set(text, i18n[STR_NO_MESSAGE]); } for (u16 i = 0; i < MsgStorageCnt; i++) { cardbox = compo_cardbox_create(frm, 1, 1, 3, 220, 122); compo_cardbox_set_pos(cardbox, GUI_SCREEN_CENTER_X, 128 + MESSAGE_BOX_HEIGHT * i); compo_cardbox_rect_set_location(cardbox, 0, 0, 0, 220, 122, 20); compo_cardbox_rect_set_color(cardbox, 0, make_color(68, 68, 68)); compo_setid(cardbox, COMPO_ID_CARDBOX_MESSAGE + i); // compo_cardbox_icon_set(cardbox, 0, UI_BUF_ICON_CALENDAR_BIN); //图标 // compo_cardbox_icon_set_location(cardbox, 0, 220-241, 612-631, 72, 72); compo_cardbox_text_set_location(cardbox, 0, 37, -38, 124, 20); compo_cardbox_text_set(cardbox, 0, (const char *)SysVariable.Message.MsgContent[i].msg_time); // 心率值--------->>>todo // compo_cardbox_text_set_location(cardbox, 1, -73, -15, 186, 20); // compo_cardbox_text_set(cardbox, 1, i18n[STR_CALENDAR]); //日历 compo_cardbox_text_set_location(cardbox, 1, -90, -15, 180, 30); compo_cardbox_text_set_align_center(cardbox,1,false); compo_cardbox_text_set_font(cardbox, 1, UI_BUF_0FONT_FONT_20_BIN); char *msg_title = (const char *)SysVariable.Message.MsgContent[i].name; if (utf8_string_char_count(msg_title) > 9) { memcpy(text_buf, msg_title, utf8_assign_char_length(msg_title, 9)); /* 超出文本超度部分显示"..." */ sprintf(&text_buf[strlen(text_buf)], "%s", "..."); compo_cardbox_text_set(cardbox, 1, text_buf); } else { compo_cardbox_text_set(cardbox, 1, msg_title); } compo_cardbox_text_set_location(cardbox, 2, -90, 20, 180, 40); compo_cardbox_text_set_align_center(cardbox,2,false); compo_cardbox_text_set_font(cardbox, 2, UI_BUF_0FONT_FONT_20_BIN); compo_cardbox_text_set(cardbox, 2, (const char *)SysVariable.Message.MsgContent[i].pdata); // 日历 // pic = compo_picturebox_create(frm, tbl_message_list[get_message_icon(SysVariable.Message.MsgContent[i].type)].res_addr); pic = compo_picturebox_create(frm, UI_BUF_MESSAGE_PUSH_MESSAGE_BIN); compo_picturebox_cut(pic, get_message_icon(SysVariable.Message.MsgContent[i].type), MESSAGE_ITEM_CNT); compo_picturebox_set_pos(pic, 42, 72 + MESSAGE_BOX_HEIGHT * i); pic = compo_picturebox_create(frm, UI_BUF_MESSAGE_RED_REMIND_BIN); compo_picturebox_set_pos(pic, 60, 55 + MESSAGE_BOX_HEIGHT * i); compo_picturebox_set_visible(pic, SysVariable.Message.MsgContent[i].is_noread & SysVariable.red_dot_reminder); } if (MsgStorageCnt > 0) { cardbox = compo_cardbox_create(frm, 0, 1, 0, 60, 60); compo_cardbox_set_pos(cardbox, GUI_SCREEN_CENTER_X, 80 + MESSAGE_BOX_HEIGHT * (MsgStorageCnt)); compo_setid(cardbox, COMPO_ID_CARDBOX_MESSAGE + MsgStorageCnt); compo_cardbox_icon_set(cardbox, 0, UI_BUF_MESSAGE_DELETE_BIN); // 图标 compo_cardbox_icon_set_location(cardbox, 0, 0, 0, 60, 60); } widget_page_update(); return frm; } //刷新右滑组件Widget(时间、温度、图标等) void func_message_update(void) { f_sidebar_t *f_sidebar = (f_sidebar_t *)func_cb.f_cb; if (Refresh) { printf("MsgStorageCnt = %d", MsgStorageCnt); Refresh = 0; compo_form_t *frm = func_cb.frm_main; compo_form_destroy(frm); func_cb.frm_main = func_message_form_create(); if (f_sidebar->ptm) { page_move_info_t info = { .title_used = 1, .page_size = GUI_SCREEN_HEIGHT + MESSAGE_PAGE_HEIGHT(MsgStorageCnt), .page_count = 1, .anim_time_ms = 220, .quick_jump_perc = 60, .up_over_perc = ((float)MESSAGE_PAGE_DRAG_SIZE / (float)(GUI_SCREEN_HEIGHT + MESSAGE_PAGE_HEIGHT(MsgStorageCnt))) * 100, .down_over_perc = ((float)MESSAGE_PAGE_DRAG_SIZE / (float)(GUI_SCREEN_HEIGHT + MESSAGE_PAGE_HEIGHT(MsgStorageCnt))) * 100, }; compo_page_move_init(f_sidebar->ptm, func_cb.frm_main->page_body, &info); } } } //时钟表盘右滑菜单点击处理 static void func_message_click_handler(void) { if (MsgStorageCnt == 0) return; point_t pt = ctp_get_sxy(); u16 id = 0; for (u8 i = COMPO_ID_CARDBOX_MESSAGE; i < COMPO_ID_CARDBOX_MESSAGE + MsgStorageCnt + 1; i++) { if (compo_cardbox_btn_is(compo_getobj_byid(i), pt)) { id = i; } } printf("click id:%d %d\n", id, COMPO_ID_CARDBOX_MESSAGE + MsgStorageCnt); BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); if ((id >= COMPO_ID_CARDBOX_MESSAGE) && (id < COMPO_ID_CARDBOX_MESSAGE + MsgStorageCnt)) { g_message = &SysVariable.Message.MsgContent[id - COMPO_ID_CARDBOX_MESSAGE]; SysVariable.Message.MsgContent[id - COMPO_ID_CARDBOX_MESSAGE].is_noread = false; BleProtocol_Message_Stroage_write(SysVariable.Stroage_type); char *msg = (char *)g_message->pdata; char *title_msg = (char *)g_message->name; char *title = NULL; printf("click id2:%d\n", id); Refresh = 1; int res = msgbox(title_msg, msg, title, MSGBOX_MODE_BTN_DELETE, g_message->type); if (res == MSGBOX_RES_DELETE) { BleProtocol_Message_StroageClear_index(SysVariable.Stroage_type, id - COMPO_ID_CARDBOX_MESSAGE); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; return; } } if (id == COMPO_ID_CARDBOX_MESSAGE + MsgStorageCnt) { BleProtocol_Message_Clear_msgtype(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; Refresh = 1; } } //时钟表盘右滑菜单主要事件流程处理 static void func_message_process(void) { f_sidebar_t *f_sidebar = (f_sidebar_t *)func_cb.f_cb; compo_page_move_process(f_sidebar->ptm); func_message_update(); func_process(); } //时钟表盘右滑菜单功能消息处理 static void func_message_message(size_msg_t msg) { f_sidebar_t *f_sidebar = (f_sidebar_t *)func_cb.f_cb; switch (msg) { case MSG_CTP_TOUCH: if(MsgStorageCnt != 0){ compo_page_move_touch_handler(f_sidebar->ptm); } break; case MSG_CTP_SHORT_UP: case MSG_CTP_SHORT_DOWN: // case MSG_CTP_SHORT_RIGHT: case MSG_CTP_LONG: break; case MSG_CTP_CLICK: func_message_click_handler(); break; case MSG_QDEC_FORWARD: if (MsgStorageCnt != 0) { compo_page_move_set(f_sidebar->ptm, -MESSAGE_BOX_HEIGHT); } break; case MSG_QDEC_BACKWARD: if (MsgStorageCnt != 0) { compo_page_move_set(f_sidebar->ptm, MESSAGE_BOX_HEIGHT); } break; // case KU_BACK: // func_switch_to(FUNC_CLOCK, FUNC_SWITCH_LR_ZOOM_LEFT | FUNC_SWITCH_AUTO); // break; default: func_message(msg); break; } } //时钟表盘右滑菜单进入处理 static void func_message_enter(void) { func_cb.f_cb = func_zalloc(sizeof(f_sidebar_t)); func_cb.frm_main = func_message_form_create(); f_sidebar_t *f_sidebar = (f_sidebar_t *)func_cb.f_cb; // f_sidebar->message_number = MsgStorageCnt; f_sidebar->ptm = (page_tp_move_t *)func_zalloc(sizeof(page_tp_move_t)); printf("func_message_enter MsgStorageCnt = %d",MsgStorageCnt); page_move_info_t info = { .title_used = 1, .page_size = GUI_SCREEN_HEIGHT + MESSAGE_PAGE_HEIGHT(MsgStorageCnt), .page_count = 1, .anim_time_ms = 220, .quick_jump_perc = 60, .up_over_perc = ((float)MESSAGE_PAGE_DRAG_SIZE / (float)(GUI_SCREEN_HEIGHT + MESSAGE_PAGE_HEIGHT(MsgStorageCnt))) * 100, .down_over_perc = ((float)MESSAGE_PAGE_DRAG_SIZE / (float)(GUI_SCREEN_HEIGHT + MESSAGE_PAGE_HEIGHT(MsgStorageCnt))) * 100, }; compo_page_move_init(f_sidebar->ptm, func_cb.frm_main->page_body, &info); } //时钟表盘右滑菜单退出处理 static void func_message_exit(void) { f_sidebar_t *f_sidebar = (f_sidebar_t *)func_cb.f_cb; if (f_sidebar->ptm) { func_free(f_sidebar->ptm); } if(!BleProtocol_Message_Judge_Noread()) { #if defined(TJD_GUI_SPIRIT_ISLAND_SHOW) si_delet_task(message); #endif } } compo_form_t * func_message_gengeral_form_create(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_GENERAL; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; return func_message_form_create(); } compo_form_t * func_message_qq_form_create(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_QQ; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; return func_message_form_create(); } compo_form_t * func_message_wechat_form_create(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_WECHAT; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; return func_message_form_create(); } compo_form_t * func_message_facebook_form_create(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_FACEBOOK; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; return func_message_form_create(); } compo_form_t * func_message_twitter_form_create(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_TWITTER; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; return func_message_form_create(); } compo_form_t *func_message_whatapp_form_create(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_WHATSAPP; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; return func_message_form_create(); } // 时钟表盘右滑菜单 void func_message_gengeral_info(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_GENERAL; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; func_message_enter(); while (func_cb.sta == FUNC_MESSAGE) { func_message_process(); func_message_message(msg_dequeue()); } func_message_exit(); } // 时钟表盘右滑菜单 void func_message_qq_info(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_QQ; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; func_message_enter(); while (func_cb.sta == FUNC_SET_QQ) { func_message_process(); func_message_message(msg_dequeue()); } func_message_exit(); } // 时钟表盘右滑菜单 void func_message_wechat_info(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_WECHAT; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; func_message_enter(); while (func_cb.sta == FUNC_SET_WECHAT) { func_message_process(); func_message_message(msg_dequeue()); } func_message_exit(); } // 时钟表盘右滑菜单 void func_message_facebook_info(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_FACEBOOK; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; func_message_enter(); while (func_cb.sta == FUNC_SET_FACEBOOK) { func_message_process(); func_message_message(msg_dequeue()); } func_message_exit(); } // 时钟表盘右滑菜单 void func_message_twitter_info(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_TWITTER; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; func_message_enter(); while (func_cb.sta == FUNC_SET_TWITTER) { func_message_process(); func_message_message(msg_dequeue()); } func_message_exit(); } // 时钟表盘右滑菜单 void func_message_whatapp_info(void) { printf("%s\n", __func__); SysVariable.Stroage_type = STORE_MESSAGE_WHATSAPP; BleProtocol_Message_Stroage_Read(SysVariable.Stroage_type); MsgStorageCnt = SysVariable.Message.MsgStorageCnt; func_message_enter(); while (func_cb.sta == FUNC_SET_WHATSAPP) { func_message_process(); func_message_message(msg_dequeue()); } func_message_exit(); }