#include "include.h" #include "func.h" #include "func_popup.h" #define TRACE_EN 1 #if TRACE_EN #define TRACE(...) printf(__VA_ARGS__) #else #define TRACE(...) #endif void func_popup_new(u8 pop_id) { if (pop_id) { sys_cb.pop_id = pop_id; msg_queue_detach(EVT_POPUP, 0); msg_enqueue(EVT_POPUP); } } enum { //图像id COMPO_ID_PIC_ALARM = 128, }; typedef struct f_popup_t_ { compo_form_t *frm; u32 tick; } f_popup_t; static f_popup_t *f_popup; //非空表示当前处于弹窗界面 //创建弹窗窗体,创建窗体中不要使用功能结构体 func_cb.f_cb compo_form_t *func_popup_form_create(void) { //新建窗体和背景 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); if(sys_cb.pop_id == POPUP_ID_BLE_REMIND) { compo_shape_set_alpha(masklayer, 255); } else{ compo_shape_set_alpha(masklayer, 220); } switch (sys_cb.pop_id) { case POPUP_ID_ALARM: { //新建图像 compo_picturebox_t *pic; pic = compo_picturebox_create(frm, UI_BUF_ICON_ALARM_CLOCK_BIN); compo_setid(pic, COMPO_ID_PIC_ALARM); compo_picturebox_set_pos(pic, 100, 100); break; } case POPUP_ID_BT_REMIND:{ compo_textbox_t *txt = compo_textbox_create(frm, 100); compo_textbox_set_multiline(txt,true); compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y+30, GUI_SCREEN_WIDTH -GUI_SCREEN_WIDTH/6, 100); compo_textbox_set_autoroll_mode(txt, TEXT_AUTOROLL_MODE_SROLL_CIRC); compo_textbox_set(txt, i18n[STR_CONNECT_BT]); break; } case POPUP_ID_BLE_REMIND:{ compo_picturebox_t *pic; pic = compo_picturebox_create(frm, UI_BUF_COMMON_ICON_UNCONNECTED_BIN); compo_setid(pic, COMPO_ID_PIC_ALARM); compo_picturebox_set_pos(pic, 32+29, 41+27); compo_textbox_t *txt = compo_textbox_create(frm, 100); compo_textbox_set_multiline(txt,true); compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y+50, GUI_SCREEN_WIDTH -GUI_SCREEN_WIDTH/6, 50); compo_textbox_set_autoroll_mode(txt, TEXT_AUTOROLL_MODE_SROLL_CIRC); compo_textbox_set(txt, i18n[STR_CONNECT_APP]); break; } case POPUP_ID_LOW_POWER_REMIND:{ compo_picturebox_t *pic; pic = compo_picturebox_create(frm, UI_BUF_CHARGE_BJ_LOW_BATTERY_BIN); compo_setid(pic, COMPO_ID_PIC_ALARM); compo_picturebox_set_pos(pic, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y); break; } case POPUP_ID_SYNCING:{ compo_textbox_t *txt = compo_textbox_create(frm, 100); compo_textbox_set_multiline(txt,true); compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y+30, GUI_SCREEN_WIDTH -GUI_SCREEN_WIDTH/6, 100); compo_textbox_set_autoroll_mode(txt, TEXT_AUTOROLL_MODE_SROLL_CIRC); compo_textbox_set(txt, i18n[STR_IN_SYNC]); break; } case POPUP_ID_TEST: { //新建矩形 compo_shape_t *shape = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE); compo_shape_set_location(shape, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, GUI_SCREEN_WIDTH/2, GUI_SCREEN_HEIGHT/2); compo_shape_set_color(shape, COLOR_BLUE); break; } default: break; } return frm; } //弹窗功能事件处理 static void func_popup_process(void) { if(sys_cb.pop_id == POPUP_ID_SYNCING) { if(!bt_pbap_is_syncing()) { sys_cb.pop_id = POPUP_ID_NULL; } // BT_NOTICE_PBAP_PULL_PHONEBOOK_COMPLETE } else{ if (tick_check_expire(f_popup->tick, 3000)) { //超时退出 sys_cb.pop_id = POPUP_ID_NULL; } } func_process(); } //弹窗功能消息处理 static void func_popup_message(size_msg_t msg) { switch (msg) { case MSG_CTP_SHORT_UP: case MSG_CTP_SHORT_DOWN: case MSG_CTP_SHORT_LEFT: case MSG_CTP_SHORT_RIGHT: case MSG_CTP_LONG: case MSG_CTP_CLICK: case KU_BACK: case KU_LEFT: case KU_RIGHT: sys_cb.pop_id = POPUP_ID_NULL; break; case MSG_QDEC_FORWARD: case MSG_QDEC_BACKWARD: break; default: func_message(msg); break; } } //进入弹窗功能 static void func_popup_enter(void) { f_popup = (f_popup_t *)func_zalloc(sizeof(f_popup_t)); f_popup->frm = func_popup_form_create(); f_popup->tick = tick_get(); } //退出弹窗功能 static void func_popup_exit(void) { if (f_popup->frm) { compo_form_destroy(f_popup->frm); } if (f_popup) { func_free(f_popup); f_popup = NULL; } bsp_motor_stop(MOTOR_PORT); } //打断弹窗功能 void func_popup_break(void) { printf("%s[%d]\n", __func__, sys_cb.pop_id); if (f_popup) { //打断当前弹窗 compo_form_destroy(f_popup->frm); } } //弹窗功能 void func_popup(void) { if (compo_pool_get_top() != compo_pool_get_bottom() && !f_popup) { //已存在2个form且不在弹窗界面 msg_queue_detach(EVT_POPUP, 0); msg_enqueue(EVT_POPUP); return; } printf("%s[%d]\n", __func__, sys_cb.pop_id); if (f_popup) { //打断当前弹窗 compo_form_destroy(f_popup->frm); f_popup->frm = func_popup_form_create(); f_popup->tick = tick_get(); } else { //新建弹窗 func_popup_enter(); while (sys_cb.pop_id) { func_popup_process(); func_popup_message(msg_dequeue()); } func_popup_exit(); } }